diff --git a/.flake8 b/.flake8 index 55118b3f..eb5f618d 100644 --- a/.flake8 +++ b/.flake8 @@ -1,3 +1,6 @@ [flake8] max-line-length = 120 -exclude = zrok_api, build \ No newline at end of file +exclude = + ./sdk/python/sdk/zrok/zrok_api/**, + ./build/** + diff --git a/.github/issue_template.md b/.github/issue_template.md index b2ff3156..e61b8fd3 100644 --- a/.github/issue_template.md +++ b/.github/issue_template.md @@ -1,9 +1,9 @@ -Thank you for taking the time to reach out regarding zrok! +*** IMPORTANT: THIS ISSUE DATABASE IS NOT FOR SUPPORT *** If you think you have found a bug in zrok, or you need help with a specific issue, please reach out for support on the OpenZiti Discourse group at: https://openziti.discourse.group/ -There is a zrok topic available there. The entire zrok and OpenZiti team are monitoring that forum. They're not monitoring this issue database. If you decide to open an issue here anyway, we're probably still going to guide you to the Discourse forum to assist you. Going there first will get you help faster. :-) +There is a zrok topic available there. You can use your GitHub credentials to log in. The entire zrok and OpenZiti team are monitoring that forum. They're not monitoring this issue database. If you decide to open an issue here anyway, we're probably still going to guide you to the Discourse forum to assist you. Going there first will get you help faster. :-) This issue database is for vetted roadmap items and confirmed bugs within the core open-source portion of zrok. \ No newline at end of file diff --git a/.github/workflows/build-wheels.yml b/.github/workflows/build-wheels.yml index 0fe9a743..0aad76bc 100644 --- a/.github/workflows/build-wheels.yml +++ b/.github/workflows/build-wheels.yml @@ -5,7 +5,26 @@ on: types: [released] jobs: + enforce_stable_semver: + name: Require Stable Release Semver + runs-on: ubuntu-24.04 + outputs: + version: ${{ steps.parse.outputs.version }} + steps: + - name: Parse Release Version + id: parse + shell: bash + run: | + if [[ "${GITHUB_REF_NAME}" =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then + echo "GITHUB_REF_NAME=${GITHUB_REF_NAME} is a stable release semver ref" + echo "version=${GITHUB_REF_NAME#v}" | tee -a $GITHUB_OUTPUT + else + echo "GITHUB_REF_NAME=${GITHUB_REF_NAME} is not a stable release semver ref" >&2 + exit 1 + fi + build_wheels: + needs: enforce_stable_semver defaults: run: working-directory: sdk/python/sdk/zrok @@ -45,7 +64,7 @@ jobs: name: zrok_sdk_${{ matrix.spec.target }} path: ${{ github.workspace }}/sdk/python/sdk/zrok/dist/* - publish: + publish-testpypi: runs-on: ubuntu-20.04 needs: [ build_wheels ] permissions: @@ -54,16 +73,10 @@ jobs: - name: Download artifacts uses: actions/download-artifact@v4 with: - path: ./download + path: ./dist merge-multiple: true pattern: zrok_sdk_* - - name: check - run: | - ls -lR ./download/ - mkdir dist - cp ./download/* ./dist/ - - name: Publish wheels (TestPYPI) uses: pypa/gh-action-pypi-publish@release/v1 with: @@ -72,6 +85,19 @@ jobs: skip-existing: true verbose: true + publish-pypi: + runs-on: ubuntu-20.04 + needs: [ publish-testpypi ] + permissions: + id-token: write + steps: + - name: Download artifacts + uses: actions/download-artifact@v4 + with: + path: ./dist + merge-multiple: true + pattern: zrok_sdk_* + - name: Publish wheels (PyPI) uses: pypa/gh-action-pypi-publish@release/v1 with: diff --git a/.github/workflows/ci-build.yml b/.github/workflows/ci-build.yml index 9f1569a1..d13131b3 100644 --- a/.github/workflows/ci-build.yml +++ b/.github/workflows/ci-build.yml @@ -29,19 +29,29 @@ jobs: - name: setup-node uses: actions/setup-node@v4 with: - node-version: 18.x + node-version: 20.x - name: install ui node modules shell: bash run: npm install working-directory: ui - - name: build node ui + - name: build ui shell: bash run: npm run build working-directory: ui env: CI: "true" + + - name: install agent ui node modules + shell: bash + run: npm install + working-directory: agent/agentUi + + - name: build agent ui + shell: bash + run: npm run build + working-directory: agent/agentUi - name: go install shell: bash diff --git a/.github/workflows/homebrew.yml b/.github/workflows/homebrew.yml index 41b48764..a1d1d994 100644 --- a/.github/workflows/homebrew.yml +++ b/.github/workflows/homebrew.yml @@ -5,7 +5,26 @@ on: types: [released] jobs: + enforce_stable_semver: + name: Require Stable Release Semver + runs-on: ubuntu-24.04 + outputs: + version: ${{ steps.parse.outputs.version }} + steps: + - name: Parse Release Version + id: parse + shell: bash + run: | + if [[ "${GITHUB_REF_NAME}" =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then + echo "GITHUB_REF_NAME=${GITHUB_REF_NAME} is a stable release semver ref" + echo "version=${GITHUB_REF_NAME#v}" | tee -a $GITHUB_OUTPUT + else + echo "GITHUB_REF_NAME=${GITHUB_REF_NAME} is not a stable release semver ref" >&2 + exit 1 + fi + update-brew: + needs: enforce_stable_semver if: github.repository_owner == 'openziti' runs-on: ubuntu-latest steps: diff --git a/.github/workflows/node-sdk.yml b/.github/workflows/node-sdk.yml index ae1b9254..8645c3bf 100644 --- a/.github/workflows/node-sdk.yml +++ b/.github/workflows/node-sdk.yml @@ -2,13 +2,34 @@ name: Build/Release Node SDK on: release: - types: [ published ] + types: [ released ] pull_request: branches: [ main ] jobs: + enforce_stable_semver: + name: Require Stable Release Semver + if: github.event.action == 'released' + runs-on: ubuntu-24.04 + outputs: + version: ${{ steps.parse.outputs.version }} + steps: + - name: Parse Release Version + id: parse + shell: bash + run: | + if [[ "${GITHUB_REF_NAME}" =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then + echo "GITHUB_REF_NAME=${GITHUB_REF_NAME} is a stable release semver ref" + echo "version=${GITHUB_REF_NAME#v}" | tee -a $GITHUB_OUTPUT + else + echo "GITHUB_REF_NAME=${GITHUB_REF_NAME} is not a stable release semver ref" >&2 + exit 1 + fi + build: + needs: enforce_stable_semver + if: always() name: Build for Node-${{ matrix.node_ver }} ${{ matrix.config.target }}/${{ matrix.config.arch }} runs-on: ${{ matrix.config.os }} @@ -69,4 +90,3 @@ jobs: npm publish --access public env: NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} - diff --git a/.github/workflows/promote-downstreams.yml b/.github/workflows/promote-downstreams.yml new file mode 100644 index 00000000..6e46c3df --- /dev/null +++ b/.github/workflows/promote-downstreams.yml @@ -0,0 +1,108 @@ +name: Promote Downstream Releases + +on: + # may be triggered manually on a release tag that represents a prerelease to promote it to a release in the downstream package repositories and Docker Hub + workflow_dispatch: + # automatically trigger if an existing GitHub release is marked "latest" + release: + types: [released] # this release event activity type excludes prereleases + +# cancel older, redundant runs of same workflow on same branch +concurrency: + group: ${{ github.workflow }}-${{ github.head_ref || github.ref_name }} + cancel-in-progress: true + +jobs: + enforce_stable_semver: + name: Require Stable Release Semver + runs-on: ubuntu-24.04 + outputs: + version: ${{ steps.parse.outputs.version }} + steps: + - name: Parse Release Version + id: parse + shell: bash + run: | + if [[ "${GITHUB_REF_NAME}" =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then + echo "GITHUB_REF_NAME=${GITHUB_REF_NAME} is a stable release semver ref" + echo "version=${GITHUB_REF_NAME#v}" | tee -a $GITHUB_OUTPUT + else + echo "GITHUB_REF_NAME=${GITHUB_REF_NAME} is not a stable release semver ref" >&2 + exit 1 + fi + + promote_docker: + name: Tag Container Image ${{ matrix.image.repo }}:latest + needs: enforce_stable_semver + runs-on: ubuntu-24.04 + strategy: + fail-fast: true + matrix: + image: + - repo: ${{ vars.ZROK_CONTAINER_IMAGE_REPO || 'docker.io/openziti/zrok' }} + steps: + - name: Login to Docker Hub + uses: docker/login-action@v3 + with: + username: ${{ vars.DOCKER_HUB_API_USER || secrets.DOCKER_HUB_API_USER }} + password: ${{ secrets.DOCKER_HUB_API_TOKEN }} + + - name: Tag Latest + shell: bash + run: > + docker buildx imagetools create --tag + ${{ matrix.image.repo }}:latest + ${{ matrix.image.repo }}:${{ needs.enforce_stable_semver.outputs.version }} + + promote_artifactory: + name: Promote ${{ matrix.package_name }}-${{ matrix.arch.rpm }}.${{ matrix.packager }} + needs: enforce_stable_semver + strategy: + fail-fast: true + matrix: + package_name: + - zrok + - zrok-share + arch: + - deb: amd64 + rpm: x86_64 + - deb: arm64 + rpm: aarch64 + - deb: armhf + rpm: armv7hl + packager: + - rpm + - deb + runs-on: ubuntu-24.04 + env: + ZITI_DEB_TEST_REPO: ${{ vars.ZITI_DEB_TEST_REPO || 'zitipax-openziti-deb-test' }} + ZITI_RPM_TEST_REPO: ${{ vars.ZITI_RPM_TEST_REPO || 'zitipax-openziti-rpm-test' }} + ZITI_DEB_PROD_REPO: ${{ vars.ZITI_DEB_PROD_REPO || 'zitipax-openziti-deb-stable' }} + ZITI_RPM_PROD_REPO: ${{ vars.ZITI_RPM_PROD_REPO || 'zitipax-openziti-rpm-stable' }} + steps: + - name: Configure jFrog CLI + uses: jfrog/setup-jfrog-cli@v4 + env: + JF_ENV_1: ${{ secrets.ZITI_ARTIFACTORY_CLI_CONFIG_PACKAGE_UPLOAD }} + + - name: Copy RPM from test repo to stable repo with jFrog CLI + if: matrix.packager == 'rpm' + shell: bash + run: > + jf rt copy + --recursive=false + --flat=true + --fail-no-op=true + ${{ env.ZITI_RPM_TEST_REPO }}/redhat/${{ matrix.arch.rpm }}/${{ matrix.package_name }}-${{ needs.enforce_stable_semver.outputs.version }}-1.${{ matrix.arch.rpm }}.rpm + ${{ env.ZITI_RPM_PROD_REPO }}/redhat/${{ matrix.arch.rpm }}/ + + - name: Copy DEB from test repo to stable repo with jFrog CLI + if: matrix.packager == 'deb' + shell: bash + run: > + jf rt copy + --recursive=false + --flat=true + --fail-no-op=true + ${{ env.ZITI_DEB_TEST_REPO }}/pool/${{ matrix.package_name }}/${{ matrix.arch.deb }}/${{ matrix.package_name }}_${{ needs.enforce_stable_semver.outputs.version }}-1_${{ matrix.arch.deb }}.deb + ${{ env.ZITI_DEB_PROD_REPO }}/pool/${{ matrix.package_name }}/${{ matrix.arch.deb }}/ diff --git a/.github/workflows/publish-docker-images.yml b/.github/workflows/publish-docker-images.yml index 937c2884..4faf43c1 100644 --- a/.github/workflows/publish-docker-images.yml +++ b/.github/workflows/publish-docker-images.yml @@ -1,55 +1,40 @@ name: Publish Docker Images on: - workflow_dispatch: + workflow_call: inputs: zrok-version: - description: zrok release tag to publish as a Docker image + description: Image tag to publish for zrok container images type: string required: true - release: - types: - - released # excludes "prereleased" which is included in "published" to - # avoid prematurely releasing semver tagged container images jobs: publish-docker-images: - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 env: - RELEASE_REF: ${{ inputs.zrok-version || github.ref }} + RELEASE_REF: ${{ inputs.zrok-version }} steps: # compose the semver string without leading "refs/tags" or "v" so we can predict the # release artifact filename - name: Set zrok Version Semver from Tag Ref id: semver run: | - zrok_semver=${RELEASE_REF#refs/tags/} - echo "zrok_semver=${zrok_semver#v}" | tee -a $GITHUB_OUTPUT + echo "zrok_semver=${RELEASE_REF#v}" | tee -a $GITHUB_OUTPUT - name: Checkout Workspace uses: actions/checkout@v4 - - name: Create the Release Arch Dirs - run: | - for TGZ in dist/{amd,arm}64/linux/; do - mkdir -pv ${TGZ} - done - - name: Download Linux AMD64 Release Artifact - uses: dsaltares/fetch-gh-release-asset@1.1.2 + uses: actions/download-artifact@v4 with: - version: tags/v${{ steps.semver.outputs.zrok_semver }} - file: zrok.*_linux_amd64.tar.gz - regex: true - target: dist/amd64/linux/zrok_linux_amd64.tar.gz + name: release-builds-linux-amd64 + path: dist/amd64/linux - name: Download Linux ARM64 Release Artifact - uses: dsaltares/fetch-gh-release-asset@1.1.2 + uses: actions/download-artifact@v4 with: - version: tags/v${{ steps.semver.outputs.zrok_semver }} - file: zrok.*_linux_arm64.tar.gz - regex: true - target: dist/arm64/linux/zrok_linux_arm64.tar.gz + name: release-builds-linux-arm64 + path: dist/arm64/linux - name: Unpack the Release Artifacts run: | @@ -79,7 +64,6 @@ jobs: id: tagprep_cli run: | DOCKER_TAGS="${ZROK_CONTAINER_IMAGE_REPO}:${ZROK_CONTAINER_IMAGE_TAG}" - DOCKER_TAGS+=",${ZROK_CONTAINER_IMAGE_REPO}:latest" echo "DOCKER_TAGS=${DOCKER_TAGS}" | tee -a $GITHUB_OUTPUT # this is the CLI image with the Linux binary for each diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 1537f517..d3d67a6d 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,4 +1,4 @@ -name: Release +name: Pre-Release on: push: @@ -10,16 +10,37 @@ permissions: contents: write env: - ZITI_DEB_PROD_REPO: ${{ vars.ZITI_DEB_PROD_REPO || 'zitipax-openziti-deb-stable' }} - ZITI_RPM_PROD_REPO: ${{ vars.ZITI_RPM_PROD_REPO || 'zitipax-openziti-rpm-stable' }} + ZITI_DEB_TEST_REPO: ${{ vars.ZITI_DEB_TEST_REPO || 'zitipax-openziti-deb-test' }} + ZITI_RPM_TEST_REPO: ${{ vars.ZITI_RPM_TEST_REPO || 'zitipax-openziti-rpm-test' }} JFROG_CLI_VERSION: ${{ vars.JFROG_CLI_VERSION || '2.50.4' }} jobs: - build-linux-amd64: - runs-on: ubuntu-20.04 + build-linux: + name: build-linux-${{ matrix.arch.goreleaser }} + needs: + - build-darwin + - build-windows + runs-on: ubuntu-22.04 # oldest Docker host runner for broadest kernel, syscall, ABI support + container: openziti/ziti-builder:v2 # v2 is based on ubuntu focal 20.04 for broadest glibc support + strategy: + matrix: + arch: + - goreleaser: amd64 + deb: amd64 + rpm: x86_64 + gcc: gcc g++ + - goreleaser: arm64 + deb: arm64 + rpm: aarch64 + gcc: gcc-aarch64-linux-gnu + - goreleaser: armhf + deb: armhf + rpm: armv7hl + gcc: gcc-arm-linux-gnueabihf steps: - - run: sudo apt update - - run: sudo apt-get install gcc-multilib g++-multilib + # skipped because ziti-builder image provides the multi-arch, multi-lib build toolchain + # - run: apt-get update + # - run: apt-get --yes --quiet install ${{ matrix.arch.gcc }} - uses: actions/checkout@v4 with: @@ -44,73 +65,11 @@ jobs: env: CI: "true" - - uses: goreleaser/goreleaser-action@v6 - with: - distribution: goreleaser - version: '~> v2' - args: release --skip=publish --config .goreleaser-linux-amd64.yml - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - - uses: actions/upload-artifact@v4 - with: - name: release-builds-linux-amd64 - path: ./dist/*.gz - - - name: Configure jFrog CLI - uses: jfrog/setup-jfrog-cli@v4 - with: - version: ${{ env.JFROG_CLI_VERSION }} - env: - JF_ENV_1: ${{ secrets.ZITI_ARTIFACTORY_CLI_CONFIG_PACKAGE_UPLOAD }} - - - name: Upload RPM to Artifactory release repo - shell: bash - run: | - for RPM in ./dist/*.rpm; do - echo "INFO: Uploading $RPM" - jf rt upload --recursive=false --flat=true \ - "$RPM" \ - ${{ env.ZITI_RPM_PROD_REPO }}/redhat/x86_64/ - done - - - name: Upload DEB to Artifactory release repo - shell: bash - run: | - for DEB in ./dist/*.deb; do - echo "INFO: Uploading $DEB" - jf rt upload --recursive=false --flat=true \ - --deb=debian/main/amd64 \ - "$DEB" \ - ${{ env.ZITI_DEB_PROD_REPO }}/pool/zrok/amd64/ - done - - build-linux-arm64: - runs-on: ubuntu-20.04 - steps: - - run: sudo apt update - - run: sudo apt-get install gcc-aarch64-linux-gnu - - - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - run: git fetch --force --tags - - - uses: actions/setup-go@v5 - with: - go-version-file: ./go.mod - cache: true - - - uses: actions/setup-node@v4 - with: - node-version: 18.x - - run: npm install - working-directory: ui + working-directory: agent/agentUi - run: npm run build - working-directory: ui + working-directory: agent/agentUi env: CI: "true" @@ -118,13 +77,13 @@ jobs: with: distribution: goreleaser version: '~> v2' - args: release --skip=publish --config .goreleaser-linux-arm64.yml + args: release --skip=publish --config .goreleaser-linux-${{ matrix.arch.goreleaser }}.yml env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - uses: actions/upload-artifact@v4 with: - name: release-builds-linux-arm64 + name: release-builds-linux-${{ matrix.arch.goreleaser }} path: ./dist/*.gz - name: Configure jFrog CLI @@ -134,95 +93,77 @@ jobs: env: JF_ENV_1: ${{ secrets.ZITI_ARTIFACTORY_CLI_CONFIG_PACKAGE_UPLOAD }} - - name: Upload RPM to Artifactory release repo + - name: Upload RPM to Artifactory pre-release repo shell: bash + env: + ARCH: ${{ matrix.arch.rpm }} run: | - for RPM in ./dist/*.rpm; do - echo "INFO: Uploading $RPM" - jf rt upload --recursive=false --flat=true \ - "$RPM" \ - ${{ env.ZITI_RPM_PROD_REPO }}/redhat/aarch64/ + set -o xtrace + shopt -s nullglob + SEMVER=${GITHUB_REF_NAME#v} + SEMVER_CORE=${SEMVER%%-*} + if [[ "$SEMVER_CORE" == ${SEMVER#*-} ]]; then + SEMVER_PRE="" # no semver pre-release suffix + else + SEMVER_PRE=${SEMVER#*-} + fi + for PAX in zrok{,-share}; do + _pattern="./dist/${PAX}-${SEMVER_CORE}${SEMVER_PRE:+~${SEMVER_PRE}}*.${ARCH}.rpm" + if ! compgen -G "$_pattern" > /dev/null; then + echo "ERROR: No RPM files found matching pattern '${_pattern}'" >&2 + ls -1 ./dist/ + exit 1 + fi + _rpms=( $_pattern ) + if [[ ${#_rpms[@]} -ne 1 ]]; then + echo "ERROR: Failed to find exactly one RPM file, got: '${_rpms[@]}'" >&2 + exit 1 + fi + + echo "INFO: Uploading ${_rpms[0]}" + jf rt upload \ + --recursive=false \ + --flat=true \ + --fail-no-op=true \ + "${_rpms[0]}" \ + ${{ env.ZITI_RPM_TEST_REPO }}/redhat/${ARCH}/ done - - name: Upload DEB to Artifactory release repo + - name: Upload DEB to Artifactory pre-release repo shell: bash - run: | - for DEB in ./dist/*.deb; do - echo "INFO: Uploading $DEB" - jf rt upload --recursive=false --flat=true \ - --deb=debian/main/arm64 \ - "$DEB" \ - ${{ env.ZITI_DEB_PROD_REPO }}/pool/zrok/arm64/ - done - - build-linux-arm: - runs-on: ubuntu-20.04 - steps: - - run: sudo apt update - - run: sudo apt-get install gcc-arm-linux-gnueabihf - - - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - run: git fetch --force --tags - - - uses: actions/setup-go@v5 - with: - go-version-file: ./go.mod - cache: true - - - uses: actions/setup-node@v4 - with: - node-version: 18.x - - - run: npm install - working-directory: ui - - - run: npm run build - working-directory: ui env: - CI: "true" - - - uses: goreleaser/goreleaser-action@v6 - with: - distribution: goreleaser - version: '~> v2' - args: release --skip=publish --config .goreleaser-linux-armhf.yml - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - - uses: actions/upload-artifact@v4 - with: - name: release-builds-linux-arm - path: ./dist/*.gz - - - name: Configure jFrog CLI - uses: jfrog/setup-jfrog-cli@v4 - with: - version: ${{ env.JFROG_CLI_VERSION }} - env: - JF_ENV_1: ${{ secrets.ZITI_ARTIFACTORY_CLI_CONFIG_PACKAGE_UPLOAD }} - - - name: Upload RPM to Artifactory release repo - shell: bash + ARCH: ${{ matrix.arch.deb }} run: | - for RPM in ./dist/*.rpm; do - echo "INFO: Uploading $RPM" - jf rt upload --recursive=false --flat=true \ - "$RPM" \ - ${{ env.ZITI_RPM_PROD_REPO }}/redhat/armv7/ - done + set -o xtrace + shopt -s nullglob + SEMVER=${GITHUB_REF_NAME#v} + SEMVER_CORE=${SEMVER%%-*} + if [[ "$SEMVER_CORE" == ${SEMVER#*-} ]]; then + SEMVER_PRE="" # no semver pre-release suffix + else + SEMVER_PRE=${SEMVER#*-} + fi + for PAX in zrok{,-share}; do + _pattern="./dist/${PAX}_${SEMVER_CORE}${SEMVER_PRE:+~${SEMVER_PRE}}*_${ARCH}.deb" + if ! compgen -G "$_pattern" > /dev/null; then + echo "ERROR: No DEB files found matching pattern '${_pattern}'" >&2 + ls -1 ./dist/ + exit 1 + fi + _debs=( $_pattern ) + if [[ ${#_debs[@]} -ne 1 ]]; then + echo "ERROR: Failed to match exactly one DEB file, got: '${_debs[@]}'" >&2 + exit 1 + fi - - name: Upload DEB to Artifactory release repo - shell: bash - run: | - for DEB in ./dist/*.deb; do - echo "INFO: Uploading $DEB" - jf rt upload --recursive=false --flat=true \ - --deb=debian/main/armv7 \ - "$DEB" \ - ${{ env.ZITI_DEB_PROD_REPO }}/pool/zrok/armv7/ + echo "INFO: Uploading ${_debs[0]}" + jf rt upload \ + --recursive=false \ + --flat=true \ + --fail-no-op=true \ + --deb=debian/main/${ARCH} \ + "${_debs[0]}" \ + ${{ env.ZITI_DEB_TEST_REPO }}/pool/${PAX}/${ARCH}/ done build-darwin: @@ -258,6 +199,14 @@ jobs: env: CI: "true" + - run: npm install + working-directory: agent/agentUi + + - run: npm run build + working-directory: agent/agentUi + env: + CI: "true" + - uses: goreleaser/goreleaser-action@v6 with: distribution: goreleaser @@ -303,6 +252,14 @@ jobs: env: CI: "true" + - run: npm install + working-directory: agent/agentUi + + - run: npm run build + working-directory: agent/agentUi + env: + CI: "true" + - uses: goreleaser/goreleaser-action@v6 with: distribution: goreleaser @@ -316,23 +273,20 @@ jobs: name: release-builds-windows path: ./dist/*.gz - publish-release: - # allow skipped but not failed - if: ${{ - !cancelled() - && (needs.build-linux-amd64.result == 'success') - && (needs.build-linux-arm.result == 'success') - && (needs.build-linux-arm64.result == 'success') - && (needs.build-darwin.result == 'success' || needs.build-darwin.result == 'skipped') - && (needs.build-windows.result == 'success' || needs.build-windows.result == 'skipped') - }} + call-publish-docker-images: + name: Publish Release Docker Images needs: - - build-linux-amd64 - - build-linux-arm - - build-linux-arm64 + - build-linux - build-darwin - build-windows + uses: ./.github/workflows/publish-docker-images.yml + secrets: inherit + with: + zrok-version: ${{ github.ref_name }} + + draft-release: runs-on: ubuntu-latest + needs: call-publish-docker-images steps: - uses: actions/checkout@v4 diff --git a/CHANGELOG.md b/CHANGELOG.md index 2933da2d..1275e346 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,56 @@ # CHANGELOG +## v1.0.0 + +MAJOR RELEASE: zrok reaches version 1.0.0! + +FEATURE: Completely redesigned web interface ("API Console"). New implementation provides a dual-mode interface supporting an improved visual network navigator and also a "tabular" view, which provides a more traditional "data" view. New stack built using vite, React, and TypeScript (https://github.com/openziti/zrok/issues/724) + +FEATURE: New "zrok Agent", a background manager process for your zrok environments, which allows you to easily manage and work with multiple `zrok share` and `zrok access` processes. New `--subordinate` flag added to `zrok share [public|private|reserved]` and `zrok access private` to operate in a mode that allows an Agent to manage shares and accesses (https://github.com/openziti/zrok/issues/463) + +FEATURE: New "zrok Agent UI" a web-based user interface for the zrok Agent, which allows creating and releasing shares and accesses through a web browser. This is just an initial chunk of the new Agent UI, and is considered a "minimum viable" version of this interface (https://github.com/openziti/zrok/issues/221) + +FEATURE: `zrok share [public|private|reserved]` and `zrok access private` now auto-detect if the zrok Agent is running in an environment and will automatically service share and access requests through the Agent, rather than in-process if the Agent is running. If the Agent is not running, operation remains as it was in `v0.4.x` and the share or access is handled in-process. New `--force-agent` and `--force-local` flags exist to skip Agent detection and manually select an operating mode (https://github.com/openziti/zrok/issues/751) + +FEATURE `zrok access private` supports a new `--auto` mode, which can automatically find an available open address/port to bind the frontend listener on. Also includes `--auto-address`, `--auto-start-port`, and `--auto-end-port` features with sensible defaults. Supported by both the agent and local operating modes (https://github.com/openziti/zrok/issues/780) + +FEATURE `zrok rebase` command allows "rebasing" an enabled environment onto a different API endpoint. This is useful for migrating already-enabled environments between endpoints supporting different zrok versions (https://github.com/openziti/zrok/issues/869) + +CHANGE: Refactored API implementation. Cleanup, lint removal, additional data elements added, unused data removed (https://github.com/openziti/zrok/issues/834) + +CHANGE: Deprecated the `passwords` configuration stanza. The zrok controller and API console now use a hard-coded set of (what we believe to be) reasonable assumptions about password quality (https://github.com/openziti/zrok/issues/834) + +CHANGE: The protocol for determining valid client versions has been changed. Previously a zrok client would do a `GET` against the `/api/v1/version` endpoint and do a local version string comparison (as a normal precondition to any API call) to see if the controller version matched. The protocol has been amended so that any out-of-date client using the old protocol will receive a version string indicating that they need to uprade their client. New clients will do a `POST` against the `/api/v1/version` endpoint, posting their client version, and the server will check for compatibility. Does not change the security posture in any significant way, but gives more flexibility on the server side for managing client compatibility. Provides a better, cleared out-of-date error message for old clients when accessing `v1.0.0`+ (https://github.com/openziti/zrok/issues/859) + +## v0.4.49 + +FIX: Pre-releases are no longer uploaded to the stable Linux package repo. + +CHANGE: Pre-releases are uploaded to the pre-release Linux package repo and Docker Hub for testing. [RELEASING.md](./RELEASING.md) describes releaser steps and the events they trigger. + +CHANGE: Linux release binaries are now built on the ziti-builder container image based on Ubuntu Focal 20.04 to preserve backward compatibility as the ubuntu-20.04 GitHub runner is end of life. + +## v0.4.48 + +FEATURE: The controller configuration now supports a `disable_auto_migration` boolean in the `store` stanza. When set to `true`, the controller will not attempt to auto-migrate (or otherwise validate the migration state) of the underlying database. Leaving `disable_auto_migration` out, or setting it to false will retain the default behavior of auto-migrating when starting the zrok controller. The `zrok admin migrate` command will still perform a migration regardless of how this setting is configured in the controller configuration (https://github.com/openziti/zrok/issues/866) + +FIX: the Python SDK erroneously assumed the enabled zrok environment contained a config.json file, and was changed to only load it if the file was present (https://github.com/openziti/zrok/pull/853/). + +## v0.4.47 + +CHANGE: the Docker instance will wait for the ziti container healthy status (contribution from Ben Wong @bwong365 - https://github.com/openziti/zrok/pull/790) + +CHANGE: Document solving the DNS propagation timeout for Docker instances that are using Caddy to manage the wildcard certificate. + +CHANGE: Add usage hint in `zrok config get --help` to clarify how to list all valid `configName` and their current values by running `zrok status`. + +CHANGE: The Python SDK's `Overview()` function was refactored as a class method (https://github.com/openziti/zrok/pull/846). + +FEATURE: The Python SDK now includes a `ProxyShare` class providing an HTTP proxy for public and private shares and a +Jupyter notebook example (https://github.com/openziti/zrok/pull/847). + +FIX: PyPi publishing was failing due to a CI issue (https://github.com/openziti/zrok/issues/849) + ## v0.4.46 FEATURE: Linux service template for systemd user units (https://github.com/openziti/zrok/pull/818) diff --git a/RELEASING.md b/RELEASING.md index 14dce65a..56770cf8 100644 --- a/RELEASING.md +++ b/RELEASING.md @@ -1,17 +1,37 @@ # Releasing zrok -## Manual Steps +## Semantic Versioning -1. Create a semver Git tag on main starting with a 'v' character. -1. Push the tag to GitHub. -1. Wait for automated steps to complete. -1. In GitHub Releases, edit the draft release as needed and finalize. +This project uses semantic versioning. See [here](https://semver.org/) for more information. -## Automated Steps +Release tags like `v3.2.1` are eligible for promotion to stable status in GitHub and downstream distribution channels. -1. The Release workflow is triggered by creating the Git tag and - 1. uploads Linux packages to Artifactory and - 1. drafts a release in GitHub Releases. -1. The Publish Container Images workflow is triggered by the Release event and - 1. pushes Docker images to Docker Hub. +Pre-release tags like `v3.2.1-rc1` (with a semver hyphenated pre-release suffix) are published in GitHub as pre-releases, and are blocked from promotion to downstream distribution channels if they are marked "stable" by mistake and the GitHub "released" event fires. + +Pre-release version strings must contain exactly one hyphen, and may not contain an underscore. + +## How to Trigger Release Automation + +> [!NOTE] +> Each trigger is outlined separately, but some may occur simultaneously, e.g., when a draft release is published as stable rather than first publishing it as a pre-release, or a pre-release is promoted to stable and marked as latest at the same time. + +1. Push a tag to GitHub like `v*.*.*` to trigger **the pre-release workflow**. Wait for this workflow to complete before marking the release stable (`isPrerelease: false`). + 1. Linux packages are uploaded to Artifactory as pre-releases. + 1. Docker images are uploaded to Docker Hub as pre-releases. + 1. A release is drafted in GitHub. +1. Edit the draft and publish the release as a pre-release (`isPrerelease: true`). + 1. The one-time GitHub "published" event fires, and binaries are available in GitHub. +1. If the release does not have a pre-release suffix, mark it as stable by un-checking (`isPrerelease: false`). + 1. The one-time GitHub "released" event fires. + 1. Linux packages are promoted to "stable" in Artifactory. + 1. Docker images are promoted to `:latest` in Docker Hub. + 1. Homebrew formulae are built and released. + 1. Python wheels are built and released to PyPi. + 1. Node.js packages are built and released to NPM. +1. Edit the stable release to mark it as latest. + 1. https://docs.zrok.io/docs/guides/install/ always serves the "latest" stable version via GitHub binary download URLs. + +## Rolling Back Downstreams + +The concepts, tools, and procedures for managing existing downstream artifacts in Artifactory and Docker Hub are identical for zrok and ziti. Here's the [RELEASING.md document for ziti](https://github.com/openziti/ziti/blob/main/RELEASING.md#rolling-back-downstreams). diff --git a/SECURITY.md b/SECURITY.md index aa06a21f..96445cf9 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -1,11 +1,3 @@ # Security Policy -## Supported Versions - -Until v1.0.0 or higher is reached, only the most recent version is supported. After v1.0.0 a new version support statement will be released. - -## Reporting a Vulnerability - -If you have an issue that is not a sensitive security issue, please submit your issue via the GitHub issue tracker on either the main repository. - -If you have a sensitive security issue or are unsure if it is sensitive, please email it to: security@openziti.org +Please refer to the [openziti-security repository](https://github.com/openziti/openziti-security) for details of the security policies and processes for this repository. \ No newline at end of file diff --git a/agent/access.go b/agent/access.go new file mode 100644 index 00000000..45a4da66 --- /dev/null +++ b/agent/access.go @@ -0,0 +1,30 @@ +package agent + +import ( + "github.com/michaelquigley/pfxlog" + "github.com/openziti/zrok/agent/proctree" + "github.com/openziti/zrok/cmd/zrok/subordinate" +) + +type access struct { + frontendToken string + token string + bindAddress string + autoMode bool + autoAddress string + autoStartPort uint16 + autoEndPort uint16 + responseHeaders []string + + process *proctree.Child + sub *subordinate.MessageHandler + + agent *Agent +} + +func (a *access) monitor() { + if err := proctree.WaitChild(a.process); err != nil { + pfxlog.ChannelLogger(a.token).Error(err) + } + a.agent.rmAccess <- a +} diff --git a/agent/accessPrivate.go b/agent/accessPrivate.go new file mode 100644 index 00000000..5cb9b9ae --- /dev/null +++ b/agent/accessPrivate.go @@ -0,0 +1,93 @@ +package agent + +import ( + "context" + "errors" + "fmt" + "github.com/openziti/zrok/agent/agentGrpc" + "github.com/openziti/zrok/agent/proctree" + "github.com/openziti/zrok/cmd/zrok/subordinate" + "github.com/openziti/zrok/environment" + "github.com/sirupsen/logrus" + "os" +) + +func (i *agentGrpcImpl) AccessPrivate(_ context.Context, req *agentGrpc.AccessPrivateRequest) (*agentGrpc.AccessPrivateResponse, error) { + root, err := environment.LoadRoot() + if err != nil { + return nil, err + } + + if !root.IsEnabled() { + return nil, errors.New("unable to load environment; did you 'zrok enable'?") + } + + accCmd := []string{os.Args[0], "access", "private", "--subordinate", "-b", req.BindAddress, req.Token} + if req.AutoMode { + accCmd = append(accCmd, "--auto", "--auto-address", req.AutoAddress, "--auto-start-port", fmt.Sprintf("%v", req.AutoStartPort)) + accCmd = append(accCmd, "--auto-end-port", fmt.Sprintf("%v", req.AutoEndPort)) + } + logrus.Info(accCmd) + + acc := &access{ + token: req.Token, + bindAddress: req.BindAddress, + autoMode: req.AutoMode, + autoAddress: req.AutoAddress, + autoStartPort: uint16(req.AutoStartPort), + autoEndPort: uint16(req.AutoEndPort), + responseHeaders: req.ResponseHeaders, + sub: subordinate.NewMessageHandler(), + agent: i.agent, + } + acc.sub.MessageHandler = func(msg subordinate.Message) { + logrus.Info(msg) + } + var bootErr error + acc.sub.BootHandler = func(msgType string, msg subordinate.Message) { + switch msgType { + case subordinate.BootMessage: + if v, found := msg["frontend_token"]; found { + if str, ok := v.(string); ok { + acc.frontendToken = str + } + } + if v, found := msg["bind_address"]; found { + if sr, ok := v.(string); ok { + acc.bindAddress = sr + } + } + + case subordinate.ErrorMessage: + if v, found := msg[subordinate.ErrorMessage]; found { + if str, ok := v.(string); ok { + bootErr = errors.New(str) + } + } + } + } + acc.sub.MalformedHandler = func(msg subordinate.Message) { + logrus.Error(msg) + } + + logrus.Infof("executing '%v'", accCmd) + + acc.process, err = proctree.StartChild(acc.sub.Tail, accCmd...) + if err != nil { + return nil, err + } + + <-acc.sub.BootComplete + + if bootErr == nil { + go acc.monitor() + i.agent.addAccess <- acc + return &agentGrpc.AccessPrivateResponse{FrontendToken: acc.frontendToken}, nil + + } else { + if err := proctree.WaitChild(acc.process); err != nil { + logrus.Errorf("error joining: %v", err) + } + return nil, fmt.Errorf("unable to start access: %v", bootErr) + } +} diff --git a/agent/agent.go b/agent/agent.go new file mode 100644 index 00000000..7d9d616a --- /dev/null +++ b/agent/agent.go @@ -0,0 +1,197 @@ +package agent + +import ( + "context" + "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" + "github.com/openziti/zrok/agent/agentGrpc" + "github.com/openziti/zrok/agent/agentUi" + "github.com/openziti/zrok/agent/proctree" + "github.com/openziti/zrok/environment/env_core" + "github.com/openziti/zrok/sdk/golang/sdk" + "github.com/openziti/zrok/util" + "github.com/pkg/errors" + "github.com/sirupsen/logrus" + "google.golang.org/grpc" + "google.golang.org/grpc/credentials/insecure" + "net" + "net/http" + "os" +) + +type Agent struct { + cfg *AgentConfig + httpEndpoint string + root env_core.Root + agentSocket string + shares map[string]*share + addShare chan *share + rmShare chan *share + accesses map[string]*access + addAccess chan *access + rmAccess chan *access +} + +func NewAgent(cfg *AgentConfig, root env_core.Root) (*Agent, error) { + if !root.IsEnabled() { + return nil, errors.Errorf("unable to load environment; did you 'zrok enable'?") + } + return &Agent{ + cfg: cfg, + root: root, + shares: make(map[string]*share), + addShare: make(chan *share), + rmShare: make(chan *share), + accesses: make(map[string]*access), + addAccess: make(chan *access), + rmAccess: make(chan *access), + }, nil +} + +func (a *Agent) Run() error { + logrus.Infof("started") + + if err := proctree.Init("zrok Agent"); err != nil { + return err + } + + agentSocket, err := a.root.AgentSocket() + if err != nil { + return err + } + l, err := net.Listen("unix", agentSocket) + if err != nil { + return err + } + a.agentSocket = agentSocket + + go a.manager() + go a.gateway(a.cfg) + + srv := grpc.NewServer() + agentGrpc.RegisterAgentServer(srv, &agentGrpcImpl{agent: a}) + if err := srv.Serve(l); err != nil { + return err + } + + return nil +} + +func (a *Agent) Shutdown() { + logrus.Infof("stopping") + + if err := os.Remove(a.agentSocket); err != nil { + logrus.Warnf("unable to remove agent socket: %v", err) + } + for _, shr := range a.shares { + logrus.Debugf("stopping share '%v'", shr.token) + a.rmShare <- shr + } + for _, acc := range a.accesses { + logrus.Debugf("stopping access '%v'", acc.token) + a.rmAccess <- acc + } +} + +func (a *Agent) Config() *AgentConfig { + return a.cfg +} + +func (a *Agent) gateway(cfg *AgentConfig) { + logrus.Info("started") + defer logrus.Warn("exited") + + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + + mux := runtime.NewServeMux() + opts := []grpc.DialOption{grpc.WithTransportCredentials(insecure.NewCredentials())} + endpoint := "unix:" + a.agentSocket + logrus.Debugf("endpoint: '%v'", endpoint) + if err := agentGrpc.RegisterAgentHandlerFromEndpoint(ctx, mux, "unix:"+a.agentSocket, opts); err != nil { + logrus.Fatalf("unable to register gateway: %v", err) + } + + listener, err := util.AutoListener("tcp", cfg.ConsoleAddress, cfg.ConsoleStartPort, cfg.ConsoleEndPort) + if err != nil { + logrus.Fatalf("unable to create a listener: %v", err) + } + a.httpEndpoint = listener.Addr().String() + + if err := http.Serve(listener, agentUi.Middleware(mux)); err != nil { + logrus.Error(err) + } +} + +func (a *Agent) manager() { + logrus.Info("started") + defer logrus.Warn("exited") + + for { + select { + case inShare := <-a.addShare: + logrus.Infof("adding new share '%v'", inShare.token) + a.shares[inShare.token] = inShare + + case outShare := <-a.rmShare: + if shr, found := a.shares[outShare.token]; found { + logrus.Infof("removing share '%v'", shr.token) + if err := proctree.StopChild(shr.process); err != nil { + logrus.Errorf("error stopping share '%v': %v", shr.token, err) + } + if err := proctree.WaitChild(shr.process); err != nil { + logrus.Errorf("error joining share '%v': %v", shr.token, err) + } + if !shr.reserved { + if err := a.deleteShare(shr.token); err != nil { + logrus.Errorf("error deleting share '%v': %v", shr.token, err) + } + } + delete(a.shares, shr.token) + } else { + logrus.Debug("skipping unidentified (orphaned) share removal") + } + + case inAccess := <-a.addAccess: + logrus.Infof("adding new access '%v'", inAccess.frontendToken) + a.accesses[inAccess.frontendToken] = inAccess + + case outAccess := <-a.rmAccess: + if acc, found := a.accesses[outAccess.frontendToken]; found { + logrus.Infof("removing access '%v'", acc.frontendToken) + if err := proctree.StopChild(acc.process); err != nil { + logrus.Errorf("error stopping access '%v': %v", acc.frontendToken, err) + } + if err := proctree.WaitChild(acc.process); err != nil { + logrus.Errorf("error joining access '%v': %v", acc.frontendToken, err) + } + if err := a.deleteAccess(acc.token, acc.frontendToken); err != nil { + logrus.Errorf("error deleting access '%v': %v", acc.frontendToken, err) + } + delete(a.accesses, acc.frontendToken) + } else { + logrus.Debug("skipping unidentified (orphaned) access removal") + } + } + } +} + +func (a *Agent) deleteShare(token string) error { + logrus.Debugf("deleting share '%v'", token) + if err := sdk.DeleteShare(a.root, &sdk.Share{Token: token}); err != nil { + return err + } + return nil +} + +func (a *Agent) deleteAccess(token, frontendToken string) error { + logrus.Debugf("deleting access '%v'", frontendToken) + if err := sdk.DeleteAccess(a.root, &sdk.Access{Token: frontendToken, ShareToken: token}); err != nil { + return err + } + return nil +} + +type agentGrpcImpl struct { + agentGrpc.UnimplementedAgentServer + agent *Agent +} diff --git a/agent/agentClient/agentClient.go b/agent/agentClient/agentClient.go new file mode 100644 index 00000000..110eef0a --- /dev/null +++ b/agent/agentClient/agentClient.go @@ -0,0 +1,51 @@ +package agentClient + +import ( + "context" + "github.com/openziti/zrok/agent/agentGrpc" + "github.com/openziti/zrok/build" + "github.com/openziti/zrok/environment/env_core" + "github.com/pkg/errors" + "google.golang.org/grpc" + "google.golang.org/grpc/credentials/insecure" + "google.golang.org/grpc/resolver" + "net" + "strings" +) + +func NewClient(root env_core.Root) (client agentGrpc.AgentClient, conn *grpc.ClientConn, err error) { + agentSocket, err := root.AgentSocket() + if err != nil { + return nil, nil, err + } + + opts := []grpc.DialOption{ + grpc.WithContextDialer(func(_ context.Context, addr string) (net.Conn, error) { + return net.Dial("unix", addr) + }), + grpc.WithTransportCredentials(insecure.NewCredentials()), + } + resolver.SetDefaultScheme("passthrough") + conn, err = grpc.NewClient(agentSocket, opts...) + if err != nil { + return nil, nil, err + } + + return agentGrpc.NewAgentClient(conn), conn, nil +} + +func IsAgentRunning(root env_core.Root) (bool, error) { + client, conn, err := NewClient(root) + if err != nil { + return false, err + } + defer func() { _ = conn.Close() }() + resp, err := client.Version(context.Background(), &agentGrpc.VersionRequest{}) + if err != nil { + return false, nil + } + if !strings.HasPrefix(resp.GetV(), build.Series) { + return false, errors.Errorf("agent reported version '%v'; we expected version '%v'", resp.GetV(), build.Series) + } + return true, nil +} diff --git a/agent/agentGrpc/agent.pb.go b/agent/agentGrpc/agent.pb.go new file mode 100644 index 00000000..e787e3bb --- /dev/null +++ b/agent/agentGrpc/agent.pb.go @@ -0,0 +1,1625 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.34.2 +// protoc v5.27.3 +// source: agent/agentGrpc/agent.proto + +package agentGrpc + +import ( + _ "google.golang.org/genproto/googleapis/api/annotations" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type AccessDetail struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + FrontendToken string `protobuf:"bytes,1,opt,name=frontendToken,proto3" json:"frontendToken,omitempty"` + Token string `protobuf:"bytes,2,opt,name=token,proto3" json:"token,omitempty"` + BindAddress string `protobuf:"bytes,3,opt,name=bindAddress,proto3" json:"bindAddress,omitempty"` + ResponseHeaders []string `protobuf:"bytes,4,rep,name=responseHeaders,proto3" json:"responseHeaders,omitempty"` +} + +func (x *AccessDetail) Reset() { + *x = AccessDetail{} + if protoimpl.UnsafeEnabled { + mi := &file_agent_agentGrpc_agent_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AccessDetail) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AccessDetail) ProtoMessage() {} + +func (x *AccessDetail) ProtoReflect() protoreflect.Message { + mi := &file_agent_agentGrpc_agent_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AccessDetail.ProtoReflect.Descriptor instead. +func (*AccessDetail) Descriptor() ([]byte, []int) { + return file_agent_agentGrpc_agent_proto_rawDescGZIP(), []int{0} +} + +func (x *AccessDetail) GetFrontendToken() string { + if x != nil { + return x.FrontendToken + } + return "" +} + +func (x *AccessDetail) GetToken() string { + if x != nil { + return x.Token + } + return "" +} + +func (x *AccessDetail) GetBindAddress() string { + if x != nil { + return x.BindAddress + } + return "" +} + +func (x *AccessDetail) GetResponseHeaders() []string { + if x != nil { + return x.ResponseHeaders + } + return nil +} + +type AccessPrivateResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + FrontendToken string `protobuf:"bytes,1,opt,name=frontendToken,proto3" json:"frontendToken,omitempty"` +} + +func (x *AccessPrivateResponse) Reset() { + *x = AccessPrivateResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_agent_agentGrpc_agent_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AccessPrivateResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AccessPrivateResponse) ProtoMessage() {} + +func (x *AccessPrivateResponse) ProtoReflect() protoreflect.Message { + mi := &file_agent_agentGrpc_agent_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AccessPrivateResponse.ProtoReflect.Descriptor instead. +func (*AccessPrivateResponse) Descriptor() ([]byte, []int) { + return file_agent_agentGrpc_agent_proto_rawDescGZIP(), []int{1} +} + +func (x *AccessPrivateResponse) GetFrontendToken() string { + if x != nil { + return x.FrontendToken + } + return "" +} + +type AccessPrivateRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Token string `protobuf:"bytes,1,opt,name=token,proto3" json:"token,omitempty"` + BindAddress string `protobuf:"bytes,2,opt,name=bindAddress,proto3" json:"bindAddress,omitempty"` + AutoMode bool `protobuf:"varint,3,opt,name=autoMode,proto3" json:"autoMode,omitempty"` + AutoAddress string `protobuf:"bytes,4,opt,name=autoAddress,proto3" json:"autoAddress,omitempty"` + AutoStartPort uint32 `protobuf:"varint,5,opt,name=autoStartPort,proto3" json:"autoStartPort,omitempty"` + AutoEndPort uint32 `protobuf:"varint,6,opt,name=autoEndPort,proto3" json:"autoEndPort,omitempty"` + ResponseHeaders []string `protobuf:"bytes,7,rep,name=responseHeaders,proto3" json:"responseHeaders,omitempty"` +} + +func (x *AccessPrivateRequest) Reset() { + *x = AccessPrivateRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_agent_agentGrpc_agent_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AccessPrivateRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AccessPrivateRequest) ProtoMessage() {} + +func (x *AccessPrivateRequest) ProtoReflect() protoreflect.Message { + mi := &file_agent_agentGrpc_agent_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AccessPrivateRequest.ProtoReflect.Descriptor instead. +func (*AccessPrivateRequest) Descriptor() ([]byte, []int) { + return file_agent_agentGrpc_agent_proto_rawDescGZIP(), []int{2} +} + +func (x *AccessPrivateRequest) GetToken() string { + if x != nil { + return x.Token + } + return "" +} + +func (x *AccessPrivateRequest) GetBindAddress() string { + if x != nil { + return x.BindAddress + } + return "" +} + +func (x *AccessPrivateRequest) GetAutoMode() bool { + if x != nil { + return x.AutoMode + } + return false +} + +func (x *AccessPrivateRequest) GetAutoAddress() string { + if x != nil { + return x.AutoAddress + } + return "" +} + +func (x *AccessPrivateRequest) GetAutoStartPort() uint32 { + if x != nil { + return x.AutoStartPort + } + return 0 +} + +func (x *AccessPrivateRequest) GetAutoEndPort() uint32 { + if x != nil { + return x.AutoEndPort + } + return 0 +} + +func (x *AccessPrivateRequest) GetResponseHeaders() []string { + if x != nil { + return x.ResponseHeaders + } + return nil +} + +type ReleaseAccessRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + FrontendToken string `protobuf:"bytes,1,opt,name=frontendToken,proto3" json:"frontendToken,omitempty"` +} + +func (x *ReleaseAccessRequest) Reset() { + *x = ReleaseAccessRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_agent_agentGrpc_agent_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ReleaseAccessRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ReleaseAccessRequest) ProtoMessage() {} + +func (x *ReleaseAccessRequest) ProtoReflect() protoreflect.Message { + mi := &file_agent_agentGrpc_agent_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ReleaseAccessRequest.ProtoReflect.Descriptor instead. +func (*ReleaseAccessRequest) Descriptor() ([]byte, []int) { + return file_agent_agentGrpc_agent_proto_rawDescGZIP(), []int{3} +} + +func (x *ReleaseAccessRequest) GetFrontendToken() string { + if x != nil { + return x.FrontendToken + } + return "" +} + +type ReleaseAccessResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *ReleaseAccessResponse) Reset() { + *x = ReleaseAccessResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_agent_agentGrpc_agent_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ReleaseAccessResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ReleaseAccessResponse) ProtoMessage() {} + +func (x *ReleaseAccessResponse) ProtoReflect() protoreflect.Message { + mi := &file_agent_agentGrpc_agent_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ReleaseAccessResponse.ProtoReflect.Descriptor instead. +func (*ReleaseAccessResponse) Descriptor() ([]byte, []int) { + return file_agent_agentGrpc_agent_proto_rawDescGZIP(), []int{4} +} + +type ReleaseShareRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Token string `protobuf:"bytes,1,opt,name=token,proto3" json:"token,omitempty"` +} + +func (x *ReleaseShareRequest) Reset() { + *x = ReleaseShareRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_agent_agentGrpc_agent_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ReleaseShareRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ReleaseShareRequest) ProtoMessage() {} + +func (x *ReleaseShareRequest) ProtoReflect() protoreflect.Message { + mi := &file_agent_agentGrpc_agent_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ReleaseShareRequest.ProtoReflect.Descriptor instead. +func (*ReleaseShareRequest) Descriptor() ([]byte, []int) { + return file_agent_agentGrpc_agent_proto_rawDescGZIP(), []int{5} +} + +func (x *ReleaseShareRequest) GetToken() string { + if x != nil { + return x.Token + } + return "" +} + +type ReleaseShareResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *ReleaseShareResponse) Reset() { + *x = ReleaseShareResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_agent_agentGrpc_agent_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ReleaseShareResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ReleaseShareResponse) ProtoMessage() {} + +func (x *ReleaseShareResponse) ProtoReflect() protoreflect.Message { + mi := &file_agent_agentGrpc_agent_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ReleaseShareResponse.ProtoReflect.Descriptor instead. +func (*ReleaseShareResponse) Descriptor() ([]byte, []int) { + return file_agent_agentGrpc_agent_proto_rawDescGZIP(), []int{6} +} + +type ShareDetail struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Token string `protobuf:"bytes,1,opt,name=token,proto3" json:"token,omitempty"` + ShareMode string `protobuf:"bytes,2,opt,name=shareMode,proto3" json:"shareMode,omitempty"` + BackendMode string `protobuf:"bytes,3,opt,name=backendMode,proto3" json:"backendMode,omitempty"` + Reserved bool `protobuf:"varint,4,opt,name=reserved,proto3" json:"reserved,omitempty"` + FrontendEndpoint []string `protobuf:"bytes,5,rep,name=frontendEndpoint,proto3" json:"frontendEndpoint,omitempty"` + BackendEndpoint string `protobuf:"bytes,6,opt,name=backendEndpoint,proto3" json:"backendEndpoint,omitempty"` + Closed bool `protobuf:"varint,7,opt,name=closed,proto3" json:"closed,omitempty"` + Status string `protobuf:"bytes,8,opt,name=status,proto3" json:"status,omitempty"` +} + +func (x *ShareDetail) Reset() { + *x = ShareDetail{} + if protoimpl.UnsafeEnabled { + mi := &file_agent_agentGrpc_agent_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ShareDetail) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ShareDetail) ProtoMessage() {} + +func (x *ShareDetail) ProtoReflect() protoreflect.Message { + mi := &file_agent_agentGrpc_agent_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ShareDetail.ProtoReflect.Descriptor instead. +func (*ShareDetail) Descriptor() ([]byte, []int) { + return file_agent_agentGrpc_agent_proto_rawDescGZIP(), []int{7} +} + +func (x *ShareDetail) GetToken() string { + if x != nil { + return x.Token + } + return "" +} + +func (x *ShareDetail) GetShareMode() string { + if x != nil { + return x.ShareMode + } + return "" +} + +func (x *ShareDetail) GetBackendMode() string { + if x != nil { + return x.BackendMode + } + return "" +} + +func (x *ShareDetail) GetReserved() bool { + if x != nil { + return x.Reserved + } + return false +} + +func (x *ShareDetail) GetFrontendEndpoint() []string { + if x != nil { + return x.FrontendEndpoint + } + return nil +} + +func (x *ShareDetail) GetBackendEndpoint() string { + if x != nil { + return x.BackendEndpoint + } + return "" +} + +func (x *ShareDetail) GetClosed() bool { + if x != nil { + return x.Closed + } + return false +} + +func (x *ShareDetail) GetStatus() string { + if x != nil { + return x.Status + } + return "" +} + +type SharePrivateRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Target string `protobuf:"bytes,1,opt,name=target,proto3" json:"target,omitempty"` + BackendMode string `protobuf:"bytes,2,opt,name=backendMode,proto3" json:"backendMode,omitempty"` + Insecure bool `protobuf:"varint,3,opt,name=insecure,proto3" json:"insecure,omitempty"` + Closed bool `protobuf:"varint,4,opt,name=closed,proto3" json:"closed,omitempty"` + AccessGrants []string `protobuf:"bytes,5,rep,name=accessGrants,proto3" json:"accessGrants,omitempty"` +} + +func (x *SharePrivateRequest) Reset() { + *x = SharePrivateRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_agent_agentGrpc_agent_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SharePrivateRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SharePrivateRequest) ProtoMessage() {} + +func (x *SharePrivateRequest) ProtoReflect() protoreflect.Message { + mi := &file_agent_agentGrpc_agent_proto_msgTypes[8] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SharePrivateRequest.ProtoReflect.Descriptor instead. +func (*SharePrivateRequest) Descriptor() ([]byte, []int) { + return file_agent_agentGrpc_agent_proto_rawDescGZIP(), []int{8} +} + +func (x *SharePrivateRequest) GetTarget() string { + if x != nil { + return x.Target + } + return "" +} + +func (x *SharePrivateRequest) GetBackendMode() string { + if x != nil { + return x.BackendMode + } + return "" +} + +func (x *SharePrivateRequest) GetInsecure() bool { + if x != nil { + return x.Insecure + } + return false +} + +func (x *SharePrivateRequest) GetClosed() bool { + if x != nil { + return x.Closed + } + return false +} + +func (x *SharePrivateRequest) GetAccessGrants() []string { + if x != nil { + return x.AccessGrants + } + return nil +} + +type SharePrivateResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Token string `protobuf:"bytes,1,opt,name=token,proto3" json:"token,omitempty"` +} + +func (x *SharePrivateResponse) Reset() { + *x = SharePrivateResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_agent_agentGrpc_agent_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SharePrivateResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SharePrivateResponse) ProtoMessage() {} + +func (x *SharePrivateResponse) ProtoReflect() protoreflect.Message { + mi := &file_agent_agentGrpc_agent_proto_msgTypes[9] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SharePrivateResponse.ProtoReflect.Descriptor instead. +func (*SharePrivateResponse) Descriptor() ([]byte, []int) { + return file_agent_agentGrpc_agent_proto_rawDescGZIP(), []int{9} +} + +func (x *SharePrivateResponse) GetToken() string { + if x != nil { + return x.Token + } + return "" +} + +type SharePublicRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Target string `protobuf:"bytes,1,opt,name=target,proto3" json:"target,omitempty"` + BasicAuth []string `protobuf:"bytes,2,rep,name=basicAuth,proto3" json:"basicAuth,omitempty"` + FrontendSelection []string `protobuf:"bytes,3,rep,name=frontendSelection,proto3" json:"frontendSelection,omitempty"` + BackendMode string `protobuf:"bytes,4,opt,name=backendMode,proto3" json:"backendMode,omitempty"` + Insecure bool `protobuf:"varint,5,opt,name=insecure,proto3" json:"insecure,omitempty"` + OauthProvider string `protobuf:"bytes,6,opt,name=oauthProvider,proto3" json:"oauthProvider,omitempty"` + OauthEmailAddressPatterns []string `protobuf:"bytes,7,rep,name=oauthEmailAddressPatterns,proto3" json:"oauthEmailAddressPatterns,omitempty"` + OauthCheckInterval string `protobuf:"bytes,8,opt,name=oauthCheckInterval,proto3" json:"oauthCheckInterval,omitempty"` + Closed bool `protobuf:"varint,9,opt,name=closed,proto3" json:"closed,omitempty"` + AccessGrants []string `protobuf:"bytes,10,rep,name=accessGrants,proto3" json:"accessGrants,omitempty"` +} + +func (x *SharePublicRequest) Reset() { + *x = SharePublicRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_agent_agentGrpc_agent_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SharePublicRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SharePublicRequest) ProtoMessage() {} + +func (x *SharePublicRequest) ProtoReflect() protoreflect.Message { + mi := &file_agent_agentGrpc_agent_proto_msgTypes[10] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SharePublicRequest.ProtoReflect.Descriptor instead. +func (*SharePublicRequest) Descriptor() ([]byte, []int) { + return file_agent_agentGrpc_agent_proto_rawDescGZIP(), []int{10} +} + +func (x *SharePublicRequest) GetTarget() string { + if x != nil { + return x.Target + } + return "" +} + +func (x *SharePublicRequest) GetBasicAuth() []string { + if x != nil { + return x.BasicAuth + } + return nil +} + +func (x *SharePublicRequest) GetFrontendSelection() []string { + if x != nil { + return x.FrontendSelection + } + return nil +} + +func (x *SharePublicRequest) GetBackendMode() string { + if x != nil { + return x.BackendMode + } + return "" +} + +func (x *SharePublicRequest) GetInsecure() bool { + if x != nil { + return x.Insecure + } + return false +} + +func (x *SharePublicRequest) GetOauthProvider() string { + if x != nil { + return x.OauthProvider + } + return "" +} + +func (x *SharePublicRequest) GetOauthEmailAddressPatterns() []string { + if x != nil { + return x.OauthEmailAddressPatterns + } + return nil +} + +func (x *SharePublicRequest) GetOauthCheckInterval() string { + if x != nil { + return x.OauthCheckInterval + } + return "" +} + +func (x *SharePublicRequest) GetClosed() bool { + if x != nil { + return x.Closed + } + return false +} + +func (x *SharePublicRequest) GetAccessGrants() []string { + if x != nil { + return x.AccessGrants + } + return nil +} + +type SharePublicResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Token string `protobuf:"bytes,1,opt,name=token,proto3" json:"token,omitempty"` + FrontendEndpoints []string `protobuf:"bytes,2,rep,name=frontendEndpoints,proto3" json:"frontendEndpoints,omitempty"` +} + +func (x *SharePublicResponse) Reset() { + *x = SharePublicResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_agent_agentGrpc_agent_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SharePublicResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SharePublicResponse) ProtoMessage() {} + +func (x *SharePublicResponse) ProtoReflect() protoreflect.Message { + mi := &file_agent_agentGrpc_agent_proto_msgTypes[11] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SharePublicResponse.ProtoReflect.Descriptor instead. +func (*SharePublicResponse) Descriptor() ([]byte, []int) { + return file_agent_agentGrpc_agent_proto_rawDescGZIP(), []int{11} +} + +func (x *SharePublicResponse) GetToken() string { + if x != nil { + return x.Token + } + return "" +} + +func (x *SharePublicResponse) GetFrontendEndpoints() []string { + if x != nil { + return x.FrontendEndpoints + } + return nil +} + +type ShareReservedRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Token string `protobuf:"bytes,1,opt,name=token,proto3" json:"token,omitempty"` + OverrideEndpoint string `protobuf:"bytes,2,opt,name=overrideEndpoint,proto3" json:"overrideEndpoint,omitempty"` + Insecure bool `protobuf:"varint,3,opt,name=insecure,proto3" json:"insecure,omitempty"` +} + +func (x *ShareReservedRequest) Reset() { + *x = ShareReservedRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_agent_agentGrpc_agent_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ShareReservedRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ShareReservedRequest) ProtoMessage() {} + +func (x *ShareReservedRequest) ProtoReflect() protoreflect.Message { + mi := &file_agent_agentGrpc_agent_proto_msgTypes[12] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ShareReservedRequest.ProtoReflect.Descriptor instead. +func (*ShareReservedRequest) Descriptor() ([]byte, []int) { + return file_agent_agentGrpc_agent_proto_rawDescGZIP(), []int{12} +} + +func (x *ShareReservedRequest) GetToken() string { + if x != nil { + return x.Token + } + return "" +} + +func (x *ShareReservedRequest) GetOverrideEndpoint() string { + if x != nil { + return x.OverrideEndpoint + } + return "" +} + +func (x *ShareReservedRequest) GetInsecure() bool { + if x != nil { + return x.Insecure + } + return false +} + +type ShareReservedResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Token string `protobuf:"bytes,1,opt,name=token,proto3" json:"token,omitempty"` + BackendMode string `protobuf:"bytes,2,opt,name=backendMode,proto3" json:"backendMode,omitempty"` + ShareMode string `protobuf:"bytes,3,opt,name=shareMode,proto3" json:"shareMode,omitempty"` + FrontendEndpoints []string `protobuf:"bytes,4,rep,name=frontendEndpoints,proto3" json:"frontendEndpoints,omitempty"` + Target string `protobuf:"bytes,5,opt,name=target,proto3" json:"target,omitempty"` +} + +func (x *ShareReservedResponse) Reset() { + *x = ShareReservedResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_agent_agentGrpc_agent_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ShareReservedResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ShareReservedResponse) ProtoMessage() {} + +func (x *ShareReservedResponse) ProtoReflect() protoreflect.Message { + mi := &file_agent_agentGrpc_agent_proto_msgTypes[13] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ShareReservedResponse.ProtoReflect.Descriptor instead. +func (*ShareReservedResponse) Descriptor() ([]byte, []int) { + return file_agent_agentGrpc_agent_proto_rawDescGZIP(), []int{13} +} + +func (x *ShareReservedResponse) GetToken() string { + if x != nil { + return x.Token + } + return "" +} + +func (x *ShareReservedResponse) GetBackendMode() string { + if x != nil { + return x.BackendMode + } + return "" +} + +func (x *ShareReservedResponse) GetShareMode() string { + if x != nil { + return x.ShareMode + } + return "" +} + +func (x *ShareReservedResponse) GetFrontendEndpoints() []string { + if x != nil { + return x.FrontendEndpoints + } + return nil +} + +func (x *ShareReservedResponse) GetTarget() string { + if x != nil { + return x.Target + } + return "" +} + +type StatusRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *StatusRequest) Reset() { + *x = StatusRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_agent_agentGrpc_agent_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StatusRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StatusRequest) ProtoMessage() {} + +func (x *StatusRequest) ProtoReflect() protoreflect.Message { + mi := &file_agent_agentGrpc_agent_proto_msgTypes[14] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StatusRequest.ProtoReflect.Descriptor instead. +func (*StatusRequest) Descriptor() ([]byte, []int) { + return file_agent_agentGrpc_agent_proto_rawDescGZIP(), []int{14} +} + +type StatusResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Accesses []*AccessDetail `protobuf:"bytes,1,rep,name=accesses,proto3" json:"accesses,omitempty"` + Shares []*ShareDetail `protobuf:"bytes,2,rep,name=shares,proto3" json:"shares,omitempty"` +} + +func (x *StatusResponse) Reset() { + *x = StatusResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_agent_agentGrpc_agent_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StatusResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StatusResponse) ProtoMessage() {} + +func (x *StatusResponse) ProtoReflect() protoreflect.Message { + mi := &file_agent_agentGrpc_agent_proto_msgTypes[15] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StatusResponse.ProtoReflect.Descriptor instead. +func (*StatusResponse) Descriptor() ([]byte, []int) { + return file_agent_agentGrpc_agent_proto_rawDescGZIP(), []int{15} +} + +func (x *StatusResponse) GetAccesses() []*AccessDetail { + if x != nil { + return x.Accesses + } + return nil +} + +func (x *StatusResponse) GetShares() []*ShareDetail { + if x != nil { + return x.Shares + } + return nil +} + +type VersionRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *VersionRequest) Reset() { + *x = VersionRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_agent_agentGrpc_agent_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *VersionRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VersionRequest) ProtoMessage() {} + +func (x *VersionRequest) ProtoReflect() protoreflect.Message { + mi := &file_agent_agentGrpc_agent_proto_msgTypes[16] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use VersionRequest.ProtoReflect.Descriptor instead. +func (*VersionRequest) Descriptor() ([]byte, []int) { + return file_agent_agentGrpc_agent_proto_rawDescGZIP(), []int{16} +} + +type VersionResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + V string `protobuf:"bytes,1,opt,name=v,proto3" json:"v,omitempty"` + ConsoleEndpoint string `protobuf:"bytes,2,opt,name=consoleEndpoint,proto3" json:"consoleEndpoint,omitempty"` +} + +func (x *VersionResponse) Reset() { + *x = VersionResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_agent_agentGrpc_agent_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *VersionResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VersionResponse) ProtoMessage() {} + +func (x *VersionResponse) ProtoReflect() protoreflect.Message { + mi := &file_agent_agentGrpc_agent_proto_msgTypes[17] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use VersionResponse.ProtoReflect.Descriptor instead. +func (*VersionResponse) Descriptor() ([]byte, []int) { + return file_agent_agentGrpc_agent_proto_rawDescGZIP(), []int{17} +} + +func (x *VersionResponse) GetV() string { + if x != nil { + return x.V + } + return "" +} + +func (x *VersionResponse) GetConsoleEndpoint() string { + if x != nil { + return x.ConsoleEndpoint + } + return "" +} + +var File_agent_agentGrpc_agent_proto protoreflect.FileDescriptor + +var file_agent_agentGrpc_agent_proto_rawDesc = []byte{ + 0x0a, 0x1b, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2f, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x47, 0x72, 0x70, + 0x63, 0x2f, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x96, 0x01, 0x0a, 0x0c, + 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x12, 0x24, 0x0a, 0x0d, + 0x66, 0x72, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0d, 0x66, 0x72, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x64, 0x54, 0x6f, 0x6b, + 0x65, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x62, 0x69, 0x6e, 0x64, + 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x62, + 0x69, 0x6e, 0x64, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x28, 0x0a, 0x0f, 0x72, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x0f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x65, 0x61, + 0x64, 0x65, 0x72, 0x73, 0x22, 0x3d, 0x0a, 0x15, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x50, 0x72, + 0x69, 0x76, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x24, 0x0a, + 0x0d, 0x66, 0x72, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x66, 0x72, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x64, 0x54, 0x6f, + 0x6b, 0x65, 0x6e, 0x22, 0xfe, 0x01, 0x0a, 0x14, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x50, 0x72, + 0x69, 0x76, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, + 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, + 0x65, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x62, 0x69, 0x6e, 0x64, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x62, 0x69, 0x6e, 0x64, 0x41, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x61, 0x75, 0x74, 0x6f, 0x4d, 0x6f, 0x64, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x61, 0x75, 0x74, 0x6f, 0x4d, 0x6f, 0x64, 0x65, + 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x75, 0x74, 0x6f, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x75, 0x74, 0x6f, 0x41, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x61, 0x75, 0x74, 0x6f, 0x53, 0x74, 0x61, 0x72, 0x74, 0x50, + 0x6f, 0x72, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0d, 0x61, 0x75, 0x74, 0x6f, 0x53, + 0x74, 0x61, 0x72, 0x74, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x75, 0x74, 0x6f, + 0x45, 0x6e, 0x64, 0x50, 0x6f, 0x72, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x61, + 0x75, 0x74, 0x6f, 0x45, 0x6e, 0x64, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x28, 0x0a, 0x0f, 0x72, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x18, 0x07, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x0f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x65, 0x61, + 0x64, 0x65, 0x72, 0x73, 0x22, 0x3c, 0x0a, 0x14, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x41, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x24, 0x0a, 0x0d, + 0x66, 0x72, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0d, 0x66, 0x72, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x64, 0x54, 0x6f, 0x6b, + 0x65, 0x6e, 0x22, 0x17, 0x0a, 0x15, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x41, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2b, 0x0a, 0x13, 0x52, + 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x16, 0x0a, 0x14, 0x52, 0x65, 0x6c, 0x65, + 0x61, 0x73, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x85, 0x02, 0x0a, 0x0b, 0x53, 0x68, 0x61, 0x72, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, + 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x68, 0x61, 0x72, 0x65, 0x4d, + 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x68, 0x61, 0x72, 0x65, + 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x4d, + 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x62, 0x61, 0x63, 0x6b, 0x65, + 0x6e, 0x64, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x64, 0x12, 0x2a, 0x0a, 0x10, 0x66, 0x72, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x64, 0x45, 0x6e, + 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x66, 0x72, + 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x64, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x28, + 0x0a, 0x0f, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, + 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, + 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x6c, 0x6f, 0x73, + 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x64, + 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0xa7, 0x01, 0x0a, 0x13, 0x53, 0x68, 0x61, + 0x72, 0x65, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x16, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x62, 0x61, 0x63, 0x6b, + 0x65, 0x6e, 0x64, 0x4d, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x62, + 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x6e, + 0x73, 0x65, 0x63, 0x75, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x6e, + 0x73, 0x65, 0x63, 0x75, 0x72, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x64, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x64, 0x12, 0x22, + 0x0a, 0x0c, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x18, 0x05, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x47, 0x72, 0x61, 0x6e, + 0x74, 0x73, 0x22, 0x2c, 0x0a, 0x14, 0x53, 0x68, 0x61, 0x72, 0x65, 0x50, 0x72, 0x69, 0x76, 0x61, + 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, + 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, + 0x22, 0x86, 0x03, 0x0a, 0x12, 0x53, 0x68, 0x61, 0x72, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, + 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, + 0x1c, 0x0a, 0x09, 0x62, 0x61, 0x73, 0x69, 0x63, 0x41, 0x75, 0x74, 0x68, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x09, 0x62, 0x61, 0x73, 0x69, 0x63, 0x41, 0x75, 0x74, 0x68, 0x12, 0x2c, 0x0a, + 0x11, 0x66, 0x72, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x64, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x11, 0x66, 0x72, 0x6f, 0x6e, 0x74, 0x65, + 0x6e, 0x64, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x62, + 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x4d, 0x6f, 0x64, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0b, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x1a, 0x0a, + 0x08, 0x69, 0x6e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x08, 0x69, 0x6e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x6f, 0x61, 0x75, + 0x74, 0x68, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0d, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, + 0x3c, 0x0a, 0x19, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x41, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x73, 0x18, 0x07, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x19, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x45, 0x6d, 0x61, 0x69, 0x6c, 0x41, 0x64, + 0x64, 0x72, 0x65, 0x73, 0x73, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x73, 0x12, 0x2e, 0x0a, + 0x12, 0x6f, 0x61, 0x75, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x49, 0x6e, 0x74, 0x65, 0x72, + 0x76, 0x61, 0x6c, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x6f, 0x61, 0x75, 0x74, 0x68, + 0x43, 0x68, 0x65, 0x63, 0x6b, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x12, 0x16, 0x0a, + 0x06, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x63, + 0x6c, 0x6f, 0x73, 0x65, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x47, + 0x72, 0x61, 0x6e, 0x74, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x22, 0x59, 0x0a, 0x13, 0x53, 0x68, 0x61, + 0x72, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x2c, 0x0a, 0x11, 0x66, 0x72, 0x6f, 0x6e, 0x74, 0x65, + 0x6e, 0x64, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x11, 0x66, 0x72, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x64, 0x45, 0x6e, 0x64, 0x70, 0x6f, + 0x69, 0x6e, 0x74, 0x73, 0x22, 0x74, 0x0a, 0x14, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, + 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, + 0x65, 0x6e, 0x12, 0x2a, 0x0a, 0x10, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x45, 0x6e, + 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x6f, 0x76, + 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x1a, + 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x08, 0x69, 0x6e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x65, 0x22, 0xb3, 0x01, 0x0a, 0x15, 0x53, + 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x62, 0x61, + 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x4d, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0b, 0x62, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x1c, 0x0a, 0x09, + 0x73, 0x68, 0x61, 0x72, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x09, 0x73, 0x68, 0x61, 0x72, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x2c, 0x0a, 0x11, 0x66, 0x72, + 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x64, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, + 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x11, 0x66, 0x72, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x64, 0x45, + 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, + 0x65, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, + 0x22, 0x0f, 0x0a, 0x0d, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x22, 0x61, 0x0a, 0x0e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x29, 0x0a, 0x08, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x44, 0x65, + 0x74, 0x61, 0x69, 0x6c, 0x52, 0x08, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x65, 0x73, 0x12, 0x24, + 0x0a, 0x06, 0x73, 0x68, 0x61, 0x72, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, + 0x2e, 0x53, 0x68, 0x61, 0x72, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x06, 0x73, 0x68, + 0x61, 0x72, 0x65, 0x73, 0x22, 0x10, 0x0a, 0x0e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x49, 0x0a, 0x0f, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x0c, 0x0a, 0x01, 0x76, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x01, 0x76, 0x12, 0x28, 0x0a, 0x0f, 0x63, 0x6f, 0x6e, 0x73, 0x6f, + 0x6c, 0x65, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0f, 0x63, 0x6f, 0x6e, 0x73, 0x6f, 0x6c, 0x65, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, + 0x74, 0x32, 0xac, 0x05, 0x0a, 0x05, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x12, 0x5f, 0x0a, 0x0d, 0x41, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x12, 0x15, 0x2e, 0x41, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x50, 0x72, 0x69, 0x76, + 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x19, 0x22, 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2f, 0x61, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x12, 0x5f, 0x0a, 0x0d, + 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x15, 0x2e, + 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x41, 0x63, + 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x19, 0x22, 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2f, + 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x5b, 0x0a, + 0x0c, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x12, 0x14, 0x2e, + 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x53, 0x68, 0x61, + 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1e, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x18, 0x22, 0x16, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2f, 0x72, 0x65, + 0x6c, 0x65, 0x61, 0x73, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x12, 0x40, 0x0a, 0x0d, 0x53, 0x68, + 0x61, 0x72, 0x65, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x12, 0x15, 0x2e, 0x53, 0x68, + 0x61, 0x72, 0x65, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5b, 0x0a, 0x0c, + 0x53, 0x68, 0x61, 0x72, 0x65, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x12, 0x14, 0x2e, 0x53, + 0x68, 0x61, 0x72, 0x65, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x65, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1e, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x18, 0x22, 0x16, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2f, 0x73, 0x68, 0x61, + 0x72, 0x65, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x12, 0x57, 0x0a, 0x0b, 0x53, 0x68, 0x61, + 0x72, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x12, 0x13, 0x2e, 0x53, 0x68, 0x61, 0x72, 0x65, + 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, + 0x53, 0x68, 0x61, 0x72, 0x65, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x1d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x22, 0x15, 0x2f, 0x76, 0x31, + 0x2f, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2f, 0x73, 0x68, 0x61, 0x72, 0x65, 0x50, 0x75, 0x62, 0x6c, + 0x69, 0x63, 0x12, 0x43, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x0e, 0x2e, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x18, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x12, 0x10, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x67, 0x65, 0x6e, 0x74, + 0x2f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x47, 0x0a, 0x07, 0x56, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x12, 0x0f, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x10, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, + 0x76, 0x31, 0x2f, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x42, 0x2a, 0x5a, 0x28, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6f, + 0x70, 0x65, 0x6e, 0x7a, 0x69, 0x74, 0x69, 0x2f, 0x7a, 0x72, 0x6f, 0x6b, 0x2f, 0x61, 0x67, 0x65, + 0x6e, 0x74, 0x2f, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x47, 0x72, 0x70, 0x63, 0x62, 0x06, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_agent_agentGrpc_agent_proto_rawDescOnce sync.Once + file_agent_agentGrpc_agent_proto_rawDescData = file_agent_agentGrpc_agent_proto_rawDesc +) + +func file_agent_agentGrpc_agent_proto_rawDescGZIP() []byte { + file_agent_agentGrpc_agent_proto_rawDescOnce.Do(func() { + file_agent_agentGrpc_agent_proto_rawDescData = protoimpl.X.CompressGZIP(file_agent_agentGrpc_agent_proto_rawDescData) + }) + return file_agent_agentGrpc_agent_proto_rawDescData +} + +var file_agent_agentGrpc_agent_proto_msgTypes = make([]protoimpl.MessageInfo, 18) +var file_agent_agentGrpc_agent_proto_goTypes = []any{ + (*AccessDetail)(nil), // 0: AccessDetail + (*AccessPrivateResponse)(nil), // 1: AccessPrivateResponse + (*AccessPrivateRequest)(nil), // 2: AccessPrivateRequest + (*ReleaseAccessRequest)(nil), // 3: ReleaseAccessRequest + (*ReleaseAccessResponse)(nil), // 4: ReleaseAccessResponse + (*ReleaseShareRequest)(nil), // 5: ReleaseShareRequest + (*ReleaseShareResponse)(nil), // 6: ReleaseShareResponse + (*ShareDetail)(nil), // 7: ShareDetail + (*SharePrivateRequest)(nil), // 8: SharePrivateRequest + (*SharePrivateResponse)(nil), // 9: SharePrivateResponse + (*SharePublicRequest)(nil), // 10: SharePublicRequest + (*SharePublicResponse)(nil), // 11: SharePublicResponse + (*ShareReservedRequest)(nil), // 12: ShareReservedRequest + (*ShareReservedResponse)(nil), // 13: ShareReservedResponse + (*StatusRequest)(nil), // 14: StatusRequest + (*StatusResponse)(nil), // 15: StatusResponse + (*VersionRequest)(nil), // 16: VersionRequest + (*VersionResponse)(nil), // 17: VersionResponse +} +var file_agent_agentGrpc_agent_proto_depIdxs = []int32{ + 0, // 0: StatusResponse.accesses:type_name -> AccessDetail + 7, // 1: StatusResponse.shares:type_name -> ShareDetail + 2, // 2: Agent.AccessPrivate:input_type -> AccessPrivateRequest + 3, // 3: Agent.ReleaseAccess:input_type -> ReleaseAccessRequest + 5, // 4: Agent.ReleaseShare:input_type -> ReleaseShareRequest + 12, // 5: Agent.ShareReserved:input_type -> ShareReservedRequest + 8, // 6: Agent.SharePrivate:input_type -> SharePrivateRequest + 10, // 7: Agent.SharePublic:input_type -> SharePublicRequest + 14, // 8: Agent.Status:input_type -> StatusRequest + 16, // 9: Agent.Version:input_type -> VersionRequest + 1, // 10: Agent.AccessPrivate:output_type -> AccessPrivateResponse + 4, // 11: Agent.ReleaseAccess:output_type -> ReleaseAccessResponse + 6, // 12: Agent.ReleaseShare:output_type -> ReleaseShareResponse + 13, // 13: Agent.ShareReserved:output_type -> ShareReservedResponse + 9, // 14: Agent.SharePrivate:output_type -> SharePrivateResponse + 11, // 15: Agent.SharePublic:output_type -> SharePublicResponse + 15, // 16: Agent.Status:output_type -> StatusResponse + 17, // 17: Agent.Version:output_type -> VersionResponse + 10, // [10:18] is the sub-list for method output_type + 2, // [2:10] is the sub-list for method input_type + 2, // [2:2] is the sub-list for extension type_name + 2, // [2:2] is the sub-list for extension extendee + 0, // [0:2] is the sub-list for field type_name +} + +func init() { file_agent_agentGrpc_agent_proto_init() } +func file_agent_agentGrpc_agent_proto_init() { + if File_agent_agentGrpc_agent_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_agent_agentGrpc_agent_proto_msgTypes[0].Exporter = func(v any, i int) any { + switch v := v.(*AccessDetail); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_agent_agentGrpc_agent_proto_msgTypes[1].Exporter = func(v any, i int) any { + switch v := v.(*AccessPrivateResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_agent_agentGrpc_agent_proto_msgTypes[2].Exporter = func(v any, i int) any { + switch v := v.(*AccessPrivateRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_agent_agentGrpc_agent_proto_msgTypes[3].Exporter = func(v any, i int) any { + switch v := v.(*ReleaseAccessRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_agent_agentGrpc_agent_proto_msgTypes[4].Exporter = func(v any, i int) any { + switch v := v.(*ReleaseAccessResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_agent_agentGrpc_agent_proto_msgTypes[5].Exporter = func(v any, i int) any { + switch v := v.(*ReleaseShareRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_agent_agentGrpc_agent_proto_msgTypes[6].Exporter = func(v any, i int) any { + switch v := v.(*ReleaseShareResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_agent_agentGrpc_agent_proto_msgTypes[7].Exporter = func(v any, i int) any { + switch v := v.(*ShareDetail); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_agent_agentGrpc_agent_proto_msgTypes[8].Exporter = func(v any, i int) any { + switch v := v.(*SharePrivateRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_agent_agentGrpc_agent_proto_msgTypes[9].Exporter = func(v any, i int) any { + switch v := v.(*SharePrivateResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_agent_agentGrpc_agent_proto_msgTypes[10].Exporter = func(v any, i int) any { + switch v := v.(*SharePublicRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_agent_agentGrpc_agent_proto_msgTypes[11].Exporter = func(v any, i int) any { + switch v := v.(*SharePublicResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_agent_agentGrpc_agent_proto_msgTypes[12].Exporter = func(v any, i int) any { + switch v := v.(*ShareReservedRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_agent_agentGrpc_agent_proto_msgTypes[13].Exporter = func(v any, i int) any { + switch v := v.(*ShareReservedResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_agent_agentGrpc_agent_proto_msgTypes[14].Exporter = func(v any, i int) any { + switch v := v.(*StatusRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_agent_agentGrpc_agent_proto_msgTypes[15].Exporter = func(v any, i int) any { + switch v := v.(*StatusResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_agent_agentGrpc_agent_proto_msgTypes[16].Exporter = func(v any, i int) any { + switch v := v.(*VersionRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_agent_agentGrpc_agent_proto_msgTypes[17].Exporter = func(v any, i int) any { + switch v := v.(*VersionResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_agent_agentGrpc_agent_proto_rawDesc, + NumEnums: 0, + NumMessages: 18, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_agent_agentGrpc_agent_proto_goTypes, + DependencyIndexes: file_agent_agentGrpc_agent_proto_depIdxs, + MessageInfos: file_agent_agentGrpc_agent_proto_msgTypes, + }.Build() + File_agent_agentGrpc_agent_proto = out.File + file_agent_agentGrpc_agent_proto_rawDesc = nil + file_agent_agentGrpc_agent_proto_goTypes = nil + file_agent_agentGrpc_agent_proto_depIdxs = nil +} diff --git a/agent/agentGrpc/agent.pb.gw.go b/agent/agentGrpc/agent.pb.gw.go new file mode 100644 index 00000000..b8b234d6 --- /dev/null +++ b/agent/agentGrpc/agent.pb.gw.go @@ -0,0 +1,659 @@ +// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. +// source: agent/agentGrpc/agent.proto + +/* +Package agentGrpc is a reverse proxy. + +It translates gRPC into RESTful JSON APIs. +*/ +package agentGrpc + +import ( + "context" + "io" + "net/http" + + "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" + "github.com/grpc-ecosystem/grpc-gateway/v2/utilities" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/metadata" + "google.golang.org/grpc/status" + "google.golang.org/protobuf/proto" +) + +// Suppress "imported and not used" errors +var _ codes.Code +var _ io.Reader +var _ status.Status +var _ = runtime.String +var _ = utilities.NewDoubleArray +var _ = metadata.Join + +var ( + filter_Agent_AccessPrivate_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + +func request_Agent_AccessPrivate_0(ctx context.Context, marshaler runtime.Marshaler, client AgentClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq AccessPrivateRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Agent_AccessPrivate_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.AccessPrivate(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Agent_AccessPrivate_0(ctx context.Context, marshaler runtime.Marshaler, server AgentServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq AccessPrivateRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Agent_AccessPrivate_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.AccessPrivate(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_Agent_ReleaseAccess_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + +func request_Agent_ReleaseAccess_0(ctx context.Context, marshaler runtime.Marshaler, client AgentClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ReleaseAccessRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Agent_ReleaseAccess_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.ReleaseAccess(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Agent_ReleaseAccess_0(ctx context.Context, marshaler runtime.Marshaler, server AgentServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ReleaseAccessRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Agent_ReleaseAccess_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.ReleaseAccess(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_Agent_ReleaseShare_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + +func request_Agent_ReleaseShare_0(ctx context.Context, marshaler runtime.Marshaler, client AgentClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ReleaseShareRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Agent_ReleaseShare_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.ReleaseShare(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Agent_ReleaseShare_0(ctx context.Context, marshaler runtime.Marshaler, server AgentServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ReleaseShareRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Agent_ReleaseShare_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.ReleaseShare(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_Agent_SharePrivate_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + +func request_Agent_SharePrivate_0(ctx context.Context, marshaler runtime.Marshaler, client AgentClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq SharePrivateRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Agent_SharePrivate_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.SharePrivate(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Agent_SharePrivate_0(ctx context.Context, marshaler runtime.Marshaler, server AgentServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq SharePrivateRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Agent_SharePrivate_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.SharePrivate(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_Agent_SharePublic_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + +func request_Agent_SharePublic_0(ctx context.Context, marshaler runtime.Marshaler, client AgentClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq SharePublicRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Agent_SharePublic_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.SharePublic(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Agent_SharePublic_0(ctx context.Context, marshaler runtime.Marshaler, server AgentServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq SharePublicRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Agent_SharePublic_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.SharePublic(ctx, &protoReq) + return msg, metadata, err + +} + +func request_Agent_Status_0(ctx context.Context, marshaler runtime.Marshaler, client AgentClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq StatusRequest + var metadata runtime.ServerMetadata + + msg, err := client.Status(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Agent_Status_0(ctx context.Context, marshaler runtime.Marshaler, server AgentServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq StatusRequest + var metadata runtime.ServerMetadata + + msg, err := server.Status(ctx, &protoReq) + return msg, metadata, err + +} + +func request_Agent_Version_0(ctx context.Context, marshaler runtime.Marshaler, client AgentClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq VersionRequest + var metadata runtime.ServerMetadata + + msg, err := client.Version(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Agent_Version_0(ctx context.Context, marshaler runtime.Marshaler, server AgentServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq VersionRequest + var metadata runtime.ServerMetadata + + msg, err := server.Version(ctx, &protoReq) + return msg, metadata, err + +} + +// RegisterAgentHandlerServer registers the http handlers for service Agent to "mux". +// UnaryRPC :call AgentServer directly. +// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. +// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterAgentHandlerFromEndpoint instead. +func RegisterAgentHandlerServer(ctx context.Context, mux *runtime.ServeMux, server AgentServer) error { + + mux.Handle("POST", pattern_Agent_AccessPrivate_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/.Agent/AccessPrivate", runtime.WithHTTPPathPattern("/v1/agent/accessPrivate")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Agent_AccessPrivate_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_Agent_AccessPrivate_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_Agent_ReleaseAccess_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/.Agent/ReleaseAccess", runtime.WithHTTPPathPattern("/v1/agent/releaseAccess")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Agent_ReleaseAccess_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_Agent_ReleaseAccess_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_Agent_ReleaseShare_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/.Agent/ReleaseShare", runtime.WithHTTPPathPattern("/v1/agent/releaseShare")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Agent_ReleaseShare_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_Agent_ReleaseShare_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_Agent_SharePrivate_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/.Agent/SharePrivate", runtime.WithHTTPPathPattern("/v1/agent/sharePrivate")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Agent_SharePrivate_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_Agent_SharePrivate_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_Agent_SharePublic_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/.Agent/SharePublic", runtime.WithHTTPPathPattern("/v1/agent/sharePublic")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Agent_SharePublic_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_Agent_SharePublic_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Agent_Status_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/.Agent/Status", runtime.WithHTTPPathPattern("/v1/agent/status")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Agent_Status_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_Agent_Status_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Agent_Version_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/.Agent/Version", runtime.WithHTTPPathPattern("/v1/agent/version")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Agent_Version_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_Agent_Version_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +// RegisterAgentHandlerFromEndpoint is same as RegisterAgentHandler but +// automatically dials to "endpoint" and closes the connection when "ctx" gets done. +func RegisterAgentHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { + conn, err := grpc.DialContext(ctx, endpoint, opts...) + if err != nil { + return err + } + defer func() { + if err != nil { + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + return + } + go func() { + <-ctx.Done() + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + }() + }() + + return RegisterAgentHandler(ctx, mux, conn) +} + +// RegisterAgentHandler registers the http handlers for service Agent to "mux". +// The handlers forward requests to the grpc endpoint over "conn". +func RegisterAgentHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { + return RegisterAgentHandlerClient(ctx, mux, NewAgentClient(conn)) +} + +// RegisterAgentHandlerClient registers the http handlers for service Agent +// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "AgentClient". +// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "AgentClient" +// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in +// "AgentClient" to call the correct interceptors. +func RegisterAgentHandlerClient(ctx context.Context, mux *runtime.ServeMux, client AgentClient) error { + + mux.Handle("POST", pattern_Agent_AccessPrivate_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/.Agent/AccessPrivate", runtime.WithHTTPPathPattern("/v1/agent/accessPrivate")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Agent_AccessPrivate_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_Agent_AccessPrivate_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_Agent_ReleaseAccess_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/.Agent/ReleaseAccess", runtime.WithHTTPPathPattern("/v1/agent/releaseAccess")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Agent_ReleaseAccess_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_Agent_ReleaseAccess_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_Agent_ReleaseShare_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/.Agent/ReleaseShare", runtime.WithHTTPPathPattern("/v1/agent/releaseShare")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Agent_ReleaseShare_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_Agent_ReleaseShare_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_Agent_SharePrivate_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/.Agent/SharePrivate", runtime.WithHTTPPathPattern("/v1/agent/sharePrivate")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Agent_SharePrivate_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_Agent_SharePrivate_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_Agent_SharePublic_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/.Agent/SharePublic", runtime.WithHTTPPathPattern("/v1/agent/sharePublic")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Agent_SharePublic_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_Agent_SharePublic_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Agent_Status_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/.Agent/Status", runtime.WithHTTPPathPattern("/v1/agent/status")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Agent_Status_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_Agent_Status_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Agent_Version_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/.Agent/Version", runtime.WithHTTPPathPattern("/v1/agent/version")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Agent_Version_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_Agent_Version_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +var ( + pattern_Agent_AccessPrivate_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "agent", "accessPrivate"}, "")) + + pattern_Agent_ReleaseAccess_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "agent", "releaseAccess"}, "")) + + pattern_Agent_ReleaseShare_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "agent", "releaseShare"}, "")) + + pattern_Agent_SharePrivate_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "agent", "sharePrivate"}, "")) + + pattern_Agent_SharePublic_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "agent", "sharePublic"}, "")) + + pattern_Agent_Status_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "agent", "status"}, "")) + + pattern_Agent_Version_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "agent", "version"}, "")) +) + +var ( + forward_Agent_AccessPrivate_0 = runtime.ForwardResponseMessage + + forward_Agent_ReleaseAccess_0 = runtime.ForwardResponseMessage + + forward_Agent_ReleaseShare_0 = runtime.ForwardResponseMessage + + forward_Agent_SharePrivate_0 = runtime.ForwardResponseMessage + + forward_Agent_SharePublic_0 = runtime.ForwardResponseMessage + + forward_Agent_Status_0 = runtime.ForwardResponseMessage + + forward_Agent_Version_0 = runtime.ForwardResponseMessage +) diff --git a/agent/agentGrpc/agent.proto b/agent/agentGrpc/agent.proto new file mode 100644 index 00000000..aca147fe --- /dev/null +++ b/agent/agentGrpc/agent.proto @@ -0,0 +1,150 @@ +syntax = "proto3"; + +option go_package = "github.com/openziti/zrok/agent/agentGrpc"; + +import "google/api/annotations.proto"; + +service Agent { + rpc AccessPrivate(AccessPrivateRequest) returns (AccessPrivateResponse) { + option(google.api.http) = { + post: "/v1/agent/accessPrivate" + }; + } + rpc ReleaseAccess(ReleaseAccessRequest) returns (ReleaseAccessResponse) { + option(google.api.http) = { + post: "/v1/agent/releaseAccess" + }; + } + rpc ReleaseShare(ReleaseShareRequest) returns (ReleaseShareResponse) { + option(google.api.http) = { + post: "/v1/agent/releaseShare" + }; + } + rpc ShareReserved(ShareReservedRequest) returns (ShareReservedResponse) {} + rpc SharePrivate(SharePrivateRequest) returns (SharePrivateResponse) { + option(google.api.http) = { + post: "/v1/agent/sharePrivate" + }; + } + rpc SharePublic(SharePublicRequest) returns (SharePublicResponse) { + option(google.api.http) = { + post: "/v1/agent/sharePublic" + }; + } + rpc Status(StatusRequest) returns (StatusResponse) { + option(google.api.http) = { + get: "/v1/agent/status" + }; + } + rpc Version(VersionRequest) returns (VersionResponse) { + option(google.api.http) = { + get: "/v1/agent/version" + }; + } +} + +message AccessDetail { + string frontendToken = 1; + string token = 2; + string bindAddress = 3; + repeated string responseHeaders = 4; +} + +message AccessPrivateResponse{ + string frontendToken = 1; +} + +message AccessPrivateRequest{ + string token = 1; + string bindAddress = 2; + bool autoMode = 3; + string autoAddress = 4; + uint32 autoStartPort = 5; + uint32 autoEndPort = 6; + repeated string responseHeaders = 7; +} + +message ReleaseAccessRequest { + string frontendToken = 1; +} + +message ReleaseAccessResponse { +} + +message ReleaseShareRequest { + string token = 1; +} + +message ReleaseShareResponse { +} + +message ShareDetail { + string token = 1; + string shareMode = 2; + string backendMode = 3; + bool reserved = 4; + repeated string frontendEndpoint = 5; + string backendEndpoint = 6; + bool closed = 7; + string status = 8; +} + +message SharePrivateRequest { + string target = 1; + string backendMode = 2; + bool insecure = 3; + bool closed = 4; + repeated string accessGrants = 5; +} + +message SharePrivateResponse { + string token = 1; +} + +message SharePublicRequest { + string target = 1; + repeated string basicAuth = 2; + repeated string frontendSelection = 3; + string backendMode = 4; + bool insecure = 5; + string oauthProvider = 6; + repeated string oauthEmailAddressPatterns = 7; + string oauthCheckInterval = 8; + bool closed = 9; + repeated string accessGrants = 10; +} + +message SharePublicResponse { + string token = 1; + repeated string frontendEndpoints = 2; +} + +message ShareReservedRequest { + string token = 1; + string overrideEndpoint = 2; + bool insecure = 3; +} + +message ShareReservedResponse { + string token = 1; + string backendMode = 2; + string shareMode = 3; + repeated string frontendEndpoints = 4; + string target = 5; +} + +message StatusRequest { +} + +message StatusResponse { + repeated AccessDetail accesses = 1; + repeated ShareDetail shares = 2; +} + +message VersionRequest { +} + +message VersionResponse { + string v = 1; + string consoleEndpoint = 2; +} diff --git a/agent/agentGrpc/agent.swagger.json b/agent/agentGrpc/agent.swagger.json new file mode 100644 index 00000000..541d8967 --- /dev/null +++ b/agent/agentGrpc/agent.swagger.json @@ -0,0 +1,525 @@ +{ + "swagger": "2.0", + "info": { + "title": "agent/agentGrpc/agent.proto", + "version": "version not set" + }, + "tags": [ + { + "name": "Agent" + } + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "paths": { + "/v1/agent/accessPrivate": { + "post": { + "operationId": "Agent_AccessPrivate", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/AccessPrivateResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "token", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "bindAddress", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "autoMode", + "in": "query", + "required": false, + "type": "boolean" + }, + { + "name": "autoAddress", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "autoStartPort", + "in": "query", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "autoEndPort", + "in": "query", + "required": false, + "type": "integer", + "format": "int64" + }, + { + "name": "responseHeaders", + "in": "query", + "required": false, + "type": "array", + "items": { + "type": "string" + }, + "collectionFormat": "multi" + } + ], + "tags": [ + "Agent" + ] + } + }, + "/v1/agent/releaseAccess": { + "post": { + "operationId": "Agent_ReleaseAccess", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ReleaseAccessResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "frontendToken", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "Agent" + ] + } + }, + "/v1/agent/releaseShare": { + "post": { + "operationId": "Agent_ReleaseShare", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/ReleaseShareResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "token", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "Agent" + ] + } + }, + "/v1/agent/sharePrivate": { + "post": { + "operationId": "Agent_SharePrivate", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/SharePrivateResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "target", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "backendMode", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "insecure", + "in": "query", + "required": false, + "type": "boolean" + }, + { + "name": "closed", + "in": "query", + "required": false, + "type": "boolean" + }, + { + "name": "accessGrants", + "in": "query", + "required": false, + "type": "array", + "items": { + "type": "string" + }, + "collectionFormat": "multi" + } + ], + "tags": [ + "Agent" + ] + } + }, + "/v1/agent/sharePublic": { + "post": { + "operationId": "Agent_SharePublic", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/SharePublicResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "target", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "basicAuth", + "in": "query", + "required": false, + "type": "array", + "items": { + "type": "string" + }, + "collectionFormat": "multi" + }, + { + "name": "frontendSelection", + "in": "query", + "required": false, + "type": "array", + "items": { + "type": "string" + }, + "collectionFormat": "multi" + }, + { + "name": "backendMode", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "insecure", + "in": "query", + "required": false, + "type": "boolean" + }, + { + "name": "oauthProvider", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "oauthEmailAddressPatterns", + "in": "query", + "required": false, + "type": "array", + "items": { + "type": "string" + }, + "collectionFormat": "multi" + }, + { + "name": "oauthCheckInterval", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "closed", + "in": "query", + "required": false, + "type": "boolean" + }, + { + "name": "accessGrants", + "in": "query", + "required": false, + "type": "array", + "items": { + "type": "string" + }, + "collectionFormat": "multi" + } + ], + "tags": [ + "Agent" + ] + } + }, + "/v1/agent/status": { + "get": { + "operationId": "Agent_Status", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/StatusResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "tags": [ + "Agent" + ] + } + }, + "/v1/agent/version": { + "get": { + "operationId": "Agent_Version", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/VersionResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "tags": [ + "Agent" + ] + } + } + }, + "definitions": { + "AccessDetail": { + "type": "object", + "properties": { + "frontendToken": { + "type": "string" + }, + "token": { + "type": "string" + }, + "bindAddress": { + "type": "string" + }, + "responseHeaders": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "AccessPrivateResponse": { + "type": "object", + "properties": { + "frontendToken": { + "type": "string" + } + } + }, + "ReleaseAccessResponse": { + "type": "object" + }, + "ReleaseShareResponse": { + "type": "object" + }, + "ShareDetail": { + "type": "object", + "properties": { + "token": { + "type": "string" + }, + "shareMode": { + "type": "string" + }, + "backendMode": { + "type": "string" + }, + "reserved": { + "type": "boolean" + }, + "frontendEndpoint": { + "type": "array", + "items": { + "type": "string" + } + }, + "backendEndpoint": { + "type": "string" + }, + "closed": { + "type": "boolean" + }, + "status": { + "type": "string" + } + } + }, + "SharePrivateResponse": { + "type": "object", + "properties": { + "token": { + "type": "string" + } + } + }, + "SharePublicResponse": { + "type": "object", + "properties": { + "token": { + "type": "string" + }, + "frontendEndpoints": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "ShareReservedResponse": { + "type": "object", + "properties": { + "token": { + "type": "string" + }, + "backendMode": { + "type": "string" + }, + "shareMode": { + "type": "string" + }, + "frontendEndpoints": { + "type": "array", + "items": { + "type": "string" + } + }, + "target": { + "type": "string" + } + } + }, + "StatusResponse": { + "type": "object", + "properties": { + "accesses": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/AccessDetail" + } + }, + "shares": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/ShareDetail" + } + } + } + }, + "VersionResponse": { + "type": "object", + "properties": { + "v": { + "type": "string" + }, + "consoleEndpoint": { + "type": "string" + } + } + }, + "protobufAny": { + "type": "object", + "properties": { + "@type": { + "type": "string" + } + }, + "additionalProperties": {} + }, + "rpcStatus": { + "type": "object", + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "message": { + "type": "string" + }, + "details": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/protobufAny" + } + } + } + } + } +} diff --git a/agent/agentGrpc/agent_grpc.pb.go b/agent/agentGrpc/agent_grpc.pb.go new file mode 100644 index 00000000..cdae8495 --- /dev/null +++ b/agent/agentGrpc/agent_grpc.pb.go @@ -0,0 +1,387 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.5.1 +// - protoc v5.27.3 +// source: agent/agentGrpc/agent.proto + +package agentGrpc + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.64.0 or later. +const _ = grpc.SupportPackageIsVersion9 + +const ( + Agent_AccessPrivate_FullMethodName = "/Agent/AccessPrivate" + Agent_ReleaseAccess_FullMethodName = "/Agent/ReleaseAccess" + Agent_ReleaseShare_FullMethodName = "/Agent/ReleaseShare" + Agent_ShareReserved_FullMethodName = "/Agent/ShareReserved" + Agent_SharePrivate_FullMethodName = "/Agent/SharePrivate" + Agent_SharePublic_FullMethodName = "/Agent/SharePublic" + Agent_Status_FullMethodName = "/Agent/Status" + Agent_Version_FullMethodName = "/Agent/Version" +) + +// AgentClient is the client API for Agent service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type AgentClient interface { + AccessPrivate(ctx context.Context, in *AccessPrivateRequest, opts ...grpc.CallOption) (*AccessPrivateResponse, error) + ReleaseAccess(ctx context.Context, in *ReleaseAccessRequest, opts ...grpc.CallOption) (*ReleaseAccessResponse, error) + ReleaseShare(ctx context.Context, in *ReleaseShareRequest, opts ...grpc.CallOption) (*ReleaseShareResponse, error) + ShareReserved(ctx context.Context, in *ShareReservedRequest, opts ...grpc.CallOption) (*ShareReservedResponse, error) + SharePrivate(ctx context.Context, in *SharePrivateRequest, opts ...grpc.CallOption) (*SharePrivateResponse, error) + SharePublic(ctx context.Context, in *SharePublicRequest, opts ...grpc.CallOption) (*SharePublicResponse, error) + Status(ctx context.Context, in *StatusRequest, opts ...grpc.CallOption) (*StatusResponse, error) + Version(ctx context.Context, in *VersionRequest, opts ...grpc.CallOption) (*VersionResponse, error) +} + +type agentClient struct { + cc grpc.ClientConnInterface +} + +func NewAgentClient(cc grpc.ClientConnInterface) AgentClient { + return &agentClient{cc} +} + +func (c *agentClient) AccessPrivate(ctx context.Context, in *AccessPrivateRequest, opts ...grpc.CallOption) (*AccessPrivateResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(AccessPrivateResponse) + err := c.cc.Invoke(ctx, Agent_AccessPrivate_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *agentClient) ReleaseAccess(ctx context.Context, in *ReleaseAccessRequest, opts ...grpc.CallOption) (*ReleaseAccessResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(ReleaseAccessResponse) + err := c.cc.Invoke(ctx, Agent_ReleaseAccess_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *agentClient) ReleaseShare(ctx context.Context, in *ReleaseShareRequest, opts ...grpc.CallOption) (*ReleaseShareResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(ReleaseShareResponse) + err := c.cc.Invoke(ctx, Agent_ReleaseShare_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *agentClient) ShareReserved(ctx context.Context, in *ShareReservedRequest, opts ...grpc.CallOption) (*ShareReservedResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(ShareReservedResponse) + err := c.cc.Invoke(ctx, Agent_ShareReserved_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *agentClient) SharePrivate(ctx context.Context, in *SharePrivateRequest, opts ...grpc.CallOption) (*SharePrivateResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(SharePrivateResponse) + err := c.cc.Invoke(ctx, Agent_SharePrivate_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *agentClient) SharePublic(ctx context.Context, in *SharePublicRequest, opts ...grpc.CallOption) (*SharePublicResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(SharePublicResponse) + err := c.cc.Invoke(ctx, Agent_SharePublic_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *agentClient) Status(ctx context.Context, in *StatusRequest, opts ...grpc.CallOption) (*StatusResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(StatusResponse) + err := c.cc.Invoke(ctx, Agent_Status_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *agentClient) Version(ctx context.Context, in *VersionRequest, opts ...grpc.CallOption) (*VersionResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(VersionResponse) + err := c.cc.Invoke(ctx, Agent_Version_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +// AgentServer is the server API for Agent service. +// All implementations must embed UnimplementedAgentServer +// for forward compatibility. +type AgentServer interface { + AccessPrivate(context.Context, *AccessPrivateRequest) (*AccessPrivateResponse, error) + ReleaseAccess(context.Context, *ReleaseAccessRequest) (*ReleaseAccessResponse, error) + ReleaseShare(context.Context, *ReleaseShareRequest) (*ReleaseShareResponse, error) + ShareReserved(context.Context, *ShareReservedRequest) (*ShareReservedResponse, error) + SharePrivate(context.Context, *SharePrivateRequest) (*SharePrivateResponse, error) + SharePublic(context.Context, *SharePublicRequest) (*SharePublicResponse, error) + Status(context.Context, *StatusRequest) (*StatusResponse, error) + Version(context.Context, *VersionRequest) (*VersionResponse, error) + mustEmbedUnimplementedAgentServer() +} + +// UnimplementedAgentServer must be embedded to have +// forward compatible implementations. +// +// NOTE: this should be embedded by value instead of pointer to avoid a nil +// pointer dereference when methods are called. +type UnimplementedAgentServer struct{} + +func (UnimplementedAgentServer) AccessPrivate(context.Context, *AccessPrivateRequest) (*AccessPrivateResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method AccessPrivate not implemented") +} +func (UnimplementedAgentServer) ReleaseAccess(context.Context, *ReleaseAccessRequest) (*ReleaseAccessResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ReleaseAccess not implemented") +} +func (UnimplementedAgentServer) ReleaseShare(context.Context, *ReleaseShareRequest) (*ReleaseShareResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ReleaseShare not implemented") +} +func (UnimplementedAgentServer) ShareReserved(context.Context, *ShareReservedRequest) (*ShareReservedResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ShareReserved not implemented") +} +func (UnimplementedAgentServer) SharePrivate(context.Context, *SharePrivateRequest) (*SharePrivateResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method SharePrivate not implemented") +} +func (UnimplementedAgentServer) SharePublic(context.Context, *SharePublicRequest) (*SharePublicResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method SharePublic not implemented") +} +func (UnimplementedAgentServer) Status(context.Context, *StatusRequest) (*StatusResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Status not implemented") +} +func (UnimplementedAgentServer) Version(context.Context, *VersionRequest) (*VersionResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Version not implemented") +} +func (UnimplementedAgentServer) mustEmbedUnimplementedAgentServer() {} +func (UnimplementedAgentServer) testEmbeddedByValue() {} + +// UnsafeAgentServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to AgentServer will +// result in compilation errors. +type UnsafeAgentServer interface { + mustEmbedUnimplementedAgentServer() +} + +func RegisterAgentServer(s grpc.ServiceRegistrar, srv AgentServer) { + // If the following call pancis, it indicates UnimplementedAgentServer was + // embedded by pointer and is nil. This will cause panics if an + // unimplemented method is ever invoked, so we test this at initialization + // time to prevent it from happening at runtime later due to I/O. + if t, ok := srv.(interface{ testEmbeddedByValue() }); ok { + t.testEmbeddedByValue() + } + s.RegisterService(&Agent_ServiceDesc, srv) +} + +func _Agent_AccessPrivate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(AccessPrivateRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AgentServer).AccessPrivate(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Agent_AccessPrivate_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AgentServer).AccessPrivate(ctx, req.(*AccessPrivateRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Agent_ReleaseAccess_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ReleaseAccessRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AgentServer).ReleaseAccess(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Agent_ReleaseAccess_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AgentServer).ReleaseAccess(ctx, req.(*ReleaseAccessRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Agent_ReleaseShare_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ReleaseShareRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AgentServer).ReleaseShare(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Agent_ReleaseShare_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AgentServer).ReleaseShare(ctx, req.(*ReleaseShareRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Agent_ShareReserved_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ShareReservedRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AgentServer).ShareReserved(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Agent_ShareReserved_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AgentServer).ShareReserved(ctx, req.(*ShareReservedRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Agent_SharePrivate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SharePrivateRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AgentServer).SharePrivate(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Agent_SharePrivate_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AgentServer).SharePrivate(ctx, req.(*SharePrivateRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Agent_SharePublic_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SharePublicRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AgentServer).SharePublic(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Agent_SharePublic_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AgentServer).SharePublic(ctx, req.(*SharePublicRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Agent_Status_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(StatusRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AgentServer).Status(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Agent_Status_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AgentServer).Status(ctx, req.(*StatusRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Agent_Version_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(VersionRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AgentServer).Version(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Agent_Version_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AgentServer).Version(ctx, req.(*VersionRequest)) + } + return interceptor(ctx, in, info, handler) +} + +// Agent_ServiceDesc is the grpc.ServiceDesc for Agent service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var Agent_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "Agent", + HandlerType: (*AgentServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "AccessPrivate", + Handler: _Agent_AccessPrivate_Handler, + }, + { + MethodName: "ReleaseAccess", + Handler: _Agent_ReleaseAccess_Handler, + }, + { + MethodName: "ReleaseShare", + Handler: _Agent_ReleaseShare_Handler, + }, + { + MethodName: "ShareReserved", + Handler: _Agent_ShareReserved_Handler, + }, + { + MethodName: "SharePrivate", + Handler: _Agent_SharePrivate_Handler, + }, + { + MethodName: "SharePublic", + Handler: _Agent_SharePublic_Handler, + }, + { + MethodName: "Status", + Handler: _Agent_Status_Handler, + }, + { + MethodName: "Version", + Handler: _Agent_Version_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "agent/agentGrpc/agent.proto", +} diff --git a/agent/agentGrpc/tools.go b/agent/agentGrpc/tools.go new file mode 100644 index 00000000..816b30c0 --- /dev/null +++ b/agent/agentGrpc/tools.go @@ -0,0 +1,10 @@ +//go:build tools + +package agentGrpc + +import ( + _ "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway" + _ "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2" + _ "google.golang.org/grpc/cmd/protoc-gen-go-grpc" + _ "google.golang.org/protobuf/cmd/protoc-gen-go" +) diff --git a/agent/agentUi/.gitignore b/agent/agentUi/.gitignore new file mode 100644 index 00000000..a547bf36 --- /dev/null +++ b/agent/agentUi/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/agent/agentUi/README.md b/agent/agentUi/README.md new file mode 100644 index 00000000..74872fd4 --- /dev/null +++ b/agent/agentUi/README.md @@ -0,0 +1,50 @@ +# React + TypeScript + Vite + +This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules. + +Currently, two official plugins are available: + +- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/README.md) uses [Babel](https://babeljs.io/) for Fast Refresh +- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh + +## Expanding the ESLint configuration + +If you are developing a production application, we recommend updating the configuration to enable type aware lint rules: + +- Configure the top-level `parserOptions` property like this: + +```js +export default tseslint.config({ + languageOptions: { + // other options... + parserOptions: { + project: ['./tsconfig.node.json', './tsconfig.app.json'], + tsconfigRootDir: import.meta.dirname, + }, + }, +}) +``` + +- Replace `tseslint.configs.recommended` to `tseslint.configs.recommendedTypeChecked` or `tseslint.configs.strictTypeChecked` +- Optionally add `...tseslint.configs.stylisticTypeChecked` +- Install [eslint-plugin-react](https://github.com/jsx-eslint/eslint-plugin-react) and update the config: + +```js +// eslint.config.js +import react from 'eslint-plugin-react' + +export default tseslint.config({ + // Set the react version + settings: { react: { version: '18.3' } }, + plugins: { + // Add the react plugin + react, + }, + rules: { + // other rules... + // Enable its recommended rules + ...react.configs.recommended.rules, + ...react.configs['jsx-runtime'].rules, + }, +}) +``` diff --git a/agent/agentUi/embed.go b/agent/agentUi/embed.go new file mode 100644 index 00000000..70b7822f --- /dev/null +++ b/agent/agentUi/embed.go @@ -0,0 +1,6 @@ +package agentUi + +import "embed" + +//go:embed dist +var FS embed.FS diff --git a/agent/agentUi/eslint.config.js b/agent/agentUi/eslint.config.js new file mode 100644 index 00000000..092408a9 --- /dev/null +++ b/agent/agentUi/eslint.config.js @@ -0,0 +1,28 @@ +import js from '@eslint/js' +import globals from 'globals' +import reactHooks from 'eslint-plugin-react-hooks' +import reactRefresh from 'eslint-plugin-react-refresh' +import tseslint from 'typescript-eslint' + +export default tseslint.config( + { ignores: ['dist'] }, + { + extends: [js.configs.recommended, ...tseslint.configs.recommended], + files: ['**/*.{ts,tsx}'], + languageOptions: { + ecmaVersion: 2020, + globals: globals.browser, + }, + plugins: { + 'react-hooks': reactHooks, + 'react-refresh': reactRefresh, + }, + rules: { + ...reactHooks.configs.recommended.rules, + 'react-refresh/only-export-components': [ + 'warn', + { allowConstantExport: true }, + ], + }, + }, +) diff --git a/agent/agentUi/index.html b/agent/agentUi/index.html new file mode 100644 index 00000000..37fa605f --- /dev/null +++ b/agent/agentUi/index.html @@ -0,0 +1,17 @@ + + + + + + + + + + + zrok Agent Console + + +
+ + + diff --git a/agent/agentUi/middleware.go b/agent/agentUi/middleware.go new file mode 100644 index 00000000..ab669f06 --- /dev/null +++ b/agent/agentUi/middleware.go @@ -0,0 +1,53 @@ +package agentUi + +import ( + "github.com/sirupsen/logrus" + "io/fs" + "net/http" + "os" + "path/filepath" + "strings" +) + +const staticPath = "dist" + +func Middleware(handler http.Handler) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if strings.HasPrefix(r.URL.Path, "/v1") { + handler.ServeHTTP(w, r) + return + } + + path := filepath.ToSlash(filepath.Join(staticPath, r.URL.Path)) + logrus.Debugf("path = %v", path) + + f, err := FS.Open(path) + if os.IsNotExist(err) { + // file does not exist, serve index.gohtml + index, err := FS.ReadFile(filepath.ToSlash(filepath.Join(staticPath, "index.html"))) + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + w.Header().Set("Content-Type", "text/html; charset=utf-8") + w.WriteHeader(http.StatusAccepted) + _, _ = w.Write(index) + return + + } else if err != nil { + // if we got an error (that wasn't that the file doesn't exist) stating the + // file, return a 500 internal server error and stop + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + defer func() { _ = f.Close() }() + + // get the subdirectory of the static dir + if statics, err := fs.Sub(FS, staticPath); err == nil { + // otherwise, use http.FileServer to serve the static dir + http.FileServer(http.FS(statics)).ServeHTTP(w, r) + } else { + http.Error(w, err.Error(), http.StatusInternalServerError) + } + }) +} diff --git a/agent/agentUi/package-lock.json b/agent/agentUi/package-lock.json new file mode 100644 index 00000000..00987a91 --- /dev/null +++ b/agent/agentUi/package-lock.json @@ -0,0 +1,3931 @@ +{ + "name": "agentui", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "agentui", + "version": "0.0.0", + "dependencies": { + "@emotion/react": "^11.13.3", + "@emotion/styled": "^11.13.0", + "@mui/icons-material": "^6.1.7", + "@mui/material": "^6.1.7", + "formik": "^2.4.6", + "react": "^18.3.1", + "react-dom": "^18.3.1" + }, + "devDependencies": { + "@eslint/js": "^9.13.0", + "@types/react": "^18.3.12", + "@types/react-dom": "^18.3.1", + "@vitejs/plugin-react": "^4.3.3", + "eslint": "^9.13.0", + "eslint-plugin-react-hooks": "^5.0.0", + "eslint-plugin-react-refresh": "^0.4.14", + "globals": "^15.11.0", + "typescript-eslint": "^8.15.0", + "vite": "^5.4.10" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.2.tgz", + "integrity": "sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.0.tgz", + "integrity": "sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.26.0", + "@babel/generator": "^7.26.0", + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helpers": "^7.26.0", + "@babel/parser": "^7.26.0", + "@babel/template": "^7.25.9", + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.26.0", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.2.tgz", + "integrity": "sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.26.2", + "@babel/types": "^7.26.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz", + "integrity": "sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.25.9", + "@babel/helper-validator-option": "^7.25.9", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", + "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", + "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz", + "integrity": "sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", + "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.0.tgz", + "integrity": "sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.25.9", + "@babel/types": "^7.26.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.2.tgz", + "integrity": "sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.26.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.25.9.tgz", + "integrity": "sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.25.9.tgz", + "integrity": "sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.0.tgz", + "integrity": "sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==", + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz", + "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.25.9", + "@babel/parser": "^7.25.9", + "@babel/types": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.9.tgz", + "integrity": "sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.25.9", + "@babel/generator": "^7.25.9", + "@babel/parser": "^7.25.9", + "@babel/template": "^7.25.9", + "@babel/types": "^7.25.9", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/types": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz", + "integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@emotion/babel-plugin": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.12.0.tgz", + "integrity": "sha512-y2WQb+oP8Jqvvclh8Q55gLUyb7UFvgv7eJfsj7td5TToBrIUtPay2kMrZi4xjq9qw2vD0ZR5fSho0yqoFgX7Rw==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/runtime": "^7.18.3", + "@emotion/hash": "^0.9.2", + "@emotion/memoize": "^0.9.0", + "@emotion/serialize": "^1.2.0", + "babel-plugin-macros": "^3.1.0", + "convert-source-map": "^1.5.0", + "escape-string-regexp": "^4.0.0", + "find-root": "^1.1.0", + "source-map": "^0.5.7", + "stylis": "4.2.0" + } + }, + "node_modules/@emotion/babel-plugin/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "license": "MIT" + }, + "node_modules/@emotion/cache": { + "version": "11.13.1", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.13.1.tgz", + "integrity": "sha512-iqouYkuEblRcXmylXIwwOodiEK5Ifl7JcX7o6V4jI3iW4mLXX3dmt5xwBtIkJiQEXFAI+pC8X0i67yiPkH9Ucw==", + "license": "MIT", + "dependencies": { + "@emotion/memoize": "^0.9.0", + "@emotion/sheet": "^1.4.0", + "@emotion/utils": "^1.4.0", + "@emotion/weak-memoize": "^0.4.0", + "stylis": "4.2.0" + } + }, + "node_modules/@emotion/hash": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.2.tgz", + "integrity": "sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==", + "license": "MIT" + }, + "node_modules/@emotion/is-prop-valid": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.3.1.tgz", + "integrity": "sha512-/ACwoqx7XQi9knQs/G0qKvv5teDMhD7bXYns9N/wM8ah8iNb8jZ2uNO0YOgiq2o2poIvVtJS2YALasQuMSQ7Kw==", + "license": "MIT", + "dependencies": { + "@emotion/memoize": "^0.9.0" + } + }, + "node_modules/@emotion/memoize": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.9.0.tgz", + "integrity": "sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==", + "license": "MIT" + }, + "node_modules/@emotion/react": { + "version": "11.13.3", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.13.3.tgz", + "integrity": "sha512-lIsdU6JNrmYfJ5EbUCf4xW1ovy5wKQ2CkPRM4xogziOxH1nXxBSjpC9YqbFAP7circxMfYp+6x676BqWcEiixg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.12.0", + "@emotion/cache": "^11.13.0", + "@emotion/serialize": "^1.3.1", + "@emotion/use-insertion-effect-with-fallbacks": "^1.1.0", + "@emotion/utils": "^1.4.0", + "@emotion/weak-memoize": "^0.4.0", + "hoist-non-react-statics": "^3.3.1" + }, + "peerDependencies": { + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@emotion/serialize": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.3.2.tgz", + "integrity": "sha512-grVnMvVPK9yUVE6rkKfAJlYZgo0cu3l9iMC77V7DW6E1DUIrU68pSEXRmFZFOFB1QFo57TncmOcvcbMDWsL4yA==", + "license": "MIT", + "dependencies": { + "@emotion/hash": "^0.9.2", + "@emotion/memoize": "^0.9.0", + "@emotion/unitless": "^0.10.0", + "@emotion/utils": "^1.4.1", + "csstype": "^3.0.2" + } + }, + "node_modules/@emotion/sheet": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.4.0.tgz", + "integrity": "sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==", + "license": "MIT" + }, + "node_modules/@emotion/styled": { + "version": "11.13.0", + "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.13.0.tgz", + "integrity": "sha512-tkzkY7nQhW/zC4hztlwucpT8QEZ6eUzpXDRhww/Eej4tFfO0FxQYWRyg/c5CCXa4d/f174kqeXYjuQRnhzf6dA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.12.0", + "@emotion/is-prop-valid": "^1.3.0", + "@emotion/serialize": "^1.3.0", + "@emotion/use-insertion-effect-with-fallbacks": "^1.1.0", + "@emotion/utils": "^1.4.0" + }, + "peerDependencies": { + "@emotion/react": "^11.0.0-rc.0", + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@emotion/unitless": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.10.0.tgz", + "integrity": "sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==", + "license": "MIT" + }, + "node_modules/@emotion/use-insertion-effect-with-fallbacks": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.1.0.tgz", + "integrity": "sha512-+wBOcIV5snwGgI2ya3u99D7/FJquOIniQT1IKyDsBmEgwvpxMNeS65Oib7OnE2d2aY+3BU4OiH+0Wchf8yk3Hw==", + "license": "MIT", + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/@emotion/utils": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.4.1.tgz", + "integrity": "sha512-BymCXzCG3r72VKJxaYVwOXATqXIZ85cuvg0YOUDxMGNrKc1DJRZk8MgV5wyXRyEayIMd4FuXJIUgTBXvDNW5cA==", + "license": "MIT" + }, + "node_modules/@emotion/weak-memoize": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.4.0.tgz", + "integrity": "sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==", + "license": "MIT" + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz", + "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.19.0.tgz", + "integrity": "sha512-zdHg2FPIFNKPdcHWtiNT+jEFCHYVplAXRDlQDyqy0zGx/q2parwh7brGJSiTxRk/TSMkbM//zt/f5CHgyTyaSQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.4", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.9.0.tgz", + "integrity": "sha512-7ATR9F0e4W85D/0w7cU0SNj7qkAexMG+bAHEZOjo9akvGuhHE2m7umzWzfnpa0XAg5Kxc1BWmtPMV67jJ+9VUg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.2.0.tgz", + "integrity": "sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "9.15.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.15.0.tgz", + "integrity": "sha512-tMTqrY+EzbXmKJR5ToI8lxu7jaN5EdmrBFJpQk5JmSlyLsx6o4t27r883K5xsLuCYCpfKBCGswMSWXsM+jB7lg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.4.tgz", + "integrity": "sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.3.tgz", + "integrity": "sha512-2b/g5hRmpbb1o4GnTZax9N9m0FXzz9OV42ZzI4rDDMDuHUqigAiQCEWChBWCY4ztAGVRjoWT19v0yMmc5/L5kA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", + "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.1.tgz", + "integrity": "sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@mui/core-downloads-tracker": { + "version": "6.1.7", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-6.1.7.tgz", + "integrity": "sha512-POuIBi80BZBogQkG4PQKIGwy4QFwB+kOr+OI4k7Znh7LqMAIhwB9OC00l6M+w1GrZJYj3T8R5WX8G6QAIvoVEw==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + } + }, + "node_modules/@mui/icons-material": { + "version": "6.1.7", + "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-6.1.7.tgz", + "integrity": "sha512-RGzkeHNArIVy5ZQ12bq/8VYNeICEyngngsFskTJ/2hYKhIeIII3iRGtaZaSvLpXh7h3Fg3VKTulT+QU0w5K4XQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.26.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@mui/material": "^6.1.7", + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/material": { + "version": "6.1.7", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-6.1.7.tgz", + "integrity": "sha512-KsjujQL/A2hLd1PV3QboF+W6SSL5QqH6ZlSuQoeYz9r69+TnyBFIevbYLxdjJcJmGBjigL5pfpn7hTGop+vhSg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.26.0", + "@mui/core-downloads-tracker": "^6.1.7", + "@mui/system": "^6.1.7", + "@mui/types": "^7.2.19", + "@mui/utils": "^6.1.7", + "@popperjs/core": "^2.11.8", + "@types/react-transition-group": "^4.4.11", + "clsx": "^2.1.1", + "csstype": "^3.1.3", + "prop-types": "^15.8.1", + "react-is": "^18.3.1", + "react-transition-group": "^4.4.5" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@emotion/react": "^11.5.0", + "@emotion/styled": "^11.3.0", + "@mui/material-pigment-css": "^6.1.7", + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + }, + "@mui/material-pigment-css": { + "optional": true + }, + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/private-theming": { + "version": "6.1.7", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-6.1.7.tgz", + "integrity": "sha512-uLbfUSsug5K0LVkv0PI6Flste3le8+6WSL2omdTiYde93P89Qr7pKr8TA6d2yXfr+Bm+SvD8/fGnkaRwFkryuQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.26.0", + "@mui/utils": "^6.1.7", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/styled-engine": { + "version": "6.1.7", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-6.1.7.tgz", + "integrity": "sha512-Ou4CxN7MQmwrfG1Pu6EYjPgPChQXxPDJrwgizLXlRPOad5qAq4gYXRuzrGQ2DfGjjwmJhjI8T6A0SeapAZPGig==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.26.0", + "@emotion/cache": "^11.13.1", + "@emotion/serialize": "^1.3.2", + "@emotion/sheet": "^1.4.0", + "csstype": "^3.1.3", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@emotion/react": "^11.4.1", + "@emotion/styled": "^11.3.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + } + } + }, + "node_modules/@mui/system": { + "version": "6.1.7", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-6.1.7.tgz", + "integrity": "sha512-qbMGgcC/FodpuRSfjXlEDdbNQaW++eATh0vNBcPUv2/YXSpReoOpoT9FhogxEBNks+aQViDXBRZKh6HX2fVmwg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.26.0", + "@mui/private-theming": "^6.1.7", + "@mui/styled-engine": "^6.1.7", + "@mui/types": "^7.2.19", + "@mui/utils": "^6.1.7", + "clsx": "^2.1.1", + "csstype": "^3.1.3", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@emotion/react": "^11.5.0", + "@emotion/styled": "^11.3.0", + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + }, + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/types": { + "version": "7.2.19", + "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.19.tgz", + "integrity": "sha512-6XpZEM/Q3epK9RN8ENoXuygnqUQxE+siN/6rGRi2iwJPgBUR25mphYQ9ZI87plGh58YoZ5pp40bFvKYOCDJ3tA==", + "license": "MIT", + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@mui/utils": { + "version": "6.1.7", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-6.1.7.tgz", + "integrity": "sha512-Gr7cRZxBoZ0BIa3Xqf/2YaUrBLyNPJvXPQH3OsD9WMZukI/TutibbQBVqLYpgqJn8pKSjbD50Yq2auG0wI1xOw==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.26.0", + "@mui/types": "^7.2.19", + "@types/prop-types": "^15.7.13", + "clsx": "^2.1.1", + "prop-types": "^15.8.1", + "react-is": "^18.3.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.27.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.27.2.tgz", + "integrity": "sha512-Tj+j7Pyzd15wAdSJswvs5CJzJNV+qqSUcr/aCD+jpQSBtXvGnV0pnrjoc8zFTe9fcKCatkpFpOO7yAzpO998HA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.27.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.27.2.tgz", + "integrity": "sha512-xsPeJgh2ThBpUqlLgRfiVYBEf/P1nWlWvReG+aBWfNv3XEBpa6ZCmxSVnxJgLgkNz4IbxpLy64h2gCmAAQLneQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.27.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.27.2.tgz", + "integrity": "sha512-KnXU4m9MywuZFedL35Z3PuwiTSn/yqRIhrEA9j+7OSkji39NzVkgxuxTYg5F8ryGysq4iFADaU5osSizMXhU2A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.27.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.27.2.tgz", + "integrity": "sha512-Hj77A3yTvUeCIx/Vi+4d4IbYhyTwtHj07lVzUgpUq9YpJSEiGJj4vXMKwzJ3w5zp5v3PFvpJNgc/J31smZey6g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.27.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.27.2.tgz", + "integrity": "sha512-RjgKf5C3xbn8gxvCm5VgKZ4nn0pRAIe90J0/fdHUsgztd3+Zesb2lm2+r6uX4prV2eUByuxJNdt647/1KPRq5g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.27.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.27.2.tgz", + "integrity": "sha512-duq21FoXwQtuws+V9H6UZ+eCBc7fxSpMK1GQINKn3fAyd9DFYKPJNcUhdIKOrMFjLEJgQskoMoiuizMt+dl20g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.27.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.27.2.tgz", + "integrity": "sha512-6npqOKEPRZkLrMcvyC/32OzJ2srdPzCylJjiTJT2c0bwwSGm7nz2F9mNQ1WrAqCBZROcQn91Fno+khFhVijmFA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.27.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.27.2.tgz", + "integrity": "sha512-V9Xg6eXtgBtHq2jnuQwM/jr2mwe2EycnopO8cbOvpzFuySCGtKlPCI3Hj9xup/pJK5Q0388qfZZy2DqV2J8ftw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.27.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.27.2.tgz", + "integrity": "sha512-uCFX9gtZJoQl2xDTpRdseYuNqyKkuMDtH6zSrBTA28yTfKyjN9hQ2B04N5ynR8ILCoSDOrG/Eg+J2TtJ1e/CSA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.27.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.27.2.tgz", + "integrity": "sha512-/PU9P+7Rkz8JFYDHIi+xzHabOu9qEWR07L5nWLIUsvserrxegZExKCi2jhMZRd0ATdboKylu/K5yAXbp7fYFvA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.27.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.27.2.tgz", + "integrity": "sha512-eCHmol/dT5odMYi/N0R0HC8V8QE40rEpkyje/ZAXJYNNoSfrObOvG/Mn+s1F/FJyB7co7UQZZf6FuWnN6a7f4g==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.27.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.27.2.tgz", + "integrity": "sha512-DEP3Njr9/ADDln3kNi76PXonLMSSMiCir0VHXxmGSHxCxDfQ70oWjHcJGfiBugzaqmYdTC7Y+8Int6qbnxPBIQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.27.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.27.2.tgz", + "integrity": "sha512-NHGo5i6IE/PtEPh5m0yw5OmPMpesFnzMIS/lzvN5vknnC1sXM5Z/id5VgcNPgpD+wHmIcuYYgW+Q53v+9s96lQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.27.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.27.2.tgz", + "integrity": "sha512-PaW2DY5Tan+IFvNJGHDmUrORadbe/Ceh8tQxi8cmdQVCCYsLoQo2cuaSj+AU+YRX8M4ivS2vJ9UGaxfuNN7gmg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.27.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.27.2.tgz", + "integrity": "sha512-dOlWEMg2gI91Qx5I/HYqOD6iqlJspxLcS4Zlg3vjk1srE67z5T2Uz91yg/qA8sY0XcwQrFzWWiZhMNERylLrpQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.27.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.27.2.tgz", + "integrity": "sha512-euMIv/4x5Y2/ImlbGl88mwKNXDsvzbWUlT7DFky76z2keajCtcbAsN9LUdmk31hAoVmJJYSThgdA0EsPeTr1+w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.27.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.27.2.tgz", + "integrity": "sha512-RsnE6LQkUHlkC10RKngtHNLxb7scFykEbEwOFDjr3CeCMG+Rr+cKqlkKc2/wJ1u4u990urRHCbjz31x84PBrSQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.27.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.27.2.tgz", + "integrity": "sha512-foJM5vv+z2KQmn7emYdDLyTbkoO5bkHZE1oth2tWbQNGW7mX32d46Hz6T0MqXdWS2vBZhaEtHqdy9WYwGfiliA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.6", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", + "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/estree": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/hoist-non-react-statics": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.5.tgz", + "integrity": "sha512-SbcrWzkKBw2cdwRTwQAswfpB9g9LJWfjtUeW/jvNwbhC8cpmmNYVePa+ncbUe0rGTQ7G3Ff6mYUN2VMfLVr+Sg==", + "license": "MIT", + "dependencies": { + "@types/react": "*", + "hoist-non-react-statics": "^3.3.0" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/parse-json": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", + "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", + "license": "MIT" + }, + "node_modules/@types/prop-types": { + "version": "15.7.13", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.13.tgz", + "integrity": "sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==", + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "18.3.12", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.12.tgz", + "integrity": "sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw==", + "license": "MIT", + "dependencies": { + "@types/prop-types": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-qW1Mfv8taImTthu4KoXgDfLuk4bydU6Q/TkADnDWWHwi4NX4BR+LWfTp2sVmTqRrsHvyDDTelgelxJ+SsejKKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/react-transition-group": { + "version": "4.4.11", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.11.tgz", + "integrity": "sha512-RM05tAniPZ5DZPzzNFP+DmrcOdD0efDUxMy3145oljWSl3x9ZV5vhme98gTxFrj2lhXvmGNnUiuDyJgY9IKkNA==", + "license": "MIT", + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.15.0.tgz", + "integrity": "sha512-+zkm9AR1Ds9uLWN3fkoeXgFppaQ+uEVtfOV62dDmsy9QCNqlRHWNEck4yarvRNrvRcHQLGfqBNui3cimoz8XAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.15.0", + "@typescript-eslint/type-utils": "8.15.0", + "@typescript-eslint/utils": "8.15.0", + "@typescript-eslint/visitor-keys": "8.15.0", + "graphemer": "^1.4.0", + "ignore": "^5.3.1", + "natural-compare": "^1.4.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", + "eslint": "^8.57.0 || ^9.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.15.0.tgz", + "integrity": "sha512-7n59qFpghG4uazrF9qtGKBZXn7Oz4sOMm8dwNWDQY96Xlm2oX67eipqcblDj+oY1lLCbf1oltMZFpUso66Kl1A==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/scope-manager": "8.15.0", + "@typescript-eslint/types": "8.15.0", + "@typescript-eslint/typescript-estree": "8.15.0", + "@typescript-eslint/visitor-keys": "8.15.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.15.0.tgz", + "integrity": "sha512-QRGy8ADi4J7ii95xz4UoiymmmMd/zuy9azCaamnZ3FM8T5fZcex8UfJcjkiEZjJSztKfEBe3dZ5T/5RHAmw2mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.15.0", + "@typescript-eslint/visitor-keys": "8.15.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.15.0.tgz", + "integrity": "sha512-UU6uwXDoI3JGSXmcdnP5d8Fffa2KayOhUUqr/AiBnG1Gl7+7ut/oyagVeSkh7bxQ0zSXV9ptRh/4N15nkCqnpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/typescript-estree": "8.15.0", + "@typescript-eslint/utils": "8.15.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.15.0.tgz", + "integrity": "sha512-n3Gt8Y/KyJNe0S3yDCD2RVKrHBC4gTUcLTebVBXacPy091E6tNspFLKRXlk3hwT4G55nfr1n2AdFqi/XMxzmPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.15.0.tgz", + "integrity": "sha512-1eMp2JgNec/niZsR7ioFBlsh/Fk0oJbhaqO0jRyQBMgkz7RrFfkqF9lYYmBoGBaSiLnu8TAPQTwoTUiSTUW9dg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "8.15.0", + "@typescript-eslint/visitor-keys": "8.15.0", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.15.0.tgz", + "integrity": "sha512-k82RI9yGhr0QM3Dnq+egEpz9qB6Un+WLYhmoNcvl8ltMEededhh7otBVVIDDsEEttauwdY/hQoSsOv13lxrFzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "8.15.0", + "@typescript-eslint/types": "8.15.0", + "@typescript-eslint/typescript-estree": "8.15.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.15.0.tgz", + "integrity": "sha512-h8vYOulWec9LhpwfAdZf2bjr8xIp0KNKnpgqSz0qqYYKAW/QZKw3ktRndbiAtUz4acH4QLQavwZBYCc0wulA/Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.15.0", + "eslint-visitor-keys": "^4.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@vitejs/plugin-react": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.3.3.tgz", + "integrity": "sha512-NooDe9GpHGqNns1i8XDERg0Vsg5SSYRhRxxyTGogUdkdNt47jal+fbuYi+Yfq6pzRCKXyoPcWisfxE6RIM3GKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.25.2", + "@babel/plugin-transform-react-jsx-self": "^7.24.7", + "@babel/plugin-transform-react-jsx-source": "^7.24.7", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.14.2" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0" + } + }, + "node_modules/acorn": { + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/babel-plugin-macros": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", + "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.5", + "cosmiconfig": "^7.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">=10", + "npm": ">=6" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.24.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.2.tgz", + "integrity": "sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001669", + "electron-to-chromium": "^1.5.41", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.1" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001680", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001680.tgz", + "integrity": "sha512-rPQy70G6AGUMnbwS1z6Xg+RkHYPAi18ihs47GH0jcxIG7wArmPgY3XbS2sRdBbxJljp3thdT8BIqv9ccCypiPA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "license": "MIT", + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.5.tgz", + "integrity": "sha512-ZVJrKKYunU38/76t0RMOulHOnUcbU9GbpWKAOZ0mhjr7CX6FVrH+4FrAapSOekrgFQ3f/8gwMEuIft0aKq6Hug==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/deepmerge": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-2.2.1.tgz", + "integrity": "sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/dom-helpers": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", + "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.61", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.61.tgz", + "integrity": "sha512-CcRGSBCBB6L9c3PBJWYYrBo6Bzeoi+GZTKvtuRtooJGWsINk+mOInZWcssU35zDTAwreVcrMimc9aMyPpehRNw==", + "dev": true, + "license": "ISC" + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "9.15.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.15.0.tgz", + "integrity": "sha512-7CrWySmIibCgT1Os28lUU6upBshZ+GxybLOrmRzi08kS8MBuO8QA7pXEgYgY5W8vK3e74xv0lpjo9DbaGU9Rkw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.19.0", + "@eslint/core": "^0.9.0", + "@eslint/eslintrc": "^3.2.0", + "@eslint/js": "9.15.0", + "@eslint/plugin-kit": "^0.2.3", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.1", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.5", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.2.0", + "eslint-visitor-keys": "^4.2.0", + "espree": "^10.3.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.0.0.tgz", + "integrity": "sha512-hIOwI+5hYGpJEc4uPRmz2ulCjAGD/N13Lukkh8cLV0i2IRk/bdZDYjgLVHj+U9Z704kLIdIO6iueGvxNur0sgw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" + } + }, + "node_modules/eslint-plugin-react-refresh": { + "version": "0.4.14", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.14.tgz", + "integrity": "sha512-aXvzCTK7ZBv1e7fahFuR3Z/fyQQSIQ711yPgYRj+Oj64tyTgO4iQIDmYXDBqvSWQ/FA4OSCsXOStlF+noU0/NA==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "eslint": ">=7" + } + }, + "node_modules/eslint-scope": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.2.0.tgz", + "integrity": "sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", + "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.14.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", + "license": "MIT" + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "dev": true, + "license": "ISC" + }, + "node_modules/formik": { + "version": "2.4.6", + "resolved": "https://registry.npmjs.org/formik/-/formik-2.4.6.tgz", + "integrity": "sha512-A+2EI7U7aG296q2TLGvNapDNTZp1khVt5Vk0Q/fyfSROss0V/V6+txt2aJnwEos44IxTCW/LYAi/zgWzlevj+g==", + "funding": [ + { + "type": "individual", + "url": "https://opencollective.com/formik" + } + ], + "license": "Apache-2.0", + "dependencies": { + "@types/hoist-non-react-statics": "^3.3.1", + "deepmerge": "^2.1.1", + "hoist-non-react-statics": "^3.3.0", + "lodash": "^4.17.21", + "lodash-es": "^4.17.21", + "react-fast-compare": "^2.0.1", + "tiny-warning": "^1.0.2", + "tslib": "^2.0.0" + }, + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "15.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.12.0.tgz", + "integrity": "sha512-1+gLErljJFhbOVyaetcwJiJ4+eLe45S2E7P5UiZ9xGfeq3ATQf5DOv9G7MH3gGbKQLkzmNh2DxfZwLdw+j6oTQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true, + "license": "MIT" + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "license": "BSD-3-Clause", + "dependencies": { + "react-is": "^16.7.0" + } + }, + "node_modules/hoist-non-react-statics/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "license": "MIT" + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "license": "MIT" + }, + "node_modules/is-core-module": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", + "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "license": "MIT" + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "license": "MIT" + }, + "node_modules/lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==", + "license": "MIT" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", + "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-releases": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", + "dev": true, + "license": "MIT" + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "license": "MIT" + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.4.49", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz", + "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/prop-types/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "license": "MIT" + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/react": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" + }, + "peerDependencies": { + "react": "^18.3.1" + } + }, + "node_modules/react-fast-compare": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-2.0.4.tgz", + "integrity": "sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw==", + "license": "MIT" + }, + "node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "license": "MIT" + }, + "node_modules/react-refresh": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz", + "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-transition-group": { + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", + "license": "BSD-3-Clause", + "dependencies": { + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" + }, + "peerDependencies": { + "react": ">=16.6.0", + "react-dom": ">=16.6.0" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "license": "MIT" + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "license": "MIT", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rollup": { + "version": "4.27.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.27.2.tgz", + "integrity": "sha512-KreA+PzWmk2yaFmZVwe6GB2uBD86nXl86OsDkt1bJS9p3vqWuEQ6HnJJ+j/mZi/q0920P99/MVRlB4L3crpF5w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.6" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.27.2", + "@rollup/rollup-android-arm64": "4.27.2", + "@rollup/rollup-darwin-arm64": "4.27.2", + "@rollup/rollup-darwin-x64": "4.27.2", + "@rollup/rollup-freebsd-arm64": "4.27.2", + "@rollup/rollup-freebsd-x64": "4.27.2", + "@rollup/rollup-linux-arm-gnueabihf": "4.27.2", + "@rollup/rollup-linux-arm-musleabihf": "4.27.2", + "@rollup/rollup-linux-arm64-gnu": "4.27.2", + "@rollup/rollup-linux-arm64-musl": "4.27.2", + "@rollup/rollup-linux-powerpc64le-gnu": "4.27.2", + "@rollup/rollup-linux-riscv64-gnu": "4.27.2", + "@rollup/rollup-linux-s390x-gnu": "4.27.2", + "@rollup/rollup-linux-x64-gnu": "4.27.2", + "@rollup/rollup-linux-x64-musl": "4.27.2", + "@rollup/rollup-win32-arm64-msvc": "4.27.2", + "@rollup/rollup-win32-ia32-msvc": "4.27.2", + "@rollup/rollup-win32-x64-msvc": "4.27.2", + "fsevents": "~2.3.2" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/scheduler": { + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/stylis": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", + "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==", + "license": "MIT" + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tiny-warning": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", + "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==", + "license": "MIT" + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ts-api-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.0.tgz", + "integrity": "sha512-032cPxaEKwM+GT3vA5JXNzIaizx388rhsSW79vGRNGXfRRAdEAn2mvk36PvK5HnOchyWZ7afLEXqYCvPCrzuzQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/typescript": { + "version": "5.6.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz", + "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/typescript-eslint": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.15.0.tgz", + "integrity": "sha512-wY4FRGl0ZI+ZU4Jo/yjdBu0lVTSML58pu6PgGtJmCufvzfV565pUF6iACQt092uFOd49iLOTX/sEVmHtbSrS+w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.15.0", + "@typescript-eslint/parser": "8.15.0", + "@typescript-eslint/utils": "8.15.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", + "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/vite": { + "version": "5.4.11", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.11.tgz", + "integrity": "sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "license": "ISC", + "engines": { + "node": ">= 6" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/agent/agentUi/package.json b/agent/agentUi/package.json new file mode 100644 index 00000000..60633463 --- /dev/null +++ b/agent/agentUi/package.json @@ -0,0 +1,33 @@ +{ + "name": "agentui", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "lint": "eslint .", + "preview": "vite preview" + }, + "dependencies": { + "@emotion/react": "^11.13.3", + "@emotion/styled": "^11.13.0", + "@mui/icons-material": "^6.1.7", + "@mui/material": "^6.1.7", + "formik": "^2.4.6", + "react": "^18.3.1", + "react-dom": "^18.3.1" + }, + "devDependencies": { + "@eslint/js": "^9.13.0", + "@types/react": "^18.3.12", + "@types/react-dom": "^18.3.1", + "@vitejs/plugin-react": "^4.3.3", + "eslint": "^9.13.0", + "eslint-plugin-react-hooks": "^5.0.0", + "eslint-plugin-react-refresh": "^0.4.14", + "globals": "^15.11.0", + "typescript-eslint": "^8.15.0", + "vite": "^5.4.10" + } +} diff --git a/agent/agentUi/public/zrok.png b/agent/agentUi/public/zrok.png new file mode 100644 index 00000000..b9cef0f2 Binary files /dev/null and b/agent/agentUi/public/zrok.png differ diff --git a/agent/agentUi/src/AccessCard.tsx b/agent/agentUi/src/AccessCard.tsx new file mode 100644 index 00000000..8d9480f4 --- /dev/null +++ b/agent/agentUi/src/AccessCard.tsx @@ -0,0 +1,53 @@ +import {AgentObject} from "./model/overview.ts"; +import {AppBar, Box, Button, Card, Chip, Grid2, Toolbar, Typography} from "@mui/material"; +import LanIcon from "@mui/icons-material/Lan"; +import {AccessDetail} from "./api"; +import DeleteIcon from "@mui/icons-material/Delete"; +import {GetAgentApi} from "./model/api.ts"; + +interface AccessCardProps { + accessObject: AgentObject; +} + +const AccessCard = ({ accessObject }: AccessCardProps) => { + let access = (accessObject.v as AccessDetail); + + const releaseAccess = () => { + GetAgentApi().agentReleaseAccess({frontendToken: access.frontendToken}) + .catch(e => { + console.log("error releasing access", e); + }); + } + + return ( + + + + + + + {access.frontendToken} + + + + + + + + + + + + {access.token} → {access.bindAddress} + + + + + + + + + ); +} + +export default AccessCard; \ No newline at end of file diff --git a/agent/agentUi/src/AgentUi.tsx b/agent/agentUi/src/AgentUi.tsx new file mode 100644 index 00000000..6bd0a5fd --- /dev/null +++ b/agent/agentUi/src/AgentUi.tsx @@ -0,0 +1,69 @@ +import {useEffect, useState} from "react"; +import {GetAgentApi} from "./model/api.ts"; +import NavBar from "./NavBar.tsx"; +import {AgentObject, buildOverview} from "./model/overview.ts"; +import Overview from "./Overview.tsx"; +import NewShareModal from "./NewShareModal.tsx"; +import NewAccessModal from "./NewAccessModal.tsx"; + +const AgentUi = () => { + const [version, setVersion] = useState("unset"); + const [overview, setOverview] = useState(new Array()); + const [newShareOpen, setNewShareOpen] = useState(false); + const [newAccessOpen, setNewAccessOpen] = useState(false); + + const openNewShare = () => { + setNewShareOpen(true); + } + const closeNewShare = () => { + setNewShareOpen(false); + } + + const openNewAccess = () => { + setNewAccessOpen(true); + } + const closeNewAccess = () => { + setNewAccessOpen(false); + } + + useEffect(() => { + GetAgentApi().agentVersion() + .then(r => { + if(r.v) { + setVersion(r.v); + } else { + console.log("unexpected", r); + } + }) + .catch(e => { + console.log(e); + }); + }, []); + + useEffect(() => { + let interval = setInterval(() => { + GetAgentApi().agentStatus() + .then(r => { + setOverview(buildOverview(r)); + }) + .catch(e => { + console.log(e); + }) + }, 1000); + return () => { + clearInterval(interval); + setOverview(new Array()); + } + }, []); + + return ( + <> + + + + + + ); +} + +export default AgentUi; \ No newline at end of file diff --git a/agent/agentUi/src/NavBar.tsx b/agent/agentUi/src/NavBar.tsx new file mode 100644 index 00000000..c68f2c15 --- /dev/null +++ b/agent/agentUi/src/NavBar.tsx @@ -0,0 +1,40 @@ +import {AppBar, Box, Button, Grid2, Toolbar, Typography} from "@mui/material"; +import LanIcon from "@mui/icons-material/Lan"; +import ShareIcon from "@mui/icons-material/Share"; +import zrokLogo from "./assets/zrok-1.0.0-rocket-green.svg"; + +interface NavBarProps { + shareClick: () => void; + accessClick: () => void; +} + +const NavBar = ({ shareClick, accessClick }: NavBarProps) => { + return ( + + + + + + + + + + z r o k   Agent + + + + + + + + + + + + + + + ); +} + +export default NavBar \ No newline at end of file diff --git a/agent/agentUi/src/NewAccessModal.tsx b/agent/agentUi/src/NewAccessModal.tsx new file mode 100644 index 00000000..8a5c5572 --- /dev/null +++ b/agent/agentUi/src/NewAccessModal.tsx @@ -0,0 +1,69 @@ +import {useState} from "react"; +import {useFormik} from "formik"; +import {GetAgentApi} from "./model/api.ts"; +import {Box, Button, Modal, TextField, Typography} from "@mui/material"; +import {modalStyle} from "./model/theme.ts"; +import * as React from "react"; + +interface NewAccessModalProps { + close: () => void; + isOpen: boolean; +} + +const NewAccessModal = ({ close, isOpen }: NewAccessModalProps) => { + const [errorMessage, setErrorMessage] = useState(null as React.JSX.Element); + + const newAccessForm = useFormik({ + initialValues: { + token: "", + bindAddress: "", + }, + onSubmit: v => { + setErrorMessage(null as React.JSX.Element); + GetAgentApi().agentAccessPrivate(v) + .then(r => { + close(); + }) + .catch(e => { + e.response.json().then(ex => { + setErrorMessage({ex.message}); + console.log(ex.message); + }) + }); + } + }); + + return ( + + +

Access...

+

{errorMessage}

+
+ + + + +
+
+ ); +} + +export default NewAccessModal; \ No newline at end of file diff --git a/agent/agentUi/src/NewShareModal.tsx b/agent/agentUi/src/NewShareModal.tsx new file mode 100644 index 00000000..7283f90f --- /dev/null +++ b/agent/agentUi/src/NewShareModal.tsx @@ -0,0 +1,146 @@ +import {useFormik} from "formik"; +import {GetAgentApi} from "./model/api.ts"; +import {useState} from "react"; +import {Box, Button, Checkbox, FormControlLabel, MenuItem, Modal, TextField, Typography} from "@mui/material"; +import {modalStyle} from "./model/theme.ts"; +import * as React from "react"; + +interface NewShareModalProps { + close: () => void; + isOpen: boolean; +} + +const NewShareModal = ({ close, isOpen }: NewShareModalProps) => { + const [errorMessage, setErrorMessage] = useState(null as React.JSX.Element); + + const form = useFormik({ + initialValues: { + shareMode: "public", + backendMode: "proxy", + target: "", + insecure: false, + }, + onSubmit: v => { + setErrorMessage(null as React.JSX.Element); + switch(v.shareMode) { + case "public": + GetAgentApi().agentSharePublic(v) + .then(r => { + close(); + }) + .catch(e => { + e.response.json().then(ex => { + setErrorMessage({ex.message}); + console.log(ex.message); + }) + }); + break; + + case "private": + GetAgentApi().agentSharePrivate(v) + .then(r => { + close(); + }) + .catch(e => { + e.response().json().then(ex => { + setErrorMessage({ex.message}); + console.log(ex.message); + }) + }); + break; + } + }, + }); + + return ( + + +

Share...

+

{errorMessage}

+
+ + public + private + + {form.values.shareMode === "public" && ( + + proxy + web + caddy + drive + + )} + {form.values.shareMode === "private" && ( + + proxy + web + tcpTunnel + udpTunnel + caddy + drive + socks + vpn + + )} + + {form.values.backendMode === "proxy" && ( + + } + label="Insecure" + sx={{ mt: 2 }} + /> + + )} + + +
+
+ ); +} + +export default NewShareModal; \ No newline at end of file diff --git a/agent/agentUi/src/Overview.tsx b/agent/agentUi/src/Overview.tsx new file mode 100644 index 00000000..c328482c --- /dev/null +++ b/agent/agentUi/src/Overview.tsx @@ -0,0 +1,47 @@ +import {AgentObject} from "./model/overview.ts"; +import {Box, Card, Grid2, Typography} from "@mui/material"; +import ShareIcon from "@mui/icons-material/Share"; +import LanIcon from "@mui/icons-material/Lan"; +import ShareCard from "./ShareCard.tsx"; +import AccessCard from "./AccessCard.tsx"; + +interface OverviewProps { + overview: Array; + shareClick: () => void; + accessClick: () => void; +} + +const Overview = ({ overview, shareClick, accessClick }: OverviewProps) => { + let cards = []; + if(overview.length > 0) { + overview.forEach(row => { + switch(row.type) { + case "access": + cards.push(); + break; + + case "share": + cards.push(); + break; + } + }); + } else { + cards.push( + + + + zrok Agent is empty! Add a share or access share to get started. + + + + ); + } + return ( + + {cards} + + ); +} + +export default Overview; \ No newline at end of file diff --git a/agent/agentUi/src/ShareCard.tsx b/agent/agentUi/src/ShareCard.tsx new file mode 100644 index 00000000..e3b8ca59 --- /dev/null +++ b/agent/agentUi/src/ShareCard.tsx @@ -0,0 +1,59 @@ +import * as React from "react"; +import {AgentObject} from "./model/overview.ts"; +import {ShareDetail} from "./api"; +import {AppBar, Box, Button, Card, Chip, Grid2, Toolbar, Typography} from "@mui/material"; +import ShareIcon from "@mui/icons-material/Share"; +import DeleteIcon from "@mui/icons-material/Delete"; +import {GetAgentApi} from "./model/api.ts"; + +interface ShareCardProps { + shareObject: AgentObject; +} + +const ShareCard = ({ shareObject }: ShareCardProps) => { + let frontends = new Array(); + let share = (shareObject.v as ShareDetail); + share.frontendEndpoint!.map(fe => { + frontends.push({fe}); + }); + + const releaseShare = () => { + GetAgentApi().agentReleaseShare({token: share.token}) + .catch(e => { + console.log(e); + }); + } + + return ( + + + + + + + {share.token} + + + + + + + + + + + + + {share.backendEndpoint} → {frontends}
+
+
+ + + + + +
+ ); +} + +export default ShareCard; \ No newline at end of file diff --git a/agent/agentUi/src/api/.openapi-generator-ignore b/agent/agentUi/src/api/.openapi-generator-ignore new file mode 100644 index 00000000..7484ee59 --- /dev/null +++ b/agent/agentUi/src/api/.openapi-generator-ignore @@ -0,0 +1,23 @@ +# OpenAPI Generator Ignore +# Generated by openapi-generator https://github.com/openapitools/openapi-generator + +# Use this file to prevent files from being overwritten by the generator. +# The patterns follow closely to .gitignore or .dockerignore. + +# As an example, the C# client generator defines ApiClient.cs. +# You can make changes and tell OpenAPI Generator to ignore just this file by uncommenting the following line: +#ApiClient.cs + +# You can match any string of characters against a directory, file or extension with a single asterisk (*): +#foo/*/qux +# The above matches foo/bar/qux and foo/baz/qux, but not foo/bar/baz/qux + +# You can recursively match patterns against a directory, file or extension with a double asterisk (**): +#foo/**/qux +# This matches foo/bar/qux, foo/baz/qux, and foo/bar/baz/qux + +# You can also negate patterns with an exclamation (!). +# For example, you can ignore all files in a docs folder with the file extension .md: +#docs/*.md +# Then explicitly reverse the ignore rule for a single file: +#!docs/README.md diff --git a/agent/agentUi/src/api/.openapi-generator/FILES b/agent/agentUi/src/api/.openapi-generator/FILES new file mode 100644 index 00000000..fa5f6d9c --- /dev/null +++ b/agent/agentUi/src/api/.openapi-generator/FILES @@ -0,0 +1,16 @@ +.openapi-generator-ignore +apis/AgentApi.ts +apis/index.ts +index.ts +models/AccessDetail.ts +models/AccessPrivateResponse.ts +models/ProtobufAny.ts +models/RpcStatus.ts +models/ShareDetail.ts +models/SharePrivateResponse.ts +models/SharePublicResponse.ts +models/ShareReservedResponse.ts +models/StatusResponse.ts +models/VersionResponse.ts +models/index.ts +runtime.ts diff --git a/agent/agentUi/src/api/.openapi-generator/VERSION b/agent/agentUi/src/api/.openapi-generator/VERSION new file mode 100644 index 00000000..1985849f --- /dev/null +++ b/agent/agentUi/src/api/.openapi-generator/VERSION @@ -0,0 +1 @@ +7.7.0 diff --git a/agent/agentUi/src/api/apis/AgentApi.ts b/agent/agentUi/src/api/apis/AgentApi.ts new file mode 100644 index 00000000..0424fd5d --- /dev/null +++ b/agent/agentUi/src/api/apis/AgentApi.ts @@ -0,0 +1,348 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * agent/agentGrpc/agent.proto + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: version not set + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import * as runtime from '../runtime'; +import type { + AccessPrivateResponse, + RpcStatus, + SharePrivateResponse, + SharePublicResponse, + StatusResponse, + VersionResponse, +} from '../models/index'; +import { + AccessPrivateResponseFromJSON, + AccessPrivateResponseToJSON, + RpcStatusFromJSON, + RpcStatusToJSON, + SharePrivateResponseFromJSON, + SharePrivateResponseToJSON, + SharePublicResponseFromJSON, + SharePublicResponseToJSON, + StatusResponseFromJSON, + StatusResponseToJSON, + VersionResponseFromJSON, + VersionResponseToJSON, +} from '../models/index'; + +export interface AgentAccessPrivateRequest { + token?: string; + bindAddress?: string; + autoMode?: boolean; + autoAddress?: string; + autoStartPort?: number; + autoEndPort?: number; + responseHeaders?: Array; +} + +export interface AgentReleaseAccessRequest { + frontendToken?: string; +} + +export interface AgentReleaseShareRequest { + token?: string; +} + +export interface AgentSharePrivateRequest { + target?: string; + backendMode?: string; + insecure?: boolean; + closed?: boolean; + accessGrants?: Array; +} + +export interface AgentSharePublicRequest { + target?: string; + basicAuth?: Array; + frontendSelection?: Array; + backendMode?: string; + insecure?: boolean; + oauthProvider?: string; + oauthEmailAddressPatterns?: Array; + oauthCheckInterval?: string; + closed?: boolean; + accessGrants?: Array; +} + +/** + * + */ +export class AgentApi extends runtime.BaseAPI { + + /** + */ + async agentAccessPrivateRaw(requestParameters: AgentAccessPrivateRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { + const queryParameters: any = {}; + + if (requestParameters['token'] != null) { + queryParameters['token'] = requestParameters['token']; + } + + if (requestParameters['bindAddress'] != null) { + queryParameters['bindAddress'] = requestParameters['bindAddress']; + } + + if (requestParameters['autoMode'] != null) { + queryParameters['autoMode'] = requestParameters['autoMode']; + } + + if (requestParameters['autoAddress'] != null) { + queryParameters['autoAddress'] = requestParameters['autoAddress']; + } + + if (requestParameters['autoStartPort'] != null) { + queryParameters['autoStartPort'] = requestParameters['autoStartPort']; + } + + if (requestParameters['autoEndPort'] != null) { + queryParameters['autoEndPort'] = requestParameters['autoEndPort']; + } + + if (requestParameters['responseHeaders'] != null) { + queryParameters['responseHeaders'] = requestParameters['responseHeaders']; + } + + const headerParameters: runtime.HTTPHeaders = {}; + + const response = await this.request({ + path: `/v1/agent/accessPrivate`, + method: 'POST', + headers: headerParameters, + query: queryParameters, + }, initOverrides); + + return new runtime.JSONApiResponse(response, (jsonValue) => AccessPrivateResponseFromJSON(jsonValue)); + } + + /** + */ + async agentAccessPrivate(requestParameters: AgentAccessPrivateRequest = {}, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { + const response = await this.agentAccessPrivateRaw(requestParameters, initOverrides); + return await response.value(); + } + + /** + */ + async agentReleaseAccessRaw(requestParameters: AgentReleaseAccessRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { + const queryParameters: any = {}; + + if (requestParameters['frontendToken'] != null) { + queryParameters['frontendToken'] = requestParameters['frontendToken']; + } + + const headerParameters: runtime.HTTPHeaders = {}; + + const response = await this.request({ + path: `/v1/agent/releaseAccess`, + method: 'POST', + headers: headerParameters, + query: queryParameters, + }, initOverrides); + + return new runtime.JSONApiResponse(response); + } + + /** + */ + async agentReleaseAccess(requestParameters: AgentReleaseAccessRequest = {}, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { + const response = await this.agentReleaseAccessRaw(requestParameters, initOverrides); + return await response.value(); + } + + /** + */ + async agentReleaseShareRaw(requestParameters: AgentReleaseShareRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { + const queryParameters: any = {}; + + if (requestParameters['token'] != null) { + queryParameters['token'] = requestParameters['token']; + } + + const headerParameters: runtime.HTTPHeaders = {}; + + const response = await this.request({ + path: `/v1/agent/releaseShare`, + method: 'POST', + headers: headerParameters, + query: queryParameters, + }, initOverrides); + + return new runtime.JSONApiResponse(response); + } + + /** + */ + async agentReleaseShare(requestParameters: AgentReleaseShareRequest = {}, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { + const response = await this.agentReleaseShareRaw(requestParameters, initOverrides); + return await response.value(); + } + + /** + */ + async agentSharePrivateRaw(requestParameters: AgentSharePrivateRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { + const queryParameters: any = {}; + + if (requestParameters['target'] != null) { + queryParameters['target'] = requestParameters['target']; + } + + if (requestParameters['backendMode'] != null) { + queryParameters['backendMode'] = requestParameters['backendMode']; + } + + if (requestParameters['insecure'] != null) { + queryParameters['insecure'] = requestParameters['insecure']; + } + + if (requestParameters['closed'] != null) { + queryParameters['closed'] = requestParameters['closed']; + } + + if (requestParameters['accessGrants'] != null) { + queryParameters['accessGrants'] = requestParameters['accessGrants']; + } + + const headerParameters: runtime.HTTPHeaders = {}; + + const response = await this.request({ + path: `/v1/agent/sharePrivate`, + method: 'POST', + headers: headerParameters, + query: queryParameters, + }, initOverrides); + + return new runtime.JSONApiResponse(response, (jsonValue) => SharePrivateResponseFromJSON(jsonValue)); + } + + /** + */ + async agentSharePrivate(requestParameters: AgentSharePrivateRequest = {}, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { + const response = await this.agentSharePrivateRaw(requestParameters, initOverrides); + return await response.value(); + } + + /** + */ + async agentSharePublicRaw(requestParameters: AgentSharePublicRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { + const queryParameters: any = {}; + + if (requestParameters['target'] != null) { + queryParameters['target'] = requestParameters['target']; + } + + if (requestParameters['basicAuth'] != null) { + queryParameters['basicAuth'] = requestParameters['basicAuth']; + } + + if (requestParameters['frontendSelection'] != null) { + queryParameters['frontendSelection'] = requestParameters['frontendSelection']; + } + + if (requestParameters['backendMode'] != null) { + queryParameters['backendMode'] = requestParameters['backendMode']; + } + + if (requestParameters['insecure'] != null) { + queryParameters['insecure'] = requestParameters['insecure']; + } + + if (requestParameters['oauthProvider'] != null) { + queryParameters['oauthProvider'] = requestParameters['oauthProvider']; + } + + if (requestParameters['oauthEmailAddressPatterns'] != null) { + queryParameters['oauthEmailAddressPatterns'] = requestParameters['oauthEmailAddressPatterns']; + } + + if (requestParameters['oauthCheckInterval'] != null) { + queryParameters['oauthCheckInterval'] = requestParameters['oauthCheckInterval']; + } + + if (requestParameters['closed'] != null) { + queryParameters['closed'] = requestParameters['closed']; + } + + if (requestParameters['accessGrants'] != null) { + queryParameters['accessGrants'] = requestParameters['accessGrants']; + } + + const headerParameters: runtime.HTTPHeaders = {}; + + const response = await this.request({ + path: `/v1/agent/sharePublic`, + method: 'POST', + headers: headerParameters, + query: queryParameters, + }, initOverrides); + + return new runtime.JSONApiResponse(response, (jsonValue) => SharePublicResponseFromJSON(jsonValue)); + } + + /** + */ + async agentSharePublic(requestParameters: AgentSharePublicRequest = {}, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { + const response = await this.agentSharePublicRaw(requestParameters, initOverrides); + return await response.value(); + } + + /** + */ + async agentStatusRaw(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + + const response = await this.request({ + path: `/v1/agent/status`, + method: 'GET', + headers: headerParameters, + query: queryParameters, + }, initOverrides); + + return new runtime.JSONApiResponse(response, (jsonValue) => StatusResponseFromJSON(jsonValue)); + } + + /** + */ + async agentStatus(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { + const response = await this.agentStatusRaw(initOverrides); + return await response.value(); + } + + /** + */ + async agentVersionRaw(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + + const response = await this.request({ + path: `/v1/agent/version`, + method: 'GET', + headers: headerParameters, + query: queryParameters, + }, initOverrides); + + return new runtime.JSONApiResponse(response, (jsonValue) => VersionResponseFromJSON(jsonValue)); + } + + /** + */ + async agentVersion(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { + const response = await this.agentVersionRaw(initOverrides); + return await response.value(); + } + +} diff --git a/agent/agentUi/src/api/apis/index.ts b/agent/agentUi/src/api/apis/index.ts new file mode 100644 index 00000000..5fe2a184 --- /dev/null +++ b/agent/agentUi/src/api/apis/index.ts @@ -0,0 +1,3 @@ +/* tslint:disable */ +/* eslint-disable */ +export * from './AgentApi'; diff --git a/sdk/nodejs/sdk/src/zrok/api/index.ts b/agent/agentUi/src/api/index.ts similarity index 100% rename from sdk/nodejs/sdk/src/zrok/api/index.ts rename to agent/agentUi/src/api/index.ts diff --git a/agent/agentUi/src/api/models/AccessDetail.ts b/agent/agentUi/src/api/models/AccessDetail.ts new file mode 100644 index 00000000..fb2fe724 --- /dev/null +++ b/agent/agentUi/src/api/models/AccessDetail.ts @@ -0,0 +1,84 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * agent/agentGrpc/agent.proto + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: version not set + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +import { mapValues } from '../runtime'; +/** + * + * @export + * @interface AccessDetail + */ +export interface AccessDetail { + /** + * + * @type {string} + * @memberof AccessDetail + */ + frontendToken?: string; + /** + * + * @type {string} + * @memberof AccessDetail + */ + token?: string; + /** + * + * @type {string} + * @memberof AccessDetail + */ + bindAddress?: string; + /** + * + * @type {Array} + * @memberof AccessDetail + */ + responseHeaders?: Array; +} + +/** + * Check if a given object implements the AccessDetail interface. + */ +export function instanceOfAccessDetail(value: object): value is AccessDetail { + return true; +} + +export function AccessDetailFromJSON(json: any): AccessDetail { + return AccessDetailFromJSONTyped(json, false); +} + +export function AccessDetailFromJSONTyped(json: any, ignoreDiscriminator: boolean): AccessDetail { + if (json == null) { + return json; + } + return { + + 'frontendToken': json['frontendToken'] == null ? undefined : json['frontendToken'], + 'token': json['token'] == null ? undefined : json['token'], + 'bindAddress': json['bindAddress'] == null ? undefined : json['bindAddress'], + 'responseHeaders': json['responseHeaders'] == null ? undefined : json['responseHeaders'], + }; +} + +export function AccessDetailToJSON(value?: AccessDetail | null): any { + if (value == null) { + return value; + } + return { + + 'frontendToken': value['frontendToken'], + 'token': value['token'], + 'bindAddress': value['bindAddress'], + 'responseHeaders': value['responseHeaders'], + }; +} + diff --git a/agent/agentUi/src/api/models/AccessPrivateResponse.ts b/agent/agentUi/src/api/models/AccessPrivateResponse.ts new file mode 100644 index 00000000..42218c75 --- /dev/null +++ b/agent/agentUi/src/api/models/AccessPrivateResponse.ts @@ -0,0 +1,60 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * agent/agentGrpc/agent.proto + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: version not set + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +import { mapValues } from '../runtime'; +/** + * + * @export + * @interface AccessPrivateResponse + */ +export interface AccessPrivateResponse { + /** + * + * @type {string} + * @memberof AccessPrivateResponse + */ + frontendToken?: string; +} + +/** + * Check if a given object implements the AccessPrivateResponse interface. + */ +export function instanceOfAccessPrivateResponse(value: object): value is AccessPrivateResponse { + return true; +} + +export function AccessPrivateResponseFromJSON(json: any): AccessPrivateResponse { + return AccessPrivateResponseFromJSONTyped(json, false); +} + +export function AccessPrivateResponseFromJSONTyped(json: any, ignoreDiscriminator: boolean): AccessPrivateResponse { + if (json == null) { + return json; + } + return { + + 'frontendToken': json['frontendToken'] == null ? undefined : json['frontendToken'], + }; +} + +export function AccessPrivateResponseToJSON(value?: AccessPrivateResponse | null): any { + if (value == null) { + return value; + } + return { + + 'frontendToken': value['frontendToken'], + }; +} + diff --git a/agent/agentUi/src/api/models/ProtobufAny.ts b/agent/agentUi/src/api/models/ProtobufAny.ts new file mode 100644 index 00000000..20703e35 --- /dev/null +++ b/agent/agentUi/src/api/models/ProtobufAny.ts @@ -0,0 +1,63 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * agent/agentGrpc/agent.proto + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: version not set + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +import { mapValues } from '../runtime'; +/** + * + * @export + * @interface ProtobufAny + */ +export interface ProtobufAny { + [key: string]: object | any; + /** + * + * @type {string} + * @memberof ProtobufAny + */ + type?: string; +} + +/** + * Check if a given object implements the ProtobufAny interface. + */ +export function instanceOfProtobufAny(value: object): value is ProtobufAny { + return true; +} + +export function ProtobufAnyFromJSON(json: any): ProtobufAny { + return ProtobufAnyFromJSONTyped(json, false); +} + +export function ProtobufAnyFromJSONTyped(json: any, ignoreDiscriminator: boolean): ProtobufAny { + if (json == null) { + return json; + } + return { + + ...json, + 'type': json['@type'] == null ? undefined : json['@type'], + }; +} + +export function ProtobufAnyToJSON(value?: ProtobufAny | null): any { + if (value == null) { + return value; + } + return { + + ...value, + '@type': value['type'], + }; +} + diff --git a/agent/agentUi/src/api/models/RpcStatus.ts b/agent/agentUi/src/api/models/RpcStatus.ts new file mode 100644 index 00000000..f27d807e --- /dev/null +++ b/agent/agentUi/src/api/models/RpcStatus.ts @@ -0,0 +1,83 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * agent/agentGrpc/agent.proto + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: version not set + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +import { mapValues } from '../runtime'; +import type { ProtobufAny } from './ProtobufAny'; +import { + ProtobufAnyFromJSON, + ProtobufAnyFromJSONTyped, + ProtobufAnyToJSON, +} from './ProtobufAny'; + +/** + * + * @export + * @interface RpcStatus + */ +export interface RpcStatus { + /** + * + * @type {number} + * @memberof RpcStatus + */ + code?: number; + /** + * + * @type {string} + * @memberof RpcStatus + */ + message?: string; + /** + * + * @type {Array} + * @memberof RpcStatus + */ + details?: Array; +} + +/** + * Check if a given object implements the RpcStatus interface. + */ +export function instanceOfRpcStatus(value: object): value is RpcStatus { + return true; +} + +export function RpcStatusFromJSON(json: any): RpcStatus { + return RpcStatusFromJSONTyped(json, false); +} + +export function RpcStatusFromJSONTyped(json: any, ignoreDiscriminator: boolean): RpcStatus { + if (json == null) { + return json; + } + return { + + 'code': json['code'] == null ? undefined : json['code'], + 'message': json['message'] == null ? undefined : json['message'], + 'details': json['details'] == null ? undefined : ((json['details'] as Array).map(ProtobufAnyFromJSON)), + }; +} + +export function RpcStatusToJSON(value?: RpcStatus | null): any { + if (value == null) { + return value; + } + return { + + 'code': value['code'], + 'message': value['message'], + 'details': value['details'] == null ? undefined : ((value['details'] as Array).map(ProtobufAnyToJSON)), + }; +} + diff --git a/agent/agentUi/src/api/models/ShareDetail.ts b/agent/agentUi/src/api/models/ShareDetail.ts new file mode 100644 index 00000000..faf0b589 --- /dev/null +++ b/agent/agentUi/src/api/models/ShareDetail.ts @@ -0,0 +1,116 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * agent/agentGrpc/agent.proto + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: version not set + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +import { mapValues } from '../runtime'; +/** + * + * @export + * @interface ShareDetail + */ +export interface ShareDetail { + /** + * + * @type {string} + * @memberof ShareDetail + */ + token?: string; + /** + * + * @type {string} + * @memberof ShareDetail + */ + shareMode?: string; + /** + * + * @type {string} + * @memberof ShareDetail + */ + backendMode?: string; + /** + * + * @type {boolean} + * @memberof ShareDetail + */ + reserved?: boolean; + /** + * + * @type {Array} + * @memberof ShareDetail + */ + frontendEndpoint?: Array; + /** + * + * @type {string} + * @memberof ShareDetail + */ + backendEndpoint?: string; + /** + * + * @type {boolean} + * @memberof ShareDetail + */ + closed?: boolean; + /** + * + * @type {string} + * @memberof ShareDetail + */ + status?: string; +} + +/** + * Check if a given object implements the ShareDetail interface. + */ +export function instanceOfShareDetail(value: object): value is ShareDetail { + return true; +} + +export function ShareDetailFromJSON(json: any): ShareDetail { + return ShareDetailFromJSONTyped(json, false); +} + +export function ShareDetailFromJSONTyped(json: any, ignoreDiscriminator: boolean): ShareDetail { + if (json == null) { + return json; + } + return { + + 'token': json['token'] == null ? undefined : json['token'], + 'shareMode': json['shareMode'] == null ? undefined : json['shareMode'], + 'backendMode': json['backendMode'] == null ? undefined : json['backendMode'], + 'reserved': json['reserved'] == null ? undefined : json['reserved'], + 'frontendEndpoint': json['frontendEndpoint'] == null ? undefined : json['frontendEndpoint'], + 'backendEndpoint': json['backendEndpoint'] == null ? undefined : json['backendEndpoint'], + 'closed': json['closed'] == null ? undefined : json['closed'], + 'status': json['status'] == null ? undefined : json['status'], + }; +} + +export function ShareDetailToJSON(value?: ShareDetail | null): any { + if (value == null) { + return value; + } + return { + + 'token': value['token'], + 'shareMode': value['shareMode'], + 'backendMode': value['backendMode'], + 'reserved': value['reserved'], + 'frontendEndpoint': value['frontendEndpoint'], + 'backendEndpoint': value['backendEndpoint'], + 'closed': value['closed'], + 'status': value['status'], + }; +} + diff --git a/agent/agentUi/src/api/models/SharePrivateResponse.ts b/agent/agentUi/src/api/models/SharePrivateResponse.ts new file mode 100644 index 00000000..c9ea4109 --- /dev/null +++ b/agent/agentUi/src/api/models/SharePrivateResponse.ts @@ -0,0 +1,60 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * agent/agentGrpc/agent.proto + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: version not set + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +import { mapValues } from '../runtime'; +/** + * + * @export + * @interface SharePrivateResponse + */ +export interface SharePrivateResponse { + /** + * + * @type {string} + * @memberof SharePrivateResponse + */ + token?: string; +} + +/** + * Check if a given object implements the SharePrivateResponse interface. + */ +export function instanceOfSharePrivateResponse(value: object): value is SharePrivateResponse { + return true; +} + +export function SharePrivateResponseFromJSON(json: any): SharePrivateResponse { + return SharePrivateResponseFromJSONTyped(json, false); +} + +export function SharePrivateResponseFromJSONTyped(json: any, ignoreDiscriminator: boolean): SharePrivateResponse { + if (json == null) { + return json; + } + return { + + 'token': json['token'] == null ? undefined : json['token'], + }; +} + +export function SharePrivateResponseToJSON(value?: SharePrivateResponse | null): any { + if (value == null) { + return value; + } + return { + + 'token': value['token'], + }; +} + diff --git a/agent/agentUi/src/api/models/SharePublicResponse.ts b/agent/agentUi/src/api/models/SharePublicResponse.ts new file mode 100644 index 00000000..f1c0ae13 --- /dev/null +++ b/agent/agentUi/src/api/models/SharePublicResponse.ts @@ -0,0 +1,68 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * agent/agentGrpc/agent.proto + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: version not set + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +import { mapValues } from '../runtime'; +/** + * + * @export + * @interface SharePublicResponse + */ +export interface SharePublicResponse { + /** + * + * @type {string} + * @memberof SharePublicResponse + */ + token?: string; + /** + * + * @type {Array} + * @memberof SharePublicResponse + */ + frontendEndpoints?: Array; +} + +/** + * Check if a given object implements the SharePublicResponse interface. + */ +export function instanceOfSharePublicResponse(value: object): value is SharePublicResponse { + return true; +} + +export function SharePublicResponseFromJSON(json: any): SharePublicResponse { + return SharePublicResponseFromJSONTyped(json, false); +} + +export function SharePublicResponseFromJSONTyped(json: any, ignoreDiscriminator: boolean): SharePublicResponse { + if (json == null) { + return json; + } + return { + + 'token': json['token'] == null ? undefined : json['token'], + 'frontendEndpoints': json['frontendEndpoints'] == null ? undefined : json['frontendEndpoints'], + }; +} + +export function SharePublicResponseToJSON(value?: SharePublicResponse | null): any { + if (value == null) { + return value; + } + return { + + 'token': value['token'], + 'frontendEndpoints': value['frontendEndpoints'], + }; +} + diff --git a/agent/agentUi/src/api/models/ShareReservedResponse.ts b/agent/agentUi/src/api/models/ShareReservedResponse.ts new file mode 100644 index 00000000..6c77dea5 --- /dev/null +++ b/agent/agentUi/src/api/models/ShareReservedResponse.ts @@ -0,0 +1,92 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * agent/agentGrpc/agent.proto + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: version not set + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +import { mapValues } from '../runtime'; +/** + * + * @export + * @interface ShareReservedResponse + */ +export interface ShareReservedResponse { + /** + * + * @type {string} + * @memberof ShareReservedResponse + */ + token?: string; + /** + * + * @type {string} + * @memberof ShareReservedResponse + */ + backendMode?: string; + /** + * + * @type {string} + * @memberof ShareReservedResponse + */ + shareMode?: string; + /** + * + * @type {Array} + * @memberof ShareReservedResponse + */ + frontendEndpoints?: Array; + /** + * + * @type {string} + * @memberof ShareReservedResponse + */ + target?: string; +} + +/** + * Check if a given object implements the ShareReservedResponse interface. + */ +export function instanceOfShareReservedResponse(value: object): value is ShareReservedResponse { + return true; +} + +export function ShareReservedResponseFromJSON(json: any): ShareReservedResponse { + return ShareReservedResponseFromJSONTyped(json, false); +} + +export function ShareReservedResponseFromJSONTyped(json: any, ignoreDiscriminator: boolean): ShareReservedResponse { + if (json == null) { + return json; + } + return { + + 'token': json['token'] == null ? undefined : json['token'], + 'backendMode': json['backendMode'] == null ? undefined : json['backendMode'], + 'shareMode': json['shareMode'] == null ? undefined : json['shareMode'], + 'frontendEndpoints': json['frontendEndpoints'] == null ? undefined : json['frontendEndpoints'], + 'target': json['target'] == null ? undefined : json['target'], + }; +} + +export function ShareReservedResponseToJSON(value?: ShareReservedResponse | null): any { + if (value == null) { + return value; + } + return { + + 'token': value['token'], + 'backendMode': value['backendMode'], + 'shareMode': value['shareMode'], + 'frontendEndpoints': value['frontendEndpoints'], + 'target': value['target'], + }; +} + diff --git a/agent/agentUi/src/api/models/StatusResponse.ts b/agent/agentUi/src/api/models/StatusResponse.ts new file mode 100644 index 00000000..323c839b --- /dev/null +++ b/agent/agentUi/src/api/models/StatusResponse.ts @@ -0,0 +1,81 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * agent/agentGrpc/agent.proto + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: version not set + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +import { mapValues } from '../runtime'; +import type { AccessDetail } from './AccessDetail'; +import { + AccessDetailFromJSON, + AccessDetailFromJSONTyped, + AccessDetailToJSON, +} from './AccessDetail'; +import type { ShareDetail } from './ShareDetail'; +import { + ShareDetailFromJSON, + ShareDetailFromJSONTyped, + ShareDetailToJSON, +} from './ShareDetail'; + +/** + * + * @export + * @interface StatusResponse + */ +export interface StatusResponse { + /** + * + * @type {Array} + * @memberof StatusResponse + */ + accesses?: Array; + /** + * + * @type {Array} + * @memberof StatusResponse + */ + shares?: Array; +} + +/** + * Check if a given object implements the StatusResponse interface. + */ +export function instanceOfStatusResponse(value: object): value is StatusResponse { + return true; +} + +export function StatusResponseFromJSON(json: any): StatusResponse { + return StatusResponseFromJSONTyped(json, false); +} + +export function StatusResponseFromJSONTyped(json: any, ignoreDiscriminator: boolean): StatusResponse { + if (json == null) { + return json; + } + return { + + 'accesses': json['accesses'] == null ? undefined : ((json['accesses'] as Array).map(AccessDetailFromJSON)), + 'shares': json['shares'] == null ? undefined : ((json['shares'] as Array).map(ShareDetailFromJSON)), + }; +} + +export function StatusResponseToJSON(value?: StatusResponse | null): any { + if (value == null) { + return value; + } + return { + + 'accesses': value['accesses'] == null ? undefined : ((value['accesses'] as Array).map(AccessDetailToJSON)), + 'shares': value['shares'] == null ? undefined : ((value['shares'] as Array).map(ShareDetailToJSON)), + }; +} + diff --git a/agent/agentUi/src/api/models/VersionResponse.ts b/agent/agentUi/src/api/models/VersionResponse.ts new file mode 100644 index 00000000..0936ccb0 --- /dev/null +++ b/agent/agentUi/src/api/models/VersionResponse.ts @@ -0,0 +1,68 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * agent/agentGrpc/agent.proto + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: version not set + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +import { mapValues } from '../runtime'; +/** + * + * @export + * @interface VersionResponse + */ +export interface VersionResponse { + /** + * + * @type {string} + * @memberof VersionResponse + */ + v?: string; + /** + * + * @type {string} + * @memberof VersionResponse + */ + consoleEndpoint?: string; +} + +/** + * Check if a given object implements the VersionResponse interface. + */ +export function instanceOfVersionResponse(value: object): value is VersionResponse { + return true; +} + +export function VersionResponseFromJSON(json: any): VersionResponse { + return VersionResponseFromJSONTyped(json, false); +} + +export function VersionResponseFromJSONTyped(json: any, ignoreDiscriminator: boolean): VersionResponse { + if (json == null) { + return json; + } + return { + + 'v': json['v'] == null ? undefined : json['v'], + 'consoleEndpoint': json['consoleEndpoint'] == null ? undefined : json['consoleEndpoint'], + }; +} + +export function VersionResponseToJSON(value?: VersionResponse | null): any { + if (value == null) { + return value; + } + return { + + 'v': value['v'], + 'consoleEndpoint': value['consoleEndpoint'], + }; +} + diff --git a/agent/agentUi/src/api/models/index.ts b/agent/agentUi/src/api/models/index.ts new file mode 100644 index 00000000..ec048403 --- /dev/null +++ b/agent/agentUi/src/api/models/index.ts @@ -0,0 +1,12 @@ +/* tslint:disable */ +/* eslint-disable */ +export * from './AccessDetail'; +export * from './AccessPrivateResponse'; +export * from './ProtobufAny'; +export * from './RpcStatus'; +export * from './ShareDetail'; +export * from './SharePrivateResponse'; +export * from './SharePublicResponse'; +export * from './ShareReservedResponse'; +export * from './StatusResponse'; +export * from './VersionResponse'; diff --git a/agent/agentUi/src/api/runtime.ts b/agent/agentUi/src/api/runtime.ts new file mode 100644 index 00000000..cf9f8e01 --- /dev/null +++ b/agent/agentUi/src/api/runtime.ts @@ -0,0 +1,426 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * agent/agentGrpc/agent.proto + * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) + * + * The version of the OpenAPI document: version not set + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +export const BASE_PATH = "http://localhost".replace(/\/+$/, ""); + +export interface ConfigurationParameters { + basePath?: string; // override base path + fetchApi?: FetchAPI; // override for fetch implementation + middleware?: Middleware[]; // middleware to apply before/after fetch requests + queryParamsStringify?: (params: HTTPQuery) => string; // stringify function for query strings + username?: string; // parameter for basic security + password?: string; // parameter for basic security + apiKey?: string | Promise | ((name: string) => string | Promise); // parameter for apiKey security + accessToken?: string | Promise | ((name?: string, scopes?: string[]) => string | Promise); // parameter for oauth2 security + headers?: HTTPHeaders; //header params we want to use on every request + credentials?: RequestCredentials; //value for the credentials param we want to use on each request +} + +export class Configuration { + constructor(private configuration: ConfigurationParameters = {}) {} + + set config(configuration: Configuration) { + this.configuration = configuration; + } + + get basePath(): string { + return this.configuration.basePath != null ? this.configuration.basePath : BASE_PATH; + } + + get fetchApi(): FetchAPI | undefined { + return this.configuration.fetchApi; + } + + get middleware(): Middleware[] { + return this.configuration.middleware || []; + } + + get queryParamsStringify(): (params: HTTPQuery) => string { + return this.configuration.queryParamsStringify || querystring; + } + + get username(): string | undefined { + return this.configuration.username; + } + + get password(): string | undefined { + return this.configuration.password; + } + + get apiKey(): ((name: string) => string | Promise) | undefined { + const apiKey = this.configuration.apiKey; + if (apiKey) { + return typeof apiKey === 'function' ? apiKey : () => apiKey; + } + return undefined; + } + + get accessToken(): ((name?: string, scopes?: string[]) => string | Promise) | undefined { + const accessToken = this.configuration.accessToken; + if (accessToken) { + return typeof accessToken === 'function' ? accessToken : async () => accessToken; + } + return undefined; + } + + get headers(): HTTPHeaders | undefined { + return this.configuration.headers; + } + + get credentials(): RequestCredentials | undefined { + return this.configuration.credentials; + } +} + +export const DefaultConfig = new Configuration(); + +/** + * This is the base class for all generated API classes. + */ +export class BaseAPI { + + private static readonly jsonRegex = new RegExp('^(:?application\/json|[^;/ \t]+\/[^;/ \t]+[+]json)[ \t]*(:?;.*)?$', 'i'); + private middleware: Middleware[]; + + constructor(protected configuration = DefaultConfig) { + this.middleware = configuration.middleware; + } + + withMiddleware(this: T, ...middlewares: Middleware[]) { + const next = this.clone(); + next.middleware = next.middleware.concat(...middlewares); + return next; + } + + withPreMiddleware(this: T, ...preMiddlewares: Array) { + const middlewares = preMiddlewares.map((pre) => ({ pre })); + return this.withMiddleware(...middlewares); + } + + withPostMiddleware(this: T, ...postMiddlewares: Array) { + const middlewares = postMiddlewares.map((post) => ({ post })); + return this.withMiddleware(...middlewares); + } + + /** + * Check if the given MIME is a JSON MIME. + * JSON MIME examples: + * application/json + * application/json; charset=UTF8 + * APPLICATION/JSON + * application/vnd.company+json + * @param mime - MIME (Multipurpose Internet Mail Extensions) + * @return True if the given MIME is JSON, false otherwise. + */ + protected isJsonMime(mime: string | null | undefined): boolean { + if (!mime) { + return false; + } + return BaseAPI.jsonRegex.test(mime); + } + + protected async request(context: RequestOpts, initOverrides?: RequestInit | InitOverrideFunction): Promise { + const { url, init } = await this.createFetchParams(context, initOverrides); + const response = await this.fetchApi(url, init); + if (response && (response.status >= 200 && response.status < 300)) { + return response; + } + throw new ResponseError(response, 'Response returned an error code'); + } + + private async createFetchParams(context: RequestOpts, initOverrides?: RequestInit | InitOverrideFunction) { + let url = this.configuration.basePath + context.path; + if (context.query !== undefined && Object.keys(context.query).length !== 0) { + // only add the querystring to the URL if there are query parameters. + // this is done to avoid urls ending with a "?" character which buggy webservers + // do not handle correctly sometimes. + url += '?' + this.configuration.queryParamsStringify(context.query); + } + + const headers = Object.assign({}, this.configuration.headers, context.headers); + Object.keys(headers).forEach(key => headers[key] === undefined ? delete headers[key] : {}); + + const initOverrideFn = + typeof initOverrides === "function" + ? initOverrides + : async () => initOverrides; + + const initParams = { + method: context.method, + headers, + body: context.body, + credentials: this.configuration.credentials, + }; + + const overriddenInit: RequestInit = { + ...initParams, + ...(await initOverrideFn({ + init: initParams, + context, + })) + }; + + let body: any; + if (isFormData(overriddenInit.body) + || (overriddenInit.body instanceof URLSearchParams) + || isBlob(overriddenInit.body)) { + body = overriddenInit.body; + } else if (this.isJsonMime(headers['Content-Type'])) { + body = JSON.stringify(overriddenInit.body); + } else { + body = overriddenInit.body; + } + + const init: RequestInit = { + ...overriddenInit, + body + }; + + return { url, init }; + } + + private fetchApi = async (url: string, init: RequestInit) => { + let fetchParams = { url, init }; + for (const middleware of this.middleware) { + if (middleware.pre) { + fetchParams = await middleware.pre({ + fetch: this.fetchApi, + ...fetchParams, + }) || fetchParams; + } + } + let response: Response | undefined = undefined; + try { + response = await (this.configuration.fetchApi || fetch)(fetchParams.url, fetchParams.init); + } catch (e) { + for (const middleware of this.middleware) { + if (middleware.onError) { + response = await middleware.onError({ + fetch: this.fetchApi, + url: fetchParams.url, + init: fetchParams.init, + error: e, + response: response ? response.clone() : undefined, + }) || response; + } + } + if (response === undefined) { + if (e instanceof Error) { + throw new FetchError(e, 'The request failed and the interceptors did not return an alternative response'); + } else { + throw e; + } + } + } + for (const middleware of this.middleware) { + if (middleware.post) { + response = await middleware.post({ + fetch: this.fetchApi, + url: fetchParams.url, + init: fetchParams.init, + response: response.clone(), + }) || response; + } + } + return response; + } + + /** + * Create a shallow clone of `this` by constructing a new instance + * and then shallow cloning data members. + */ + private clone(this: T): T { + const constructor = this.constructor as any; + const next = new constructor(this.configuration); + next.middleware = this.middleware.slice(); + return next; + } +}; + +function isBlob(value: any): value is Blob { + return typeof Blob !== 'undefined' && value instanceof Blob; +} + +function isFormData(value: any): value is FormData { + return typeof FormData !== "undefined" && value instanceof FormData; +} + +export class ResponseError extends Error { + override name: "ResponseError" = "ResponseError"; + constructor(public response: Response, msg?: string) { + super(msg); + } +} + +export class FetchError extends Error { + override name: "FetchError" = "FetchError"; + constructor(public cause: Error, msg?: string) { + super(msg); + } +} + +export class RequiredError extends Error { + override name: "RequiredError" = "RequiredError"; + constructor(public field: string, msg?: string) { + super(msg); + } +} + +export const COLLECTION_FORMATS = { + csv: ",", + ssv: " ", + tsv: "\t", + pipes: "|", +}; + +export type FetchAPI = WindowOrWorkerGlobalScope['fetch']; + +export type Json = any; +export type HTTPMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'OPTIONS' | 'HEAD'; +export type HTTPHeaders = { [key: string]: string }; +export type HTTPQuery = { [key: string]: string | number | null | boolean | Array | Set | HTTPQuery }; +export type HTTPBody = Json | FormData | URLSearchParams; +export type HTTPRequestInit = { headers?: HTTPHeaders; method: HTTPMethod; credentials?: RequestCredentials; body?: HTTPBody }; +export type ModelPropertyNaming = 'camelCase' | 'snake_case' | 'PascalCase' | 'original'; + +export type InitOverrideFunction = (requestContext: { init: HTTPRequestInit, context: RequestOpts }) => Promise + +export interface FetchParams { + url: string; + init: RequestInit; +} + +export interface RequestOpts { + path: string; + method: HTTPMethod; + headers: HTTPHeaders; + query?: HTTPQuery; + body?: HTTPBody; +} + +export function querystring(params: HTTPQuery, prefix: string = ''): string { + return Object.keys(params) + .map(key => querystringSingleKey(key, params[key], prefix)) + .filter(part => part.length > 0) + .join('&'); +} + +function querystringSingleKey(key: string, value: string | number | null | undefined | boolean | Array | Set | HTTPQuery, keyPrefix: string = ''): string { + const fullKey = keyPrefix + (keyPrefix.length ? `[${key}]` : key); + if (value instanceof Array) { + const multiValue = value.map(singleValue => encodeURIComponent(String(singleValue))) + .join(`&${encodeURIComponent(fullKey)}=`); + return `${encodeURIComponent(fullKey)}=${multiValue}`; + } + if (value instanceof Set) { + const valueAsArray = Array.from(value); + return querystringSingleKey(key, valueAsArray, keyPrefix); + } + if (value instanceof Date) { + return `${encodeURIComponent(fullKey)}=${encodeURIComponent(value.toISOString())}`; + } + if (value instanceof Object) { + return querystring(value as HTTPQuery, fullKey); + } + return `${encodeURIComponent(fullKey)}=${encodeURIComponent(String(value))}`; +} + +export function mapValues(data: any, fn: (item: any) => any) { + return Object.keys(data).reduce( + (acc, key) => ({ ...acc, [key]: fn(data[key]) }), + {} + ); +} + +export function canConsumeForm(consumes: Consume[]): boolean { + for (const consume of consumes) { + if ('multipart/form-data' === consume.contentType) { + return true; + } + } + return false; +} + +export interface Consume { + contentType: string; +} + +export interface RequestContext { + fetch: FetchAPI; + url: string; + init: RequestInit; +} + +export interface ResponseContext { + fetch: FetchAPI; + url: string; + init: RequestInit; + response: Response; +} + +export interface ErrorContext { + fetch: FetchAPI; + url: string; + init: RequestInit; + error: unknown; + response?: Response; +} + +export interface Middleware { + pre?(context: RequestContext): Promise; + post?(context: ResponseContext): Promise; + onError?(context: ErrorContext): Promise; +} + +export interface ApiResponse { + raw: Response; + value(): Promise; +} + +export interface ResponseTransformer { + (json: any): T; +} + +export class JSONApiResponse { + constructor(public raw: Response, private transformer: ResponseTransformer = (jsonValue: any) => jsonValue) {} + + async value(): Promise { + return this.transformer(await this.raw.json()); + } +} + +export class VoidApiResponse { + constructor(public raw: Response) {} + + async value(): Promise { + return undefined; + } +} + +export class BlobApiResponse { + constructor(public raw: Response) {} + + async value(): Promise { + return await this.raw.blob(); + }; +} + +export class TextApiResponse { + constructor(public raw: Response) {} + + async value(): Promise { + return await this.raw.text(); + }; +} diff --git a/agent/agentUi/src/assets/zrok-1.0.0-rocket-green.svg b/agent/agentUi/src/assets/zrok-1.0.0-rocket-green.svg new file mode 100644 index 00000000..b8596ca7 --- /dev/null +++ b/agent/agentUi/src/assets/zrok-1.0.0-rocket-green.svg @@ -0,0 +1,53 @@ + + + + diff --git a/agent/agentUi/src/index.css b/agent/agentUi/src/index.css new file mode 100644 index 00000000..dfd33778 --- /dev/null +++ b/agent/agentUi/src/index.css @@ -0,0 +1,55 @@ +body { + margin: 0; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + padding-bottom: 15px; + min-width: 320px; + min-height: 100vh; +} + +code { + font-family: 'JetBrains Mono', sans-serif; +} + +a { + font-weight: 500; + color: #241775; + text-decoration: inherit; +} +a:hover { + color: #9bf316; +} + +h1 { + font-size: 3.2em; + line-height: 1.1; +} + +button { + border-radius: 8px; + border: 1px solid transparent; + padding: 0.6em 1.2em; + font-size: 1em; + font-weight: 500; + font-family: inherit; + background-color: #1a1a1a; + cursor: pointer; + transition: border-color 0.25s; +} +button:hover { + border-color: #646cff; +} +button:focus, +button:focus-visible { + outline: 4px auto -webkit-focus-ring-color; +} + +#root { + max-width: 1280px; + margin: 0 auto; + padding: 2rem; +} + +#footer { + text-align: center; +} \ No newline at end of file diff --git a/agent/agentUi/src/main.tsx b/agent/agentUi/src/main.tsx new file mode 100644 index 00000000..075ae12d --- /dev/null +++ b/agent/agentUi/src/main.tsx @@ -0,0 +1,14 @@ +import "./index.css"; +import {StrictMode} from "react"; +import {createRoot} from "react-dom/client"; +import {ThemeProvider} from "@mui/material"; +import {theme} from "./model/theme.ts"; +import AgentUi from "./AgentUi.tsx"; + +createRoot(document.getElementById('root')!).render( + + + + + +); \ No newline at end of file diff --git a/agent/agentUi/src/model/api.ts b/agent/agentUi/src/model/api.ts new file mode 100644 index 00000000..f7f860f5 --- /dev/null +++ b/agent/agentUi/src/model/api.ts @@ -0,0 +1,5 @@ +import {AgentApi, Configuration} from "../api"; + +export const GetAgentApi = () => { + return new AgentApi(new Configuration({basePath: window.location.origin})); +} diff --git a/agent/agentUi/src/model/overview.ts b/agent/agentUi/src/model/overview.ts new file mode 100644 index 00000000..b7b97142 --- /dev/null +++ b/agent/agentUi/src/model/overview.ts @@ -0,0 +1,36 @@ +import {AccessDetail, ShareDetail, StatusResponse} from "../api"; + +export class AgentObject { + type: string; + id: string; + v: (ShareDetail|AccessDetail); +} + +export function buildOverview(status: StatusResponse): Array { + let out = new Array(); + if(status) { + if(status.accesses) { + status.accesses.forEach(acc => { + let accObj = new AgentObject(); + accObj.type = "access"; + accObj.id = acc.frontendToken!; + accObj.v = acc; + out.push(accObj); + }); + } + if(status.shares) { + status.shares.forEach(shr => { + let shrObj = new AgentObject(); + shrObj.type = "share"; + shrObj.id = shr.token!; + shrObj.v = shr; + out.push(shrObj); + }); + } + out.sort((a, b) => { + if(a.id < b.id) return -1; + if(a.id > b.id) return 1; + }); + } + return out; +} \ No newline at end of file diff --git a/agent/agentUi/src/model/theme.ts b/agent/agentUi/src/model/theme.ts new file mode 100644 index 00000000..7d10bc70 --- /dev/null +++ b/agent/agentUi/src/model/theme.ts @@ -0,0 +1,47 @@ +import {createTheme} from "@mui/material"; + +const componentOptions = { + MuiCard: { + styleOverrides: { + root: ({theme}) => theme.unstable_sx({ + mt: 5, + p: 1, + borderRadius: 3, + }), + } + }, + MuiAppBar: { + styleOverrides: { + root : ({theme}) => theme.unstable_sx({ + borderRadius: 3, + }), + } + } +} + +export const theme = createTheme({ + components: componentOptions, + palette: { + mode: 'light', + primary: { + main: '#241775', + }, + secondary: { + main: '#9bf316', + }, + }, + typography: { + fontFamily: 'Poppins', + }, +}) + +export const modalStyle = { + position: 'absolute', + top: '25%', + left: '50%', + transform: 'translate(-50%, -50%)', + width: 600, + bgcolor: 'background.paper', + boxShadow: 24, + p: 4, +}; \ No newline at end of file diff --git a/agent/agentUi/src/vite-env.d.ts b/agent/agentUi/src/vite-env.d.ts new file mode 100644 index 00000000..11f02fe2 --- /dev/null +++ b/agent/agentUi/src/vite-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/agent/agentUi/tsconfig.app.json b/agent/agentUi/tsconfig.app.json new file mode 100644 index 00000000..f867de0d --- /dev/null +++ b/agent/agentUi/tsconfig.app.json @@ -0,0 +1,26 @@ +{ + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", + "target": "ES2020", + "useDefineForClassFields": true, + "lib": ["ES2020", "DOM", "DOM.Iterable"], + "module": "ESNext", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "Bundler", + "allowImportingTsExtensions": true, + "isolatedModules": true, + "moduleDetection": "force", + "noEmit": true, + "jsx": "react-jsx", + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true + }, + "include": ["src"] +} diff --git a/agent/agentUi/tsconfig.json b/agent/agentUi/tsconfig.json new file mode 100644 index 00000000..1ffef600 --- /dev/null +++ b/agent/agentUi/tsconfig.json @@ -0,0 +1,7 @@ +{ + "files": [], + "references": [ + { "path": "./tsconfig.app.json" }, + { "path": "./tsconfig.node.json" } + ] +} diff --git a/agent/agentUi/tsconfig.node.json b/agent/agentUi/tsconfig.node.json new file mode 100644 index 00000000..abcd7f0d --- /dev/null +++ b/agent/agentUi/tsconfig.node.json @@ -0,0 +1,24 @@ +{ + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", + "target": "ES2022", + "lib": ["ES2023"], + "module": "ESNext", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "Bundler", + "allowImportingTsExtensions": true, + "isolatedModules": true, + "moduleDetection": "force", + "noEmit": true, + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true + }, + "include": ["vite.config.ts"] +} diff --git a/agent/agentUi/vite.config.ts b/agent/agentUi/vite.config.ts new file mode 100644 index 00000000..f20a1e39 --- /dev/null +++ b/agent/agentUi/vite.config.ts @@ -0,0 +1,15 @@ +import { defineConfig } from 'vite' +import react from '@vitejs/plugin-react' + +// https://vite.dev/config/ +export default defineConfig({ + plugins: [react()], + server: { + proxy: { + '/v1': { + target: 'http://localhost:8888', + changeOrigin: true, + } + } + } +}) diff --git a/agent/config.go b/agent/config.go new file mode 100644 index 00000000..e44e37a8 --- /dev/null +++ b/agent/config.go @@ -0,0 +1,15 @@ +package agent + +type AgentConfig struct { + ConsoleAddress string + ConsoleStartPort uint16 + ConsoleEndPort uint16 +} + +func DefaultConfig() *AgentConfig { + return &AgentConfig{ + ConsoleAddress: "127.0.0.1", + ConsoleStartPort: 8080, + ConsoleEndPort: 8181, + } +} diff --git a/agent/proctree/impl_posix.go b/agent/proctree/impl_posix.go new file mode 100644 index 00000000..aa8596c5 --- /dev/null +++ b/agent/proctree/impl_posix.go @@ -0,0 +1,59 @@ +//go:build !windows + +package proctree + +import ( + "os/exec" + "sync" +) + +func Init(_ string) error { + return nil +} + +func StartChild(tail TailFunction, args ...string) (*Child, error) { + cmd := exec.Command(args[0], args[1:]...) + + cld := &Child{ + TailFunction: tail, + cmd: cmd, + outStream: make(chan []byte), + errStream: make(chan []byte), + wg: new(sync.WaitGroup), + } + + stdout, err := cmd.StdoutPipe() + if err != nil { + return nil, err + } + stderr, err := cmd.StderrPipe() + if err != nil { + return nil, err + } + + if err := cmd.Start(); err != nil { + return nil, err + } + + cld.wg.Add(3) + go reader(stdout, cld.outStream, cld.wg) + go reader(stderr, cld.errStream, cld.wg) + go cld.combiner(cld.wg) + + return cld, nil +} + +func WaitChild(c *Child) error { + c.wg.Wait() + if err := c.cmd.Wait(); err != nil { + return err + } + return nil +} + +func StopChild(c *Child) error { + if err := c.cmd.Process.Kill(); err != nil { + return err + } + return nil +} diff --git a/agent/proctree/impl_windows.go b/agent/proctree/impl_windows.go new file mode 100755 index 00000000..6a446fe8 --- /dev/null +++ b/agent/proctree/impl_windows.go @@ -0,0 +1,79 @@ +//go:build windows + +package proctree + +import ( + "github.com/kolesnikovae/go-winjob" + "golang.org/x/sys/windows" + "os/exec" + "sync" +) + +var job *winjob.JobObject + +func Init(name string) error { + var err error + if job == nil { + job, err = winjob.Create(name, winjob.LimitKillOnJobClose, winjob.LimitBreakawayOK) + if err != nil { + return err + } + } + return nil +} + +func StartChild(tail TailFunction, args ...string) (*Child, error) { + cmd := exec.Command(args[0], args[1:]...) + cmd.SysProcAttr = &windows.SysProcAttr{CreationFlags: windows.CREATE_SUSPENDED} + + cld := &Child{ + TailFunction: tail, + cmd: cmd, + outStream: make(chan []byte), + errStream: make(chan []byte), + wg: new(sync.WaitGroup), + } + + stdout, err := cmd.StdoutPipe() + if err != nil { + return nil, err + } + stderr, err := cmd.StderrPipe() + if err != nil { + return nil, err + } + + if err := cmd.Start(); err != nil { + return nil, err + } + + if err := job.Assign(cmd.Process); err != nil { + return nil, err + } + + if err := winjob.ResumeProcess(cmd.Process.Pid); err != nil { + return nil, err + } + + cld.wg.Add(3) + go reader(stdout, cld.outStream, cld.wg) + go reader(stderr, cld.errStream, cld.wg) + go cld.combiner(cld.wg) + + return cld, nil +} + +func WaitChild(c *Child) error { + c.wg.Wait() + if err := c.cmd.Wait(); err != nil { + return err + } + return nil +} + +func StopChild(c *Child) error { + if err := c.cmd.Process.Kill(); err != nil { + return err + } + return nil +} diff --git a/agent/proctree/proctree.go b/agent/proctree/proctree.go new file mode 100755 index 00000000..506435b0 --- /dev/null +++ b/agent/proctree/proctree.go @@ -0,0 +1,67 @@ +package proctree + +import ( + "fmt" + _ "github.com/kolesnikovae/go-winjob" + "io" + "os/exec" + "sync" +) + +type Child struct { + TailFunction TailFunction + cmd *exec.Cmd + outStream chan []byte + errStream chan []byte + wg *sync.WaitGroup +} + +type TailFunction func(data []byte) + +func (c *Child) combiner(wg *sync.WaitGroup) { + defer wg.Done() + + outDone := false + errDone := false + for { + select { + case data := <-c.outStream: + if data != nil { + if c.TailFunction != nil { + c.TailFunction(data) + } + } else { + outDone = true + } + case data := <-c.errStream: + if data != nil { + if c.TailFunction != nil { + c.TailFunction(data) + } + } else { + errDone = true + } + } + if outDone && errDone { + return + } + } +} + +func reader(r io.ReadCloser, o chan []byte, wg *sync.WaitGroup) { + defer close(o) + defer wg.Done() + + buf := make([]byte, 64*1024) + for { + n, err := r.Read(buf) + if err != nil { + if err == io.EOF { + return + } + fmt.Printf("error reading: %v", err) + return + } + o <- buf[:n] + } +} diff --git a/agent/releaseAccess.go b/agent/releaseAccess.go new file mode 100644 index 00000000..86e2f8d2 --- /dev/null +++ b/agent/releaseAccess.go @@ -0,0 +1,19 @@ +package agent + +import ( + "context" + "github.com/openziti/zrok/agent/agentGrpc" + "github.com/pkg/errors" + "github.com/sirupsen/logrus" +) + +func (i *agentGrpcImpl) ReleaseAccess(_ context.Context, req *agentGrpc.ReleaseAccessRequest) (*agentGrpc.ReleaseAccessResponse, error) { + if acc, found := i.agent.accesses[req.FrontendToken]; found { + i.agent.rmAccess <- acc + logrus.Infof("released access '%v'", acc.frontendToken) + + } else { + return nil, errors.Errorf("agent has no access with frontend token '%v'", req.FrontendToken) + } + return nil, nil +} diff --git a/agent/releaseShare.go b/agent/releaseShare.go new file mode 100755 index 00000000..0759e1c5 --- /dev/null +++ b/agent/releaseShare.go @@ -0,0 +1,19 @@ +package agent + +import ( + "context" + "github.com/openziti/zrok/agent/agentGrpc" + "github.com/pkg/errors" + "github.com/sirupsen/logrus" +) + +func (i *agentGrpcImpl) ReleaseShare(_ context.Context, req *agentGrpc.ReleaseShareRequest) (*agentGrpc.ReleaseShareResponse, error) { + if shr, found := i.agent.shares[req.Token]; found { + i.agent.rmShare <- shr + logrus.Infof("released share '%v'", shr.token) + + } else { + return nil, errors.Errorf("agent has no share with token '%v'", req.Token) + } + return nil, nil +} diff --git a/agent/share.go b/agent/share.go new file mode 100644 index 00000000..d90ad0fb --- /dev/null +++ b/agent/share.go @@ -0,0 +1,83 @@ +package agent + +import ( + "errors" + "github.com/michaelquigley/pfxlog" + "github.com/openziti/zrok/agent/proctree" + "github.com/openziti/zrok/cmd/zrok/subordinate" + "github.com/openziti/zrok/sdk/golang/sdk" + "time" +) + +type share struct { + token string + frontendEndpoints []string + target string + basicAuth []string + frontendSelection []string + shareMode sdk.ShareMode + backendMode sdk.BackendMode + reserved bool + insecure bool + oauthProvider string + oauthEmailAddressPatterns []string + oauthCheckInterval time.Duration + closed bool + accessGrants []string + + process *proctree.Child + sub *subordinate.MessageHandler + + agent *Agent +} + +func (s *share) monitor() { + if err := proctree.WaitChild(s.process); err != nil { + pfxlog.ChannelLogger(s.token).Error(err) + } + s.agent.rmShare <- s +} + +func (s *share) bootHandler(msgType string, msg subordinate.Message) error { + switch msgType { + case subordinate.BootMessage: + if v, found := msg["token"]; found { + if str, ok := v.(string); ok { + s.token = str + } + } + if v, found := msg["backend_mode"]; found { + if str, ok := v.(string); ok { + s.backendMode = sdk.BackendMode(str) + } + } + if v, found := msg["share_mode"]; found { + if str, ok := v.(string); ok { + s.shareMode = sdk.ShareMode(str) + } + } + if v, found := msg["frontend_endpoints"]; found { + if vArr, ok := v.([]interface{}); ok { + for _, v := range vArr { + if str, ok := v.(string); ok { + s.frontendEndpoints = append(s.frontendEndpoints, str) + } + } + } + } + if v, found := msg["target"]; found { + if str, ok := v.(string); ok { + s.target = str + } + } + + case subordinate.ErrorMessage: + if v, found := msg[subordinate.ErrorMessage]; found { + if str, ok := v.(string); ok { + return errors.New(str) + } + } + } + + return nil +} diff --git a/agent/sharePrivate.go b/agent/sharePrivate.go new file mode 100644 index 00000000..350ff5aa --- /dev/null +++ b/agent/sharePrivate.go @@ -0,0 +1,82 @@ +package agent + +import ( + "context" + "errors" + "fmt" + "github.com/openziti/zrok/agent/agentGrpc" + "github.com/openziti/zrok/agent/proctree" + "github.com/openziti/zrok/cmd/zrok/subordinate" + "github.com/openziti/zrok/environment" + "github.com/openziti/zrok/sdk/golang/sdk" + "github.com/sirupsen/logrus" + "os" +) + +func (i *agentGrpcImpl) SharePrivate(_ context.Context, req *agentGrpc.SharePrivateRequest) (*agentGrpc.SharePrivateResponse, error) { + root, err := environment.LoadRoot() + if err != nil { + return nil, err + } + + if !root.IsEnabled() { + return nil, errors.New("unable to load environment; did you 'zrok enable'?") + } + + shrCmd := []string{os.Args[0], "share", "private", "--subordinate", "-b", req.BackendMode} + shr := &share{ + shareMode: sdk.PrivateShareMode, + backendMode: sdk.BackendMode(req.BackendMode), + sub: subordinate.NewMessageHandler(), + agent: i.agent, + } + shr.sub.MessageHandler = func(msg subordinate.Message) { + logrus.Info(msg) + } + var bootErr error + shr.sub.BootHandler = func(msgType string, msg subordinate.Message) { + bootErr = shr.bootHandler(msgType, msg) + } + shr.sub.MalformedHandler = func(msg subordinate.Message) { + logrus.Error(msg) + } + + if req.Insecure { + shrCmd = append(shrCmd, "--insecure") + } + shr.insecure = req.Insecure + + if req.Closed { + shrCmd = append(shrCmd, "--closed") + } + shr.closed = req.Closed + + for _, grant := range req.AccessGrants { + shrCmd = append(shrCmd, "--access-grant", grant) + } + shr.accessGrants = req.AccessGrants + + shrCmd = append(shrCmd, req.Target) + shr.target = req.Target + + logrus.Infof("executing '%v'", shrCmd) + + shr.process, err = proctree.StartChild(shr.sub.Tail, shrCmd...) + if err != nil { + return nil, err + } + + <-shr.sub.BootComplete + + if bootErr == nil { + go shr.monitor() + i.agent.addShare <- shr + return &agentGrpc.SharePrivateResponse{Token: shr.token}, nil + + } else { + if err := proctree.WaitChild(shr.process); err != nil { + logrus.Errorf("error joining: %v", err) + } + return nil, fmt.Errorf("unable to start share: %v", bootErr) + } +} diff --git a/agent/sharePublic.go b/agent/sharePublic.go new file mode 100644 index 00000000..fb584eda --- /dev/null +++ b/agent/sharePublic.go @@ -0,0 +1,109 @@ +package agent + +import ( + "context" + "errors" + "fmt" + "github.com/openziti/zrok/agent/agentGrpc" + "github.com/openziti/zrok/agent/proctree" + "github.com/openziti/zrok/cmd/zrok/subordinate" + "github.com/openziti/zrok/environment" + "github.com/openziti/zrok/sdk/golang/sdk" + "github.com/sirupsen/logrus" + "os" +) + +func (i *agentGrpcImpl) SharePublic(_ context.Context, req *agentGrpc.SharePublicRequest) (*agentGrpc.SharePublicResponse, error) { + root, err := environment.LoadRoot() + if err != nil { + return nil, err + } + + if !root.IsEnabled() { + return nil, errors.New("unable to load environment; did you 'zrok enable'?") + } + + shrCmd := []string{os.Args[0], "share", "public", "--subordinate", "-b", req.BackendMode} + shr := &share{ + shareMode: sdk.PublicShareMode, + backendMode: sdk.BackendMode(req.BackendMode), + sub: subordinate.NewMessageHandler(), + agent: i.agent, + } + shr.sub.MessageHandler = func(msg subordinate.Message) { + logrus.Info(msg) + } + var bootErr error + shr.sub.BootHandler = func(msgType string, msg subordinate.Message) { + bootErr = shr.bootHandler(msgType, msg) + } + shr.sub.MalformedHandler = func(msg subordinate.Message) { + logrus.Error(msg) + } + + for _, basicAuth := range req.BasicAuth { + shrCmd = append(shrCmd, "--basic-auth", basicAuth) + } + shr.basicAuth = req.BasicAuth + + for _, frontendSelection := range req.FrontendSelection { + shrCmd = append(shrCmd, "--frontend", frontendSelection) + } + shr.frontendSelection = req.FrontendSelection + + if req.Insecure { + shrCmd = append(shrCmd, "--insecure") + } + shr.insecure = req.Insecure + + if req.OauthProvider != "" { + shrCmd = append(shrCmd, "--oauth-provider", req.OauthProvider) + } + shr.oauthProvider = req.OauthProvider + + for _, pattern := range req.OauthEmailAddressPatterns { + shrCmd = append(shrCmd, "--oauth-email-address-patterns", pattern) + } + shr.oauthEmailAddressPatterns = req.OauthEmailAddressPatterns + + if req.OauthCheckInterval != "" { + shrCmd = append(shrCmd, "--oauth-check-interval", req.OauthCheckInterval) + } + + if req.Closed { + shrCmd = append(shrCmd, "--closed") + } + shr.closed = req.Closed + + for _, grant := range req.AccessGrants { + shrCmd = append(shrCmd, "--access-grant", grant) + } + shr.accessGrants = req.AccessGrants + + shrCmd = append(shrCmd, req.Target) + shr.target = req.Target + + logrus.Infof("executing '%v'", shrCmd) + + shr.process, err = proctree.StartChild(shr.sub.Tail, shrCmd...) + if err != nil { + return nil, err + } + + <-shr.sub.BootComplete + + if bootErr == nil { + go shr.monitor() + i.agent.addShare <- shr + return &agentGrpc.SharePublicResponse{ + Token: shr.token, + FrontendEndpoints: shr.frontendEndpoints, + }, nil + + } else { + if err := proctree.WaitChild(shr.process); err != nil { + logrus.Errorf("error joining: %v", err) + } + return nil, fmt.Errorf("unable to start share: %v", bootErr) + } +} diff --git a/agent/shareReserved.go b/agent/shareReserved.go new file mode 100644 index 00000000..cfa5eebc --- /dev/null +++ b/agent/shareReserved.go @@ -0,0 +1,78 @@ +package agent + +import ( + "context" + "errors" + "fmt" + "github.com/openziti/zrok/agent/agentGrpc" + "github.com/openziti/zrok/agent/proctree" + "github.com/openziti/zrok/cmd/zrok/subordinate" + "github.com/openziti/zrok/environment" + "github.com/sirupsen/logrus" + "os" +) + +func (i *agentGrpcImpl) ShareReserved(_ context.Context, req *agentGrpc.ShareReservedRequest) (*agentGrpc.ShareReservedResponse, error) { + root, err := environment.LoadRoot() + if err != nil { + return nil, err + } + + if !root.IsEnabled() { + return nil, errors.New("unable to load environment; did you 'zrok enable'?") + } + + shrCmd := []string{os.Args[0], "share", "reserved", "--subordinate"} + shr := &share{ + reserved: true, + sub: subordinate.NewMessageHandler(), + agent: i.agent, + } + shr.sub.MessageHandler = func(msg subordinate.Message) { + logrus.Info(msg) + } + var bootErr error + shr.sub.BootHandler = func(msgType string, msg subordinate.Message) { + bootErr = shr.bootHandler(msgType, msg) + } + shr.sub.MalformedHandler = func(msg subordinate.Message) { + logrus.Error(msg) + } + + if req.OverrideEndpoint != "" { + shrCmd = append(shrCmd, "--override-endpoint", req.OverrideEndpoint) + } + + if req.Insecure { + shrCmd = append(shrCmd, "--insecure") + } + shr.insecure = req.Insecure + + shrCmd = append(shrCmd, req.Token) + shr.token = req.Token + + shr.process, err = proctree.StartChild(shr.sub.Tail, shrCmd...) + if err != nil { + return nil, err + } + + <-shr.sub.BootComplete + + if bootErr == nil { + go shr.monitor() + i.agent.addShare <- shr + return &agentGrpc.ShareReservedResponse{ + Token: shr.token, + BackendMode: string(shr.backendMode), + ShareMode: string(shr.shareMode), + FrontendEndpoints: shr.frontendEndpoints, + Target: shr.target, + }, nil + + } else { + if err := proctree.WaitChild(shr.process); err != nil { + logrus.Errorf("error joining: %v", err) + } + return nil, fmt.Errorf("unable to start share: %v", bootErr) + } +} diff --git a/agent/status.go b/agent/status.go new file mode 100644 index 00000000..f3dbda59 --- /dev/null +++ b/agent/status.go @@ -0,0 +1,40 @@ +package agent + +import ( + "context" + "github.com/openziti/zrok/agent/agentGrpc" + "sort" +) + +func (i *agentGrpcImpl) Status(_ context.Context, _ *agentGrpc.StatusRequest) (*agentGrpc.StatusResponse, error) { + var accesses []*agentGrpc.AccessDetail + for feToken, acc := range i.agent.accesses { + accesses = append(accesses, &agentGrpc.AccessDetail{ + FrontendToken: feToken, + Token: acc.token, + BindAddress: acc.bindAddress, + ResponseHeaders: acc.responseHeaders, + }) + } + sort.Slice(accesses, func(i, j int) bool { + return accesses[i].FrontendToken < accesses[j].FrontendToken + }) + + var shares []*agentGrpc.ShareDetail + for token, shr := range i.agent.shares { + shares = append(shares, &agentGrpc.ShareDetail{ + Token: token, + ShareMode: string(shr.shareMode), + BackendMode: string(shr.backendMode), + Reserved: shr.reserved, + FrontendEndpoint: shr.frontendEndpoints, + BackendEndpoint: shr.target, + Closed: shr.closed, + }) + } + sort.Slice(shares, func(i, j int) bool { + return shares[i].Token < shares[j].Token + }) + + return &agentGrpc.StatusResponse{Accesses: accesses, Shares: shares}, nil +} diff --git a/agent/version.go b/agent/version.go new file mode 100644 index 00000000..5633b34d --- /dev/null +++ b/agent/version.go @@ -0,0 +1,17 @@ +package agent + +import ( + "context" + "github.com/openziti/zrok/agent/agentGrpc" + "github.com/openziti/zrok/build" + "github.com/sirupsen/logrus" +) + +func (i *agentGrpcImpl) Version(_ context.Context, _ *agentGrpc.VersionRequest) (*agentGrpc.VersionResponse, error) { + v := build.String() + logrus.Debugf("responding to version inquiry with '%v'", v) + return &agentGrpc.VersionResponse{ + V: v, + ConsoleEndpoint: i.agent.httpEndpoint, + }, nil +} diff --git a/bin/generate_pb.sh b/bin/generate_pb.sh new file mode 100755 index 00000000..9d867950 --- /dev/null +++ b/bin/generate_pb.sh @@ -0,0 +1,14 @@ +#!/bin/sh + +go install \ + github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway \ + github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2 \ + google.golang.org/protobuf/cmd/protoc-gen-go \ + google.golang.org/grpc/cmd/protoc-gen-go-grpc + +protoc --go_out=. --go_opt=paths=source_relative \ + --go-grpc_out=. --go-grpc_opt=paths=source_relative \ + --grpc-gateway_out=. --grpc-gateway_opt=paths=source_relative \ + --openapiv2_out=. \ + agent/agentGrpc/agent.proto + diff --git a/bin/generate_rest.sh b/bin/generate_rest.sh index 684131d0..ab9523c8 100755 --- a/bin/generate_rest.sh +++ b/bin/generate_rest.sh @@ -7,11 +7,6 @@ command -v swagger >/dev/null 2>&1 || { exit 1 } -command -v openapi >/dev/null 2>&1 || { - echo >&2 "command 'openapi' not installed. see: https://www.npmjs.com/package/openapi-client for installation" - exit 1 -} - command -v swagger-codegen 2>&1 || { echo >&2 "command 'swagger-codegen' not installed. see: https://github.com/swagger-api/swagger-codegen for installation" exit 1 @@ -42,13 +37,16 @@ swagger generate server -P rest_model_zrok.Principal -f "$zrokSpec" -s rest_serv echo "...generating zrok client" swagger generate client -P rest_model_zrok.Principal -f "$zrokSpec" -c rest_client_zrok -t "$zrokDir" -m "rest_model_zrok" -echo "...generating js client" -openapi -s specs/zrok.yml -o ui/src/api -l js +echo "...generating api console ts client" +openapi-generator-cli generate -i specs/zrok.yml -o ui/src/api -g typescript-fetch -echo "...generating ts client" +echo "...generating agent console ts client" +openapi-generator-cli generate -i agent/agentGrpc/agent.swagger.json -o agent/agentUi/src/api -g typescript-fetch + +echo "...generating nodejs sdk ts client" openapi-generator-cli generate -i specs/zrok.yml -o sdk/nodejs/sdk/src/zrok/api -g typescript-node -echo "...generating python client" +echo "...generating python sdk client" swagger-codegen generate -i specs/zrok.yml -o sdk/python/sdk/zrok -c $pythonConfig -l python -git checkout rest_server_zrok/configure_zrok.go +git checkout rest_server_zrok/configure_zrok.go \ No newline at end of file diff --git a/build/metadata.go b/build/metadata.go index e57f1ddd..0de2ced0 100644 --- a/build/metadata.go +++ b/build/metadata.go @@ -5,7 +5,7 @@ import "fmt" var Version string var Hash string -const Series = "v0.4" +const Series = "v1.0" func String() string { if Version != "" { diff --git a/cmd/zrok/accessPrivate.go b/cmd/zrok/accessPrivate.go index 1bb41be1..249e0918 100644 --- a/cmd/zrok/accessPrivate.go +++ b/cmd/zrok/accessPrivate.go @@ -1,19 +1,27 @@ package main import ( + "context" + "encoding/json" + "errors" + "fmt" tea "github.com/charmbracelet/bubbletea" "github.com/go-openapi/runtime" httptransport "github.com/go-openapi/runtime/client" + "github.com/openziti/zrok/agent/agentClient" + "github.com/openziti/zrok/agent/agentGrpc" + "github.com/openziti/zrok/cmd/zrok/subordinate" "github.com/openziti/zrok/endpoints" "github.com/openziti/zrok/endpoints/proxy" "github.com/openziti/zrok/endpoints/tcpTunnel" "github.com/openziti/zrok/endpoints/udpTunnel" "github.com/openziti/zrok/endpoints/vpn" "github.com/openziti/zrok/environment" + "github.com/openziti/zrok/environment/env_core" "github.com/openziti/zrok/rest_client_zrok" "github.com/openziti/zrok/rest_client_zrok/share" - "github.com/openziti/zrok/rest_model_zrok" "github.com/openziti/zrok/tui" + "github.com/openziti/zrok/util" "github.com/sirupsen/logrus" "github.com/spf13/cobra" "net/url" @@ -29,7 +37,14 @@ func init() { type accessPrivateCommand struct { bindAddress string + autoMode bool + autoAddress string + autoStartPort uint16 + autoEndPort uint16 headless bool + subordinate bool + forceLocal bool + forceAgent bool responseHeaders []string cmd *cobra.Command } @@ -41,47 +56,98 @@ func newAccessPrivateCommand() *accessPrivateCommand { Args: cobra.ExactArgs(1), } command := &accessPrivateCommand{cmd: cmd} - cmd.Flags().BoolVar(&command.headless, "headless", false, "Disable TUI and run headless") - cmd.Flags().StringVarP(&command.bindAddress, "bind", "b", "127.0.0.1:9191", "The address to bind the private frontend") + headless := false + if root, err := environment.LoadRoot(); err == nil { + headless, _ = root.Headless() + } + cmd.Flags().BoolVar(&command.headless, "headless", headless, "Disable TUI and run headless") + cmd.Flags().BoolVar(&command.subordinate, "subordinate", false, "Enable subordinate mode") + cmd.MarkFlagsMutuallyExclusive("headless", "subordinate") + cmd.Flags().BoolVar(&command.forceLocal, "force-local", false, "Skip agent detection and force local mode") + cmd.Flags().BoolVar(&command.forceAgent, "force-agent", false, "Skip agent detection and force agent mode") + cmd.MarkFlagsMutuallyExclusive("force-local", "force-agent") + cmd.Flags().StringVarP(&command.bindAddress, "bind", "b", "127.0.0.1:9191", "The address to bind the private frontend (ignored when using '--auto')") + cmd.Flags().BoolVar(&command.autoMode, "auto", false, "Enable automatic port detection") + cmd.Flags().StringVar(&command.autoAddress, "auto-address", "127.0.0.1", "The address to use for automatic port detection") + cmd.Flags().Uint16Var(&command.autoStartPort, "auto-start-port", 8080, "The starting port to use for automatic port detection") + cmd.Flags().Uint16Var(&command.autoEndPort, "auto-end-port", 8888, "The ending port to use for automatic port detection") cmd.Flags().StringArrayVar(&command.responseHeaders, "response-header", []string{}, "Add a response header ('key:value')") cmd.Run = command.run return command } func (cmd *accessPrivateCommand) run(_ *cobra.Command, args []string) { - shrToken := args[0] - - env, err := environment.LoadRoot() - if err != nil { - tui.Error("error loading environment", err) + if cmd.subordinate { + logrus.SetFormatter(&logrus.JSONFormatter{TimestampFormat: time.RFC3339Nano}) } - if !env.IsEnabled() { + root, err := environment.LoadRoot() + if err != nil { + cmd.error(err) + } + + if !root.IsEnabled() { tui.Error("unable to load environment; did you 'zrok enable'?", nil) } - zrok, err := env.Client() - if err != nil { - if !panicInstead { - tui.Error("unable to create zrok client", err) + if cmd.subordinate || cmd.forceLocal { + cmd.accessLocal(args, root) + } else { + agent := cmd.forceAgent + if !cmd.forceAgent { + agent, err = agentClient.IsAgentRunning(root) + if err != nil { + tui.Error("error checking if agent is running", err) + } } - panic(err) + if agent { + cmd.accessAgent(args, root) + } else { + cmd.accessLocal(args, root) + } + } +} + +func (cmd *accessPrivateCommand) accessLocal(args []string, root env_core.Root) { + shrToken := args[0] + + zrok, err := root.Client() + if err != nil { + cmd.error(err) } - auth := httptransport.APIKeyAuth("X-TOKEN", "header", env.Environment().Token) + auth := httptransport.APIKeyAuth("X-TOKEN", "header", root.Environment().Token) req := share.NewAccessParams() - req.Body = &rest_model_zrok.AccessRequest{ - ShrToken: shrToken, - EnvZID: env.Environment().ZitiIdentity, - } + req.Body.ShareToken = shrToken + req.Body.EnvZID = root.Environment().ZitiIdentity + accessResp, err := zrok.Share.Access(req, auth) if err != nil { - if !panicInstead { - tui.Error("unable to access", err) - } - panic(err) + cmd.error(err) + } + + bindAddress := cmd.bindAddress + if cmd.autoMode { + if accessResp.Payload.BackendMode == "udpTunnel" { + cmd.shutdown(accessResp.Payload.FrontendToken, root.Environment().ZitiIdentity, shrToken, zrok, auth) + cmd.error(errors.New("auto-addressing is not compatible with the 'udpTunnel' backend mode")) + } + autoAddress, err := util.AutoListenerAddress("tcp", cmd.autoAddress, cmd.autoStartPort, cmd.autoEndPort) + if err != nil { + cmd.shutdown(accessResp.Payload.FrontendToken, root.Environment().ZitiIdentity, shrToken, zrok, auth) + cmd.error(err) + } + bindAddress = autoAddress + } + + upReq := share.NewUpdateAccessParams() + upReq.Body.FrontendToken = accessResp.Payload.FrontendToken + upReq.Body.BindAddress = bindAddress + _, err = zrok.Share.UpdateAccess(upReq, auth) + if err != nil { + cmd.shutdown(accessResp.Payload.FrontendToken, root.Environment().ZitiIdentity, shrToken, zrok, auth) + cmd.error(err) } - logrus.Infof("allocated frontend '%v'", accessResp.Payload.FrontendToken) protocol := "http://" switch accessResp.Payload.BackendMode { @@ -91,80 +157,66 @@ func (cmd *accessPrivateCommand) run(_ *cobra.Command, args []string) { protocol = "udp://" } - endpointUrl, err := url.Parse(protocol + cmd.bindAddress) + endpointUrl, err := url.Parse(protocol + bindAddress) if err != nil { - if !panicInstead { - tui.Error("invalid endpoint address", err) - } - panic(err) + cmd.shutdown(accessResp.Payload.FrontendToken, root.Environment().ZitiIdentity, shrToken, zrok, auth) + cmd.error(err) } requests := make(chan *endpoints.Request, 1024) switch accessResp.Payload.BackendMode { case "tcpTunnel": fe, err := tcpTunnel.NewFrontend(&tcpTunnel.FrontendConfig{ - BindAddress: cmd.bindAddress, - IdentityName: env.EnvironmentIdentityName(), + BindAddress: bindAddress, + IdentityName: root.EnvironmentIdentityName(), ShrToken: args[0], RequestsChan: requests, }) if err != nil { - if !panicInstead { - tui.Error("unable to create private access", err) - } - panic(err) + cmd.shutdown(accessResp.Payload.FrontendToken, root.Environment().ZitiIdentity, shrToken, zrok, auth) + cmd.error(err) } go func() { if err := fe.Run(); err != nil { - if !panicInstead { - tui.Error("error starting access", err) - } - panic(err) + cmd.shutdown(accessResp.Payload.FrontendToken, root.Environment().ZitiIdentity, shrToken, zrok, auth) + cmd.error(err) } }() case "udpTunnel": fe, err := udpTunnel.NewFrontend(&udpTunnel.FrontendConfig{ BindAddress: cmd.bindAddress, - IdentityName: env.EnvironmentIdentityName(), + IdentityName: root.EnvironmentIdentityName(), ShrToken: args[0], RequestsChan: requests, IdleTime: time.Minute, }) if err != nil { - if !panicInstead { - tui.Error("unable to create private frontend", err) - } - panic(err) + cmd.shutdown(accessResp.Payload.FrontendToken, root.Environment().ZitiIdentity, shrToken, zrok, auth) + cmd.error(err) } go func() { if err := fe.Run(); err != nil { - if !panicInstead { - tui.Error("error starting frontend", err) - } - panic(err) + cmd.shutdown(accessResp.Payload.FrontendToken, root.Environment().ZitiIdentity, shrToken, zrok, auth) + cmd.error(err) } }() case "socks": fe, err := tcpTunnel.NewFrontend(&tcpTunnel.FrontendConfig{ - BindAddress: cmd.bindAddress, - IdentityName: env.EnvironmentIdentityName(), + BindAddress: bindAddress, + IdentityName: root.EnvironmentIdentityName(), ShrToken: args[0], RequestsChan: requests, }) if err != nil { - if !panicInstead { - tui.Error("unable to create private access", err) - } - panic(err) + cmd.shutdown(accessResp.Payload.FrontendToken, root.Environment().ZitiIdentity, shrToken, zrok, auth) + cmd.error(err) } go func() { if err := fe.Run(); err != nil { - if !panicInstead { - tui.Error("error starting access", err) - } - panic(err) + cmd.shutdown(accessResp.Payload.FrontendToken, root.Environment().ZitiIdentity, shrToken, zrok, auth) + cmd.error(err) } }() @@ -173,55 +225,60 @@ func (cmd *accessPrivateCommand) run(_ *cobra.Command, args []string) { Scheme: "VPN", } fe, err := vpn.NewFrontend(&vpn.FrontendConfig{ - IdentityName: env.EnvironmentIdentityName(), + IdentityName: root.EnvironmentIdentityName(), ShrToken: args[0], RequestsChan: requests, }) if err != nil { - if !panicInstead { - tui.Error("unable to create private access", err) - } - panic(err) + cmd.shutdown(accessResp.Payload.FrontendToken, root.Environment().ZitiIdentity, shrToken, zrok, auth) + cmd.error(err) } go func() { if err := fe.Run(); err != nil { - if !panicInstead { - tui.Error("error starting access", err) - } - panic(err) + cmd.shutdown(accessResp.Payload.FrontendToken, root.Environment().ZitiIdentity, shrToken, zrok, auth) + cmd.error(err) } }() default: - cfg := proxy.DefaultFrontendConfig(env.EnvironmentIdentityName()) + cfg := proxy.DefaultFrontendConfig(root.EnvironmentIdentityName()) cfg.ShrToken = shrToken - cfg.Address = cmd.bindAddress + cfg.Address = bindAddress cfg.ResponseHeaders = cmd.responseHeaders cfg.RequestsChan = requests fe, err := proxy.NewFrontend(cfg) if err != nil { - if !panicInstead { - tui.Error("unable to create private frontend", err) - } - panic(err) + cmd.shutdown(accessResp.Payload.FrontendToken, root.Environment().ZitiIdentity, shrToken, zrok, auth) + cmd.error(err) } go func() { if err := fe.Run(); err != nil { - if !panicInstead { - tui.Error("unable to run frontend", err) - } + cmd.shutdown(accessResp.Payload.FrontendToken, root.Environment().ZitiIdentity, shrToken, zrok, auth) + cmd.error(err) } }() } c := make(chan os.Signal) - signal.Notify(c, os.Interrupt, syscall.SIGTERM) + signal.Notify(c, os.Interrupt, os.Kill, syscall.SIGHUP, syscall.SIGTERM, syscall.SIGKILL, syscall.SIGQUIT) go func() { <-c - cmd.destroy(accessResp.Payload.FrontendToken, env.Environment().ZitiIdentity, shrToken, zrok, auth) + cmd.shutdown(accessResp.Payload.FrontendToken, root.Environment().ZitiIdentity, shrToken, zrok, auth) os.Exit(0) }() + if cmd.subordinate { + data := make(map[string]interface{}) + data[subordinate.MessageKey] = subordinate.BootMessage + data["frontend_token"] = accessResp.Payload.FrontendToken + data["bind_address"] = bindAddress + jsonData, err := json.Marshal(data) + if err != nil { + subordinateError(err) + } + fmt.Println(string(jsonData)) + } + if cmd.headless { logrus.Infof("access the zrok share at the following endpoint: %v", endpointUrl.String()) for { @@ -230,7 +287,22 @@ func (cmd *accessPrivateCommand) run(_ *cobra.Command, args []string) { logrus.Infof("%v -> %v %v", req.RemoteAddr, req.Method, req.Path) } } - + } else if cmd.subordinate { + for { + select { + case req := <-requests: + data := make(map[string]interface{}) + data[subordinate.MessageKey] = "access" + data["remote-address"] = req.RemoteAddr + data["method"] = req.Method + data["path"] = req.Path + jsonData, err := json.Marshal(data) + if err != nil { + fmt.Println(err) + } + fmt.Println(string(jsonData)) + } + } } else { mdl := newAccessModel(shrToken, endpointUrl.String()) logrus.SetOutput(mdl) @@ -253,21 +325,56 @@ func (cmd *accessPrivateCommand) run(_ *cobra.Command, args []string) { } close(requests) - cmd.destroy(accessResp.Payload.FrontendToken, env.Environment().ZitiIdentity, shrToken, zrok, auth) + cmd.shutdown(accessResp.Payload.FrontendToken, root.Environment().ZitiIdentity, shrToken, zrok, auth) } } -func (cmd *accessPrivateCommand) destroy(frontendName, envZId, shrToken string, zrok *rest_client_zrok.Zrok, auth runtime.ClientAuthInfoWriter) { - logrus.Debugf("shutting down '%v'", shrToken) - req := share.NewUnaccessParams() - req.Body = &rest_model_zrok.UnaccessRequest{ - FrontendToken: frontendName, - ShrToken: shrToken, - EnvZID: envZId, +func (cmd *accessPrivateCommand) error(err error) { + if cmd.subordinate { + subordinateError(err) } + if !panicInstead { + tui.Error("unable to create private access", err) + } + panic(err) +} + +func (cmd *accessPrivateCommand) shutdown(frontendToken, envZId, shrToken string, zrok *rest_client_zrok.Zrok, auth runtime.ClientAuthInfoWriter) { + logrus.Infof("shutting down '%v'", shrToken) + req := share.NewUnaccessParams() + req.Body.FrontendToken = frontendToken + req.Body.ShareToken = shrToken + req.Body.EnvZID = envZId if _, err := zrok.Share.Unaccess(req, auth); err == nil { logrus.Debugf("shutdown complete") } else { logrus.Errorf("error shutting down: %v", err) } } + +func (cmd *accessPrivateCommand) accessAgent(args []string, root env_core.Root) { + client, conn, err := agentClient.NewClient(root) + if err != nil { + tui.Error("error connecting to agent", err) + } + defer func() { _ = conn.Close() }() + + req := &agentGrpc.AccessPrivateRequest{ + Token: args[0], + BindAddress: cmd.bindAddress, + ResponseHeaders: cmd.responseHeaders, + } + if cmd.autoMode { + req.AutoMode = true + req.AutoAddress = cmd.autoAddress + req.AutoStartPort = uint32(cmd.autoStartPort) + req.AutoEndPort = uint32(cmd.autoEndPort) + } + + acc, err := client.AccessPrivate(context.Background(), req) + if err != nil { + tui.Error("error creating access", err) + } + + fmt.Println(acc) +} diff --git a/cmd/zrok/adminCreateAccount.go b/cmd/zrok/adminCreateAccount.go index 80151ecc..1c646af2 100644 --- a/cmd/zrok/adminCreateAccount.go +++ b/cmd/zrok/adminCreateAccount.go @@ -46,5 +46,5 @@ func (cmd *adminCreateAccount) run(_ *cobra.Command, args []string) { panic(err) } - fmt.Println(resp.GetPayload().Token) + fmt.Println(resp.GetPayload().AccountToken) } diff --git a/cmd/zrok/adminCreateFrontend.go b/cmd/zrok/adminCreateFrontend.go index 20dc9831..01460e9c 100644 --- a/cmd/zrok/adminCreateFrontend.go +++ b/cmd/zrok/adminCreateFrontend.go @@ -3,7 +3,6 @@ package main import ( "github.com/openziti/zrok/environment" "github.com/openziti/zrok/rest_client_zrok/admin" - "github.com/openziti/zrok/rest_model_zrok" "github.com/openziti/zrok/sdk/golang/sdk" "github.com/openziti/zrok/tui" "github.com/sirupsen/logrus" @@ -52,12 +51,10 @@ func (cmd *adminCreateFrontendCommand) run(_ *cobra.Command, args []string) { permissionMode = sdk.ClosedPermissionMode } req := admin.NewCreateFrontendParams() - req.Body = &rest_model_zrok.CreateFrontendRequest{ - ZID: zId, - PublicName: publicName, - URLTemplate: urlTemplate, - PermissionMode: string(permissionMode), - } + req.Body.ZID = zId + req.Body.PublicName = publicName + req.Body.URLTemplate = urlTemplate + req.Body.PermissionMode = string(permissionMode) resp, err := zrok.Admin.CreateFrontend(req, mustGetAdminAuth()) if err != nil { @@ -71,5 +68,5 @@ func (cmd *adminCreateFrontendCommand) run(_ *cobra.Command, args []string) { } } - logrus.Infof("created global public frontend '%v'", resp.Payload.Token) + logrus.Infof("created global public frontend '%v'", resp.Payload.FrontendToken) } diff --git a/cmd/zrok/adminCreateOrgMember.go b/cmd/zrok/adminCreateOrgMember.go index e58c2fcd..1a373d1b 100644 --- a/cmd/zrok/adminCreateOrgMember.go +++ b/cmd/zrok/adminCreateOrgMember.go @@ -41,7 +41,7 @@ func (cmd *adminCreateOrgMemberCommand) run(_ *cobra.Command, args []string) { } req := admin.NewAddOrganizationMemberParams() - req.Body.Token = args[0] + req.Body.OrganizationToken = args[0] req.Body.Email = args[1] req.Body.Admin = cmd.admin diff --git a/cmd/zrok/adminCreateOrganization.go b/cmd/zrok/adminCreateOrganization.go index da7b5944..a1ca8909 100644 --- a/cmd/zrok/adminCreateOrganization.go +++ b/cmd/zrok/adminCreateOrganization.go @@ -48,5 +48,5 @@ func (cmd *adminCreateOrganizationCommand) run(_ *cobra.Command, _ []string) { panic(err) } - logrus.Infof("created new organization with token '%v'", resp.Payload.Token) + logrus.Infof("created new organization with organization token '%v'", resp.Payload.OrganizationToken) } diff --git a/cmd/zrok/adminDeleteFrontend.go b/cmd/zrok/adminDeleteFrontend.go index 9d806df7..b7598b7f 100644 --- a/cmd/zrok/adminDeleteFrontend.go +++ b/cmd/zrok/adminDeleteFrontend.go @@ -3,7 +3,6 @@ package main import ( "github.com/openziti/zrok/environment" "github.com/openziti/zrok/rest_client_zrok/admin" - "github.com/openziti/zrok/rest_model_zrok" "github.com/sirupsen/logrus" "github.com/spf13/cobra" ) @@ -41,7 +40,7 @@ func (cmd *adminDeleteFrontendCommand) run(_ *cobra.Command, args []string) { } req := admin.NewDeleteFrontendParams() - req.Body = &rest_model_zrok.DeleteFrontendRequest{FrontendToken: feToken} + req.Body.FrontendToken = feToken _, err = zrok.Admin.DeleteFrontend(req, mustGetAdminAuth()) if err != nil { diff --git a/cmd/zrok/adminDeleteOrgMember.go b/cmd/zrok/adminDeleteOrgMember.go index 6659727f..10949162 100644 --- a/cmd/zrok/adminDeleteOrgMember.go +++ b/cmd/zrok/adminDeleteOrgMember.go @@ -39,7 +39,7 @@ func (cmd *adminDeleteOrgMemberCommand) run(_ *cobra.Command, args []string) { } req := admin.NewRemoveOrganizationMemberParams() - req.Body.Token = args[0] + req.Body.OrganizationToken = args[0] req.Body.Email = args[1] _, err = zrok.Admin.RemoveOrganizationMember(req, mustGetAdminAuth()) diff --git a/cmd/zrok/adminDeleteOrganization.go b/cmd/zrok/adminDeleteOrganization.go index cb3ec6e2..ee858bb6 100644 --- a/cmd/zrok/adminDeleteOrganization.go +++ b/cmd/zrok/adminDeleteOrganization.go @@ -39,7 +39,7 @@ func (cmd *adminDeleteOrganizationCommand) run(_ *cobra.Command, args []string) } req := admin.NewDeleteOrganizationParams() - req.Body.Token = args[0] + req.Body.OrganizationToken = args[0] _, err = zrok.Admin.DeleteOrganization(req, mustGetAdminAuth()) if err != nil { diff --git a/cmd/zrok/adminGenerate.go b/cmd/zrok/adminGenerate.go index d31c9440..40cb971d 100644 --- a/cmd/zrok/adminGenerate.go +++ b/cmd/zrok/adminGenerate.go @@ -5,7 +5,6 @@ import ( "github.com/jaevor/go-nanoid" "github.com/openziti/zrok/environment" "github.com/openziti/zrok/rest_client_zrok/admin" - "github.com/openziti/zrok/rest_model_zrok" "github.com/sirupsen/logrus" "github.com/spf13/cobra" ) @@ -54,9 +53,8 @@ func (cmd *adminGenerateCommand) run(_ *cobra.Command, args []string) { panic(err) } req := admin.NewInviteTokenGenerateParams() - req.Body = &rest_model_zrok.InviteTokenGenerateRequest{ - Tokens: tokens, - } + req.Body.InviteTokens = tokens + _, err = zrok.Admin.InviteTokenGenerate(req, mustGetAdminAuth()) if err != nil { if !panicInstead { diff --git a/cmd/zrok/adminListFrontends.go b/cmd/zrok/adminListFrontends.go index ee7ece19..7446a703 100644 --- a/cmd/zrok/adminListFrontends.go +++ b/cmd/zrok/adminListFrontends.go @@ -54,7 +54,7 @@ func (cmd *adminListFrontendsCommand) run(_ *cobra.Command, _ []string) { t.AppendHeader(table.Row{"Token", "zId", "Public Name", "Url Template", "Created At", "Updated At"}) for _, pfe := range resp.Payload { t.AppendRow(table.Row{ - pfe.Token, + pfe.FrontendToken, pfe.ZID, pfe.PublicName, pfe.URLTemplate, diff --git a/cmd/zrok/adminListOrgMembers.go b/cmd/zrok/adminListOrgMembers.go index 0a626379..2367df3a 100644 --- a/cmd/zrok/adminListOrgMembers.go +++ b/cmd/zrok/adminListOrgMembers.go @@ -41,7 +41,7 @@ func (cmd *adminListOrgMembersCommand) run(_ *cobra.Command, args []string) { } req := admin.NewListOrganizationMembersParams() - req.Body.Token = args[0] + req.Body.OrganizationToken = args[0] resp, err := zrok.Admin.ListOrganizationMembers(req, mustGetAdminAuth()) if err != nil { diff --git a/cmd/zrok/adminListOrganizations.go b/cmd/zrok/adminListOrganizations.go index bf2624d8..2fb4d400 100644 --- a/cmd/zrok/adminListOrganizations.go +++ b/cmd/zrok/adminListOrganizations.go @@ -52,7 +52,7 @@ func (c *adminListOrganizationsCommand) run(_ *cobra.Command, _ []string) { t.SetStyle(table.StyleColoredDark) t.AppendHeader(table.Row{"Organization Token", "Description"}) for _, org := range resp.Payload.Organizations { - t.AppendRow(table.Row{org.Token, org.Description}) + t.AppendRow(table.Row{org.OrganizationToken, org.Description}) } t.Render() fmt.Println() diff --git a/cmd/zrok/adminMigrate.go b/cmd/zrok/adminMigrate.go index d900b728..c58871e2 100644 --- a/cmd/zrok/adminMigrate.go +++ b/cmd/zrok/adminMigrate.go @@ -33,7 +33,12 @@ func (cmd *adminMigrate) run(_ *cobra.Command, args []string) { if err != nil { panic(err) } + logrus.Info(cf.Dump(inCfg, cf.DefaultOptions())) + + // override the 'disable_auto_migration' setting... the user is requesting a migration here. + inCfg.Store.DisableAutoMigration = false + if _, err := store.Open(inCfg.Store); err != nil { panic(err) } diff --git a/cmd/zrok/adminUpdateFrontend.go b/cmd/zrok/adminUpdateFrontend.go index 2c77513d..21670d5a 100644 --- a/cmd/zrok/adminUpdateFrontend.go +++ b/cmd/zrok/adminUpdateFrontend.go @@ -3,7 +3,6 @@ package main import ( "github.com/openziti/zrok/environment" "github.com/openziti/zrok/rest_client_zrok/admin" - "github.com/openziti/zrok/rest_model_zrok" "github.com/sirupsen/logrus" "github.com/spf13/cobra" ) @@ -49,11 +48,9 @@ func (cmd *adminUpdateFrontendCommand) run(_ *cobra.Command, args []string) { } req := admin.NewUpdateFrontendParams() - req.Body = &rest_model_zrok.UpdateFrontendRequest{ - FrontendToken: feToken, - PublicName: cmd.newPublicName, - URLTemplate: cmd.newUrlTemplate, - } + req.Body.FrontendToken = feToken + req.Body.PublicName = cmd.newPublicName + req.Body.URLTemplate = cmd.newUrlTemplate _, err = zrok.Admin.UpdateFrontend(req, mustGetAdminAuth()) if err != nil { diff --git a/cmd/zrok/agentConsole.go b/cmd/zrok/agentConsole.go new file mode 100644 index 00000000..d60e353b --- /dev/null +++ b/cmd/zrok/agentConsole.go @@ -0,0 +1,52 @@ +package main + +import ( + "context" + "fmt" + "github.com/openziti/zrok/agent/agentClient" + "github.com/openziti/zrok/agent/agentGrpc" + "github.com/openziti/zrok/environment" + "github.com/openziti/zrok/tui" + "github.com/spf13/cobra" +) + +func init() { + agentCmd.AddCommand(newAgentConsoleCommand().cmd) +} + +type agentConsoleCommand struct { + cmd *cobra.Command +} + +func newAgentConsoleCommand() *agentConsoleCommand { + cmd := &cobra.Command{ + Use: "console", + Short: "Open the Agent console", + Args: cobra.NoArgs, + } + command := &agentConsoleCommand{cmd} + cmd.Run = command.run + return command +} + +func (cmd *agentConsoleCommand) run(_ *cobra.Command, _ []string) { + root, err := environment.LoadRoot() + if err != nil { + tui.Error("error loading zrokdir", err) + } + + client, conn, err := agentClient.NewClient(root) + if err != nil { + tui.Error("error connecting to agent", err) + } + defer func() { _ = conn.Close() }() + + v, err := client.Version(context.Background(), &agentGrpc.VersionRequest{}) + if err != nil { + tui.Error("error getting agent version", err) + } + + if err := openBrowser("http://" + v.ConsoleEndpoint); err != nil { + tui.Error(fmt.Sprintf("unable to open agent console at 'http://%v'", v.ConsoleEndpoint), err) + } +} diff --git a/cmd/zrok/agentReleaseAccess.go b/cmd/zrok/agentReleaseAccess.go new file mode 100644 index 00000000..5e0cdaa3 --- /dev/null +++ b/cmd/zrok/agentReleaseAccess.go @@ -0,0 +1,55 @@ +package main + +import ( + "context" + "fmt" + "github.com/openziti/zrok/agent/agentClient" + "github.com/openziti/zrok/agent/agentGrpc" + "github.com/openziti/zrok/environment" + "github.com/openziti/zrok/tui" + "github.com/spf13/cobra" +) + +func init() { + agentReleaseCmd.AddCommand(newAgentReleaseAccessCommand().cmd) +} + +type agentReleaseAccessCommand struct { + cmd *cobra.Command +} + +func newAgentReleaseAccessCommand() *agentReleaseAccessCommand { + cmd := &cobra.Command{ + Use: "access ", + Short: "Unbind an access from the zrok Agent", + Args: cobra.ExactArgs(1), + } + command := &agentReleaseAccessCommand{cmd: cmd} + cmd.Run = command.run + return command +} + +func (cmd *agentReleaseAccessCommand) run(_ *cobra.Command, args []string) { + root, err := environment.LoadRoot() + if err != nil { + if !panicInstead { + tui.Error("unable to load environment", err) + } + panic(err) + } + + client, conn, err := agentClient.NewClient(root) + if err != nil { + tui.Error("error connecting to agent", err) + } + defer conn.Close() + + _, err = client.ReleaseAccess(context.Background(), &agentGrpc.ReleaseAccessRequest{ + FrontendToken: args[0], + }) + if err != nil { + tui.Error("error releasing access", err) + } + + fmt.Println("success.") +} diff --git a/cmd/zrok/agentReleaseShare.go b/cmd/zrok/agentReleaseShare.go new file mode 100755 index 00000000..09c0968b --- /dev/null +++ b/cmd/zrok/agentReleaseShare.go @@ -0,0 +1,55 @@ +package main + +import ( + "context" + "fmt" + "github.com/openziti/zrok/agent/agentClient" + "github.com/openziti/zrok/agent/agentGrpc" + "github.com/openziti/zrok/environment" + "github.com/openziti/zrok/tui" + "github.com/spf13/cobra" +) + +func init() { + agentReleaseCmd.AddCommand(newAgentReleaseShareCommand().cmd) +} + +type agentReleaseShareCommand struct { + cmd *cobra.Command +} + +func newAgentReleaseShareCommand() *agentReleaseShareCommand { + cmd := &cobra.Command{ + Use: "share ", + Short: "Release a share from the zrok Agent", + Args: cobra.ExactArgs(1), + } + command := &agentReleaseShareCommand{cmd: cmd} + cmd.Run = command.run + return command +} + +func (cmd *agentReleaseShareCommand) run(_ *cobra.Command, args []string) { + root, err := environment.LoadRoot() + if err != nil { + if !panicInstead { + tui.Error("unable to load environment", err) + } + panic(err) + } + + client, conn, err := agentClient.NewClient(root) + if err != nil { + tui.Error("error connecting to agent", err) + } + defer conn.Close() + + _, err = client.ReleaseShare(context.Background(), &agentGrpc.ReleaseShareRequest{ + Token: args[0], + }) + if err != nil { + tui.Error("error releasing share", err) + } + + fmt.Println("success.") +} diff --git a/cmd/zrok/agentStart.go b/cmd/zrok/agentStart.go new file mode 100644 index 00000000..965199f3 --- /dev/null +++ b/cmd/zrok/agentStart.go @@ -0,0 +1,72 @@ +package main + +import ( + "github.com/openziti/zrok/agent" + "github.com/openziti/zrok/environment" + "github.com/openziti/zrok/tui" + "github.com/spf13/cobra" + "os" + "os/signal" + "syscall" +) + +func init() { + agentCmd.AddCommand(newAgentStartCommand().cmd) +} + +type agentStartCommand struct { + cmd *cobra.Command + consoleAddress string + consoleStartPort uint16 + consoleEndPort uint16 +} + +func newAgentStartCommand() *agentStartCommand { + cmd := &cobra.Command{ + Use: "start", + Short: "Start a zrok agent", + Args: cobra.NoArgs, + } + command := &agentStartCommand{cmd: cmd} + cmd.Run = command.run + cmd.Flags().StringVar(&command.consoleAddress, "console-address", "127.0.0.1", "gRPC gateway address") + cmd.Flags().Uint16Var(&command.consoleStartPort, "console-start-port", 8888, "gRPC gateway starting port") + cmd.Flags().Uint16Var(&command.consoleEndPort, "console-end-port", 8988, "gRPC gateway ending port") + return command +} + +func (cmd *agentStartCommand) run(_ *cobra.Command, _ []string) { + root, err := environment.LoadRoot() + if err != nil { + tui.Error("error loading zrokdir", err) + } + + if !root.IsEnabled() { + tui.Error("unable to load environment; did you 'zrok enable'?", nil) + } + + cfg := agent.DefaultConfig() + cfg.ConsoleAddress = cmd.consoleAddress + cfg.ConsoleStartPort = cmd.consoleStartPort + cfg.ConsoleEndPort = cmd.consoleEndPort + a, err := agent.NewAgent(cfg, root) + if err != nil { + tui.Error("error creating agent", err) + } + + c := make(chan os.Signal) + signal.Notify(c, os.Interrupt, syscall.SIGTERM) + go func() { + <-c + cmd.shutdown(a) + os.Exit(0) + }() + + if err := a.Run(); err != nil { + tui.Error("agent aborted", err) + } +} + +func (cmd *agentStartCommand) shutdown(a *agent.Agent) { + a.Shutdown() +} diff --git a/cmd/zrok/agentStatus.go b/cmd/zrok/agentStatus.go new file mode 100644 index 00000000..5229a26d --- /dev/null +++ b/cmd/zrok/agentStatus.go @@ -0,0 +1,74 @@ +package main + +import ( + "context" + "fmt" + "github.com/jedib0t/go-pretty/v6/table" + "github.com/openziti/zrok/agent/agentClient" + "github.com/openziti/zrok/agent/agentGrpc" + "github.com/openziti/zrok/environment" + "github.com/openziti/zrok/tui" + "github.com/spf13/cobra" + "os" +) + +func init() { + agentCmd.AddCommand(newAgentStatusCommand().cmd) +} + +type agentStatusCommand struct { + cmd *cobra.Command +} + +func newAgentStatusCommand() *agentStatusCommand { + cmd := &cobra.Command{ + Use: "status", + Short: "Show the status of the running zrok Agent", + Args: cobra.NoArgs, + } + command := &agentStatusCommand{cmd: cmd} + cmd.Run = command.run + return command +} + +func (cmd *agentStatusCommand) run(_ *cobra.Command, _ []string) { + root, err := environment.LoadRoot() + if err != nil { + tui.Error("error loading zrokdir", err) + } + + client, conn, err := agentClient.NewClient(root) + if err != nil { + tui.Error("error connecting to agent", err) + } + defer conn.Close() + + status, err := client.Status(context.Background(), &agentGrpc.StatusRequest{}) + if err != nil { + tui.Error("error getting status", err) + } + + fmt.Println() + t := table.NewWriter() + t.SetOutputMirror(os.Stdout) + t.SetStyle(table.StyleColoredDark) + t.AppendHeader(table.Row{"Frontend Token", "Token", "Bind Address"}) + for _, access := range status.GetAccesses() { + t.AppendRow(table.Row{access.FrontendToken, access.Token, access.BindAddress}) + } + t.Render() + fmt.Printf("%d accesses in agent\n", len(status.GetAccesses())) + + fmt.Println() + t = table.NewWriter() + t.SetOutputMirror(os.Stdout) + t.SetStyle(table.StyleColoredDark) + t.AppendHeader(table.Row{"Token", "Reserved", "Share Mode", "Backend Mode", "Target"}) + for _, share := range status.GetShares() { + t.AppendRow(table.Row{share.Token, share.Reserved, share.ShareMode, share.BackendMode, share.BackendEndpoint}) + } + t.Render() + fmt.Printf("%d shares in agent\n", len(status.GetShares())) + + fmt.Println() +} diff --git a/cmd/zrok/agentVersion.go b/cmd/zrok/agentVersion.go new file mode 100644 index 00000000..bb2afd43 --- /dev/null +++ b/cmd/zrok/agentVersion.go @@ -0,0 +1,50 @@ +package main + +import ( + "context" + "fmt" + "github.com/openziti/zrok/agent/agentClient" + "github.com/openziti/zrok/agent/agentGrpc" + "github.com/openziti/zrok/environment" + "github.com/openziti/zrok/tui" + "github.com/spf13/cobra" +) + +func init() { + agentCmd.AddCommand(newAgentVersionCommand().cmd) +} + +type agentVersionCommand struct { + cmd *cobra.Command +} + +func newAgentVersionCommand() *agentVersionCommand { + cmd := &cobra.Command{ + Use: "version", + Short: "Retrieve the running zrok Agent version", + Args: cobra.NoArgs, + } + command := &agentVersionCommand{cmd: cmd} + cmd.Run = command.run + return command +} + +func (cmd *agentVersionCommand) run(_ *cobra.Command, _ []string) { + root, err := environment.LoadRoot() + if err != nil { + tui.Error("error loading zrokdir", err) + } + + client, conn, err := agentClient.NewClient(root) + if err != nil { + tui.Error("error connecting to agent", err) + } + defer func() { _ = conn.Close() }() + + v, err := client.Version(context.Background(), &agentGrpc.VersionRequest{}) + if err != nil { + tui.Error("error getting agent version", err) + } + + fmt.Printf("%v\n%v\n", v.GetV(), v.GetConsoleEndpoint()) +} diff --git a/cmd/zrok/configGet.go b/cmd/zrok/configGet.go index 0d1905d0..3ea40845 100644 --- a/cmd/zrok/configGet.go +++ b/cmd/zrok/configGet.go @@ -18,6 +18,7 @@ func newConfigGetCommand() *configGetCommand { cmd := &cobra.Command{ Use: "get ", Short: "Get a value from the environment config", + Long: "Get a value from the environment config. Use 'zrok status' to list available configuration names and current values.", Args: cobra.ExactArgs(1), } command := &configGetCommand{cmd: cmd} @@ -46,6 +47,12 @@ func (cmd *configGetCommand) run(_ *cobra.Command, args []string) { } else { fmt.Println("defaultFrontend = ") } + case "headless": + if env.Config() != nil { + fmt.Printf("headless = %v\n", env.Config().Headless) + } else { + fmt.Println("headless = ") + } default: fmt.Printf("unknown config name '%v'\n", configName) } diff --git a/cmd/zrok/configSet.go b/cmd/zrok/configSet.go index 44773fbf..e1601a0a 100644 --- a/cmd/zrok/configSet.go +++ b/cmd/zrok/configSet.go @@ -8,6 +8,7 @@ import ( "github.com/spf13/cobra" "net/url" "os" + "strconv" ) func init() { @@ -22,6 +23,7 @@ func newConfigSetCommand() *configSetCommand { cmd := &cobra.Command{ Use: "set ", Short: "Set a value into the environment config", + Long: "Set a value into the environment config. Use 'zrok status' to list available configuration names and current values.", Args: cobra.ExactArgs(2), } command := &configSetCommand{cmd: cmd} @@ -77,6 +79,24 @@ func (cmd *configSetCommand) run(_ *cobra.Command, args []string) { } fmt.Println("zrok configuration updated") + case "headless": + headless, err := strconv.ParseBool(value) + if err != nil { + tui.Error("unable to parse value for 'headless': %v", err) + } + if env.Config() == nil { + if err := env.SetConfig(&env_core.Config{Headless: headless}); err != nil { + tui.Error("unable to save config", err) + } + } else { + cfg := env.Config() + cfg.Headless = headless + if err := env.SetConfig(cfg); err != nil { + tui.Error("unable to save config", err) + } + } + fmt.Println("zrok configuration updated") + default: fmt.Printf("unknown config name '%v'\n", configName) os.Exit(1) diff --git a/cmd/zrok/configUnset.go b/cmd/zrok/configUnset.go index 34e5d292..5fbb817b 100644 --- a/cmd/zrok/configUnset.go +++ b/cmd/zrok/configUnset.go @@ -47,6 +47,9 @@ func (cmd *configUnsetCommand) run(_ *cobra.Command, args []string) { case "defaultFrontend": cfg.DefaultFrontend = "" + case "headless": + cfg.Headless = false + default: fmt.Printf("unknown config name '%v'\n", configName) os.Exit(1) diff --git a/cmd/zrok/console.go b/cmd/zrok/console.go index 72de2ce4..77394e54 100644 --- a/cmd/zrok/console.go +++ b/cmd/zrok/console.go @@ -19,7 +19,7 @@ func newConsoleCommand() *consoleCommand { cmd := &cobra.Command{ Use: "console", Short: "Open the web console", - Args: cobra.ExactArgs(0), + Args: cobra.NoArgs, } command := &consoleCommand{cmd} cmd.Run = command.run diff --git a/cmd/zrok/disable.go b/cmd/zrok/disable.go index a7e49750..8ffb4273 100644 --- a/cmd/zrok/disable.go +++ b/cmd/zrok/disable.go @@ -5,7 +5,6 @@ import ( httpTransport "github.com/go-openapi/runtime/client" "github.com/openziti/zrok/environment" restEnvironment "github.com/openziti/zrok/rest_client_zrok/environment" - "github.com/openziti/zrok/rest_model_zrok" "github.com/openziti/zrok/tui" "github.com/sirupsen/logrus" "github.com/spf13/cobra" @@ -52,9 +51,8 @@ func (cmd *disableCommand) run(_ *cobra.Command, _ []string) { } auth := httpTransport.APIKeyAuth("X-TOKEN", "header", env.Environment().Token) req := restEnvironment.NewDisableParams() - req.Body = &rest_model_zrok.DisableRequest{ - Identity: env.Environment().ZitiIdentity, - } + req.Body.Identity = env.Environment().ZitiIdentity + _, err = zrok.Environment.Disable(req, auth) if err != nil { logrus.Warnf("share cleanup failed (%v); will clean up local environment", err) diff --git a/cmd/zrok/enable.go b/cmd/zrok/enable.go index ab24f0d2..0a2a4942 100644 --- a/cmd/zrok/enable.go +++ b/cmd/zrok/enable.go @@ -8,7 +8,6 @@ import ( "github.com/openziti/zrok/environment" "github.com/openziti/zrok/environment/env_core" restEnvironment "github.com/openziti/zrok/rest_client_zrok/environment" - "github.com/openziti/zrok/rest_model_zrok" "github.com/openziti/zrok/tui" "github.com/shirou/gopsutil/v3/host" "github.com/sirupsen/logrus" @@ -77,10 +76,8 @@ func (cmd *enableCommand) run(_ *cobra.Command, args []string) { } auth := httptransport.APIKeyAuth("X-TOKEN", "header", token) req := restEnvironment.NewEnableParams() - req.Body = &rest_model_zrok.EnableRequest{ - Description: cmd.description, - Host: hostDetail, - } + req.Body.Description = cmd.description + req.Body.Host = hostDetail var prg *tea.Program var done = make(chan struct{}) diff --git a/cmd/zrok/invite.go b/cmd/zrok/invite.go index 86375257..9a545bcf 100644 --- a/cmd/zrok/invite.go +++ b/cmd/zrok/invite.go @@ -8,7 +8,6 @@ import ( "github.com/openziti/zrok/environment" "github.com/openziti/zrok/rest_client_zrok/account" "github.com/openziti/zrok/rest_client_zrok/metadata" - "github.com/openziti/zrok/rest_model_zrok" "github.com/openziti/zrok/tui" "github.com/openziti/zrok/util" "github.com/spf13/cobra" @@ -76,13 +75,11 @@ func (cmd *inviteCommand) run(_ *cobra.Command, _ []string) { } if cmd.tui.done { email := cmd.tui.emailInputs[0].Value() - token := cmd.tui.tokenInput.Value() + invToken := cmd.tui.tokenInput.Value() req := account.NewInviteParams() - req.Body = &rest_model_zrok.InviteRequest{ - Email: email, - Token: token, - } + req.Body.Email = email + req.Body.InviteToken = invToken _, err = zrok.Account.Invite(req) if err != nil { cmd.endpointError(env.ApiEndpoint()) diff --git a/cmd/zrok/main.go b/cmd/zrok/main.go index 0130c88f..c21eef07 100644 --- a/cmd/zrok/main.go +++ b/cmd/zrok/main.go @@ -24,7 +24,11 @@ func init() { adminCmd.AddCommand(adminDeleteCmd) adminCmd.AddCommand(adminListCmd) adminCmd.AddCommand(adminUpdateCmd) - testCmd.AddCommand(testCanaryCmd) + rootCmd.AddCommand(agentCmd) + agentCmd.AddCommand(agentAccessCmd) + agentCmd.AddCommand(agentShareCmd) + agentCmd.AddCommand(agentReleaseCmd) + testCmd.AddCommand(loopCmd) rootCmd.AddCommand(adminCmd) rootCmd.AddCommand(configCmd) rootCmd.AddCommand(modifyCmd) @@ -32,6 +36,7 @@ func init() { rootCmd.AddCommand(organizationCmd) rootCmd.AddCommand(shareCmd) rootCmd.AddCommand(testCmd) + testCmd.AddCommand(testCanaryCmd) rootCmd.AddCommand(gendoc.NewGendocCmd(rootCmd)) transport.AddAddressParser(tcp.AddressParser{}) transport.AddAddressParser(udp.AddressParser{}) @@ -79,6 +84,27 @@ var adminUpdateCmd = &cobra.Command{ Short: "Update global resources", } +var agentAccessCmd = &cobra.Command{ + Use: "access", + Short: "zrok Agent access commands", +} + +var agentCmd = &cobra.Command{ + Use: "agent", + Short: "zrok Agent commands", + Aliases: []string{"daemon"}, +} + +var agentShareCmd = &cobra.Command{ + Use: "share", + Short: "zrok Agent sharing commands", +} + +var agentReleaseCmd = &cobra.Command{ + Use: "release", + Short: "zrok Agent release commands", +} + var configCmd = &cobra.Command{ Use: "config", Short: "Configure your zrok environment", diff --git a/cmd/zrok/modifyShare.go b/cmd/zrok/modifyShare.go index cd03f2ab..db62d219 100644 --- a/cmd/zrok/modifyShare.go +++ b/cmd/zrok/modifyShare.go @@ -5,7 +5,6 @@ import ( httptransport "github.com/go-openapi/runtime/client" "github.com/openziti/zrok/environment" "github.com/openziti/zrok/rest_client_zrok/share" - "github.com/openziti/zrok/rest_model_zrok" "github.com/openziti/zrok/tui" "github.com/spf13/cobra" ) @@ -59,11 +58,9 @@ func (cmd *modifyShareCommand) run(_ *cobra.Command, args []string) { if len(cmd.addAccessGrants) > 0 || len(cmd.removeAccessGrants) > 0 { req := share.NewUpdateShareParams() - req.Body = &rest_model_zrok.UpdateShareRequest{ - ShrToken: shrToken, - AddAccessGrants: cmd.addAccessGrants, - RemoveAccessGrants: cmd.removeAccessGrants, - } + req.Body.ShareToken = shrToken + req.Body.AddAccessGrants = cmd.addAccessGrants + req.Body.RemoveAccessGrants = cmd.removeAccessGrants if _, err := zrok.Share.UpdateShare(req, auth); err != nil { if !panicInstead { tui.Error("unable to update share", err) diff --git a/cmd/zrok/orgMemberships.go b/cmd/zrok/orgMemberships.go index 4b9cf58d..bd1be377 100644 --- a/cmd/zrok/orgMemberships.go +++ b/cmd/zrok/orgMemberships.go @@ -66,7 +66,7 @@ func (c *orgMembershipsCommand) run(_ *cobra.Command, _ []string) { t.SetStyle(table.StyleColoredDark) t.AppendHeader(table.Row{"Organization Token", "Description", "Admin?"}) for _, i := range in.Payload.Memberships { - t.AppendRow(table.Row{i.Token, i.Description, i.Admin}) + t.AppendRow(table.Row{i.OrganizationToken, i.Description, i.Admin}) } t.Render() fmt.Println() diff --git a/cmd/zrok/rebase.go b/cmd/zrok/rebase.go new file mode 100644 index 00000000..7d21843b --- /dev/null +++ b/cmd/zrok/rebase.go @@ -0,0 +1,69 @@ +package main + +import ( + "bufio" + "fmt" + "github.com/openziti/zrok/environment" + "github.com/openziti/zrok/tui" + "github.com/spf13/cobra" + "os" +) + +func init() { + rootCmd.AddCommand(newRebaseCommand().cmd) +} + +type rebaseCommand struct { + cmd *cobra.Command +} + +func newRebaseCommand() *rebaseCommand { + cmd := &cobra.Command{ + Use: "rebase ", + Short: "Rebase an enabled environment onto a different API endpoint URL", + Args: cobra.ExactArgs(1), + } + command := &rebaseCommand{cmd: cmd} + cmd.Run = command.run + return command +} + +func (cmd *rebaseCommand) run(_ *cobra.Command, args []string) { + root, err := environment.LoadRoot() + if err != nil { + tui.Error("error loading root", err) + } + + if !root.IsEnabled() { + tui.Error("environment not enabled; 'zrok enable' your environment instead", nil) + } + + currentEndpoint, _ := root.ApiEndpoint() + if args[0] != currentEndpoint { + fmt.Printf("this action will rebase your enabled environment to use the zrok API at: %v\n", currentEndpoint) + fmt.Println() + fmt.Println("you should only proceed if you understand why you're doing this!") + fmt.Println() + fmt.Print("to proceed, type 'yes': ") + scanner := bufio.NewScanner(os.Stdin) + if scanner.Scan() { + text := scanner.Text() + if text != "yes" { + tui.Error("rebase aborted!", nil) + } + } + fmt.Println() + + env := root.Environment() + env.ApiEndpoint = args[0] + + if err := root.SetEnvironment(env); err != nil { + tui.Error("error rebasing environment", err) + } + + fmt.Printf("environment rebased to zrok API at: %v\n", env.ApiEndpoint) + + } else { + fmt.Printf("environment already configured to use API endpoint: %v\n", currentEndpoint) + } +} diff --git a/cmd/zrok/release.go b/cmd/zrok/release.go index f68ec68a..238ec468 100644 --- a/cmd/zrok/release.go +++ b/cmd/zrok/release.go @@ -4,7 +4,6 @@ import ( httptransport "github.com/go-openapi/runtime/client" "github.com/openziti/zrok/environment" "github.com/openziti/zrok/rest_client_zrok/share" - "github.com/openziti/zrok/rest_model_zrok" "github.com/openziti/zrok/tui" "github.com/sirupsen/logrus" "github.com/spf13/cobra" @@ -53,11 +52,9 @@ func (cmd *releaseCommand) run(_ *cobra.Command, args []string) { auth := httptransport.APIKeyAuth("X-TOKEN", "header", env.Environment().Token) req := share.NewUnshareParams() - req.Body = &rest_model_zrok.UnshareRequest{ - EnvZID: env.Environment().ZitiIdentity, - ShrToken: shrToken, - Reserved: true, - } + req.Body.EnvZID = env.Environment().ZitiIdentity + req.Body.ShareToken = shrToken + req.Body.Reserved = true if _, err := zrok.Share.Unshare(req, auth); err != nil { if !panicInstead { tui.Error("error releasing share", err) diff --git a/cmd/zrok/sharePrivate.go b/cmd/zrok/sharePrivate.go index 304a7a6f..38a3fd33 100644 --- a/cmd/zrok/sharePrivate.go +++ b/cmd/zrok/sharePrivate.go @@ -1,8 +1,13 @@ package main import ( + "context" + "encoding/json" "fmt" tea "github.com/charmbracelet/bubbletea" + "github.com/openziti/zrok/agent/agentClient" + "github.com/openziti/zrok/agent/agentGrpc" + "github.com/openziti/zrok/cmd/zrok/subordinate" "github.com/openziti/zrok/endpoints" "github.com/openziti/zrok/endpoints/drive" "github.com/openziti/zrok/endpoints/proxy" @@ -14,12 +19,15 @@ import ( "github.com/openziti/zrok/environment/env_core" "github.com/openziti/zrok/sdk/golang/sdk" "github.com/openziti/zrok/tui" + "github.com/pkg/errors" "github.com/sirupsen/logrus" "github.com/spf13/cobra" "net" "os" "os/signal" + "path/filepath" "syscall" + "time" ) func init() { @@ -29,6 +37,9 @@ func init() { type sharePrivateCommand struct { backendMode string headless bool + subordinate bool + forceLocal bool + forceAgent bool insecure bool closed bool accessGrants []string @@ -42,8 +53,17 @@ func newSharePrivateCommand() *sharePrivateCommand { Args: cobra.RangeArgs(0, 1), } command := &sharePrivateCommand{cmd: cmd} + headless := false + if root, err := environment.LoadRoot(); err == nil { + headless, _ = root.Headless() + } cmd.Flags().StringVarP(&command.backendMode, "backend-mode", "b", "proxy", "The backend mode {proxy, web, tcpTunnel, udpTunnel, caddy, drive, socks, vpn}") - cmd.Flags().BoolVar(&command.headless, "headless", false, "Disable TUI and run headless") + cmd.Flags().BoolVar(&command.headless, "headless", headless, "Disable TUI and run headless") + cmd.Flags().BoolVar(&command.subordinate, "subordinate", false, "Enable agent mode") + cmd.MarkFlagsMutuallyExclusive("headless", "subordinate") + cmd.Flags().BoolVar(&command.forceLocal, "force-local", false, "Skip agent detection and force local mode") + cmd.Flags().BoolVar(&command.forceAgent, "force-agent", false, "Skip agent detection and force agent mode") + cmd.MarkFlagsMutuallyExclusive("force-local", "force-agent") cmd.Flags().BoolVar(&command.insecure, "insecure", false, "Enable insecure TLS certificate validation for ") cmd.Flags().BoolVar(&command.closed, "closed", false, "Enable closed permission mode (see --access-grant)") cmd.Flags().StringArrayVar(&command.accessGrants, "access-grant", []string{}, "zrok accounts that are allowed to access this share (see --closed)") @@ -52,56 +72,85 @@ func newSharePrivateCommand() *sharePrivateCommand { } func (cmd *sharePrivateCommand) run(_ *cobra.Command, args []string) { + if cmd.subordinate { + logrus.SetFormatter(&logrus.JSONFormatter{TimestampFormat: time.RFC3339Nano}) + } + + root, err := environment.LoadRoot() + if err != nil { + cmd.error("error loading environment", err) + } + + if !root.IsEnabled() { + tui.Error("unable to load environment; did you 'zrok enable'?", nil) + } + + if cmd.subordinate || cmd.forceLocal { + cmd.shareLocal(args, root) + } else { + agent := cmd.forceAgent + if !cmd.forceAgent { + agent, err = agentClient.IsAgentRunning(root) + if err != nil { + tui.Error("error checking if agent is running", err) + } + } + if agent { + cmd.shareAgent(args, root) + } else { + cmd.shareLocal(args, root) + } + } +} + +func (cmd *sharePrivateCommand) shareLocal(args []string, root env_core.Root) { var target string switch cmd.backendMode { case "proxy": if len(args) != 1 { - tui.Error("the 'proxy' backend mode expects a ", nil) + cmd.error("unable to create share", errors.New("the 'proxy' backend mode expects a ")) } v, err := parseUrl(args[0]) if err != nil { - if !panicInstead { - tui.Error("invalid target endpoint URL", err) - } - panic(err) + cmd.error("invalid target endpoint URL", err) } target = v case "web": if len(args) != 1 { - tui.Error("the 'web' backend mode expects a ", nil) + cmd.error("unable to create share", errors.New("the 'web' backend mode expects a ")) } target = args[0] case "tcpTunnel": if len(args) != 1 { - tui.Error("the 'tcpTunnel' backend mode expects a ", nil) + cmd.error("unable to create share", errors.New("the 'tcpTunnel' backend mode expects a ")) } target = args[0] case "udpTunnel": if len(args) != 1 { - tui.Error("the 'udpTunnel' backend mode expects a ", nil) + cmd.error("unable to create share", errors.New("the 'udpTunnel' backend mode expects a ")) } target = args[0] case "caddy": if len(args) != 1 { - tui.Error("the 'caddy' backend mode expects a ", nil) + cmd.error("unable to create share", errors.New("the 'caddy' backend mode expects a ")) } target = args[0] cmd.headless = true case "drive": if len(args) != 1 { - tui.Error("the 'drive' backend mode expects a ", nil) + cmd.error("unable to create share", errors.New("the 'drive' backend mode expects a ")) } target = args[0] case "socks": if len(args) != 0 { - tui.Error("the 'socks' backend mode does not expect ", nil) + cmd.error("unable to create share", errors.New("the 'socks' backend mode expects a ")) } target = "socks" @@ -109,7 +158,7 @@ func (cmd *sharePrivateCommand) run(_ *cobra.Command, args []string) { if len(args) == 1 { _, _, err := net.ParseCIDR(args[0]) if err != nil { - tui.Error("the 'vpn' backend expect valid CIDR ", err) + cmd.error("unable to create share", errors.New("the 'vpn' backend mode expects a valid CIDR ")) } target = args[0] } else { @@ -117,27 +166,21 @@ func (cmd *sharePrivateCommand) run(_ *cobra.Command, args []string) { } default: - tui.Error(fmt.Sprintf("invalid backend mode '%v'; expected {proxy, web, tcpTunnel, udpTunnel, caddy, drive}", cmd.backendMode), nil) + cmd.error("unable to create share", fmt.Errorf("invalid backend mode '%v'; expected {proxy, web, tcpTunnel, udpTunnel, caddy, drive}", cmd.backendMode)) } root, err := environment.LoadRoot() if err != nil { - if !panicInstead { - tui.Error("unable to load environment", err) - } - panic(err) + cmd.error("unable to load environment", err) } if !root.IsEnabled() { - tui.Error("unable to load environment; did you 'zrok enable'?", nil) + cmd.error("unable to create share", errors.New("unable to load environment; did you 'zrok enable'?")) } zif, err := root.ZitiIdentityNamed(root.EnvironmentIdentityName()) if err != nil { - if !panicInstead { - tui.Error("unable to load ziti identity configuration", err) - } - panic(err) + cmd.error("unable to load ziti identity configuration", err) } req := &sdk.ShareRequest{ @@ -151,15 +194,12 @@ func (cmd *sharePrivateCommand) run(_ *cobra.Command, args []string) { } shr, err := sdk.CreateShare(root, req) if err != nil { - if !panicInstead { - tui.Error("unable to create share", err) - } - panic(err) + cmd.error("unable to create share", err) } shareDescription := fmt.Sprintf("access your share with: %v", tui.Code.Render(fmt.Sprintf("zrok access private %v", shr.Token))) mdl := newShareModel(shr.Token, []string{shareDescription}, sdk.PrivateShareMode, sdk.BackendMode(cmd.backendMode)) - if !cmd.headless { + if !cmd.headless && !cmd.subordinate { proxy.SetCaddyLoggingWriter(mdl) } @@ -185,10 +225,7 @@ func (cmd *sharePrivateCommand) run(_ *cobra.Command, args []string) { be, err := proxy.NewBackend(cfg) if err != nil { - if !panicInstead { - tui.Error("error creating proxy backend", err) - } - panic(err) + cmd.error("unable to create 'proxy' backend", err) } go func() { @@ -207,10 +244,7 @@ func (cmd *sharePrivateCommand) run(_ *cobra.Command, args []string) { be, err := proxy.NewCaddyWebBackend(cfg) if err != nil { - if !panicInstead { - tui.Error("error creating web backend", err) - } - panic(err) + cmd.error("unable to create 'web' backend", err) } go func() { @@ -229,10 +263,7 @@ func (cmd *sharePrivateCommand) run(_ *cobra.Command, args []string) { be, err := tcpTunnel.NewBackend(cfg) if err != nil { - if !panicInstead { - tui.Error("error creating tcpTunnel backend", err) - } - panic(err) + cmd.error("unable to create 'tcpTunnel' backend", err) } go func() { @@ -251,10 +282,7 @@ func (cmd *sharePrivateCommand) run(_ *cobra.Command, args []string) { be, err := udpTunnel.NewBackend(cfg) if err != nil { - if !panicInstead { - tui.Error("error creating udpTunnel backend", err) - } - panic(err) + cmd.error("unable to create 'udpTunnel' backend", err) } go func() { @@ -273,10 +301,7 @@ func (cmd *sharePrivateCommand) run(_ *cobra.Command, args []string) { be, err := proxy.NewCaddyfileBackend(cfg) if err != nil { cmd.shutdown(root, shr) - if !panicInstead { - tui.Error("error creating caddy backend", err) - } - panic(err) + cmd.error("unable to create 'caddy' backend", err) } go func() { @@ -295,10 +320,7 @@ func (cmd *sharePrivateCommand) run(_ *cobra.Command, args []string) { be, err := drive.NewBackend(cfg) if err != nil { - if !panicInstead { - tui.Error("error creating drive backend", err) - } - panic(err) + cmd.error("unable to create 'drive' backend", err) } go func() { @@ -316,10 +338,7 @@ func (cmd *sharePrivateCommand) run(_ *cobra.Command, args []string) { be, err := socks.NewBackend(cfg) if err != nil { - if !panicInstead { - tui.Error("error creating socks backend", err) - } - panic(err) + cmd.error("unable to create 'socks' backend", err) } go func() { @@ -338,10 +357,7 @@ func (cmd *sharePrivateCommand) run(_ *cobra.Command, args []string) { be, err := vpn.NewBackend(cfg) if err != nil { - if !panicInstead { - tui.Error("error creating VPN backend", err) - } - panic(err) + cmd.error("unable to create 'vpn' backend", err) } go func() { @@ -351,10 +367,22 @@ func (cmd *sharePrivateCommand) run(_ *cobra.Command, args []string) { }() default: - tui.Error("invalid backend mode", nil) + cmd.error("unable to create share", errors.New("invalid backend mode")) } - if cmd.headless { + if cmd.subordinate { + data := make(map[string]interface{}) + data[subordinate.MessageKey] = subordinate.BootMessage + data["token"] = shr.Token + data["frontend_endpoints"] = shr.FrontendEndpoints + jsonData, err := json.Marshal(data) + if err != nil { + cmd.error("unable to create share", err) + } + fmt.Println(string(jsonData)) + } + + if cmd.headless && !cmd.subordinate { logrus.Infof("allow other to access your share with the following command:\nzrok access private %v", shr.Token) for { select { @@ -363,6 +391,23 @@ func (cmd *sharePrivateCommand) run(_ *cobra.Command, args []string) { } } + } else if cmd.subordinate { + for { + select { + case req := <-requests: + data := make(map[string]interface{}) + data[subordinate.MessageKey] = "access" + data["remote_address"] = req.RemoteAddr + data["method"] = req.Method + data["path"] = req.Path + jsonData, err := json.Marshal(data) + if err != nil { + fmt.Println(err) + } + fmt.Println(string(jsonData)) + } + } + } else { logrus.SetOutput(mdl) prg := tea.NewProgram(mdl, tea.WithAltScreen()) @@ -386,6 +431,16 @@ func (cmd *sharePrivateCommand) run(_ *cobra.Command, args []string) { } } +func (cmd *sharePrivateCommand) error(msg string, err error) { + if cmd.subordinate { + subordinateError(errors.Wrap(err, msg)) + } + if !panicInstead { + tui.Error(msg, err) + } + panic(errors.Wrap(err, msg)) +} + func (cmd *sharePrivateCommand) shutdown(root env_core.Root, shr *sdk.Share) { logrus.Debugf("shutting down '%v'", shr.Token) if err := sdk.DeleteShare(root, shr); err != nil { @@ -393,3 +448,112 @@ func (cmd *sharePrivateCommand) shutdown(root env_core.Root, shr *sdk.Share) { } logrus.Debugf("shutdown complete") } + +func (cmd *sharePrivateCommand) shareAgent(args []string, root env_core.Root) { + var target string + + switch cmd.backendMode { + case "proxy": + if len(args) != 1 { + tui.Error("the 'proxy' backend mode expects a ", nil) + } + v, err := parseUrl(args[0]) + if err != nil { + if !panicInstead { + tui.Error("invalid target endpoint URL", err) + } + panic(err) + } + target = v + + case "web": + if len(args) != 1 { + tui.Error("the 'web' backend mode expects a ", nil) + } + v, err := filepath.Abs(args[0]) + if err != nil { + if !panicInstead { + tui.Error("invalid target endpoint URL", err) + } + panic(err) + } + target = v + + case "tcpTunnel": + if len(args) != 1 { + tui.Error("the 'tcpTunnel' backend mode expects a ", nil) + } + target = args[0] + + case "udpTunnel": + if len(args) != 1 { + tui.Error("the 'udpTunnel' backend mode expects a ", nil) + } + target = args[0] + + case "caddy": + if len(args) != 1 { + tui.Error("the 'caddy' backend mode expects a ", nil) + } + v, err := filepath.Abs(args[0]) + if err != nil { + if !panicInstead { + tui.Error("invalid target endpoint URL", err) + } + panic(err) + } + target = v + + case "drive": + if len(args) != 1 { + tui.Error("the 'drive' backend mode expects a ", nil) + } + v, err := filepath.Abs(args[0]) + if err != nil { + if !panicInstead { + tui.Error("invalid target endpoint URL", err) + } + panic(err) + } + target = v + + case "socks": + if len(args) != 0 { + tui.Error("the 'socks' backend mode does not expect ", nil) + } + target = "socks" + + case "vpn": + if len(args) == 1 { + _, _, err := net.ParseCIDR(args[0]) + if err != nil { + tui.Error("the 'vpn' backend expect valid CIDR ", err) + } + target = args[0] + } else { + target = vpn.DefaultTarget() + } + + default: + tui.Error(fmt.Sprintf("invalid backend mode '%v'", cmd.backendMode), nil) + } + + client, conn, err := agentClient.NewClient(root) + if err != nil { + tui.Error("error connecting to agent", err) + } + defer func() { _ = conn.Close() }() + + shr, err := client.SharePrivate(context.Background(), &agentGrpc.SharePrivateRequest{ + Target: target, + BackendMode: cmd.backendMode, + Insecure: cmd.insecure, + Closed: cmd.closed, + AccessGrants: cmd.accessGrants, + }) + if err != nil { + tui.Error("error creating share", err) + } + + fmt.Println(shr) +} diff --git a/cmd/zrok/sharePublic.go b/cmd/zrok/sharePublic.go index d66867df..91de615d 100644 --- a/cmd/zrok/sharePublic.go +++ b/cmd/zrok/sharePublic.go @@ -1,20 +1,27 @@ package main import ( + "context" + "encoding/json" "fmt" tea "github.com/charmbracelet/bubbletea" "github.com/gobwas/glob" + "github.com/openziti/zrok/agent/agentClient" + "github.com/openziti/zrok/agent/agentGrpc" + "github.com/openziti/zrok/cmd/zrok/subordinate" "github.com/openziti/zrok/endpoints" - drive "github.com/openziti/zrok/endpoints/drive" + "github.com/openziti/zrok/endpoints/drive" "github.com/openziti/zrok/endpoints/proxy" "github.com/openziti/zrok/environment" "github.com/openziti/zrok/environment/env_core" "github.com/openziti/zrok/sdk/golang/sdk" "github.com/openziti/zrok/tui" + "github.com/pkg/errors" "github.com/sirupsen/logrus" "github.com/spf13/cobra" "os" "os/signal" + "path/filepath" "strings" "syscall" "time" @@ -29,6 +36,9 @@ type sharePublicCommand struct { frontendSelection []string backendMode string headless bool + subordinate bool + forceLocal bool + forceAgent bool insecure bool oauthProvider string oauthEmailAddressPatterns []string @@ -50,13 +60,21 @@ func newSharePublicCommand() *sharePublicCommand { defaultFrontend, _ := root.DefaultFrontend() defaultFrontends = []string{defaultFrontend} } + headless := false + if root, err := environment.LoadRoot(); err == nil { + headless, _ = root.Headless() + } cmd.Flags().StringArrayVar(&command.frontendSelection, "frontend", defaultFrontends, "Selected frontends to use for the share") cmd.Flags().StringVarP(&command.backendMode, "backend-mode", "b", "proxy", "The backend mode {proxy, web, caddy, drive}") - cmd.Flags().BoolVar(&command.headless, "headless", false, "Disable TUI and run headless") + cmd.Flags().BoolVar(&command.headless, "headless", headless, "Disable TUI and run headless") + cmd.Flags().BoolVar(&command.subordinate, "subordinate", false, "Enable agent mode") + cmd.MarkFlagsMutuallyExclusive("headless", "subordinate") + cmd.Flags().BoolVar(&command.forceLocal, "force-local", false, "Skip agent detection and force local mode") + cmd.Flags().BoolVar(&command.forceAgent, "force-agent", false, "Skip agent detection and force agent mode") + cmd.MarkFlagsMutuallyExclusive("force-local", "force-agent") cmd.Flags().BoolVar(&command.insecure, "insecure", false, "Enable insecure TLS certificate validation for ") cmd.Flags().BoolVar(&command.closed, "closed", false, "Enable closed permission mode (see --access-grant)") cmd.Flags().StringArrayVar(&command.accessGrants, "access-grant", []string{}, "zrok accounts that are allowed to access this share (see --closed)") - cmd.Flags().StringArrayVar(&command.basicAuth, "basic-auth", []string{}, "Basic authentication users (,...)") cmd.Flags().StringVar(&command.oauthProvider, "oauth-provider", "", "Enable OAuth provider [google, github]") cmd.Flags().StringArrayVar(&command.oauthEmailAddressPatterns, "oauth-email-address-patterns", []string{}, "Allow only these email domain globs to authenticate via OAuth") @@ -68,16 +86,45 @@ func newSharePublicCommand() *sharePublicCommand { } func (cmd *sharePublicCommand) run(_ *cobra.Command, args []string) { + if cmd.subordinate { + logrus.SetFormatter(&logrus.JSONFormatter{TimestampFormat: time.RFC3339Nano}) + } + + root, err := environment.LoadRoot() + if err != nil { + cmd.error("error loading environment", err) + } + + if !root.IsEnabled() { + cmd.error("unable to create share", errors.New("unable to load environment; did you 'zrok enable'?")) + } + + if cmd.subordinate || cmd.forceLocal { + cmd.shareLocal(args, root) + } else { + agent := cmd.forceAgent + if !cmd.forceAgent { + agent, err = agentClient.IsAgentRunning(root) + if err != nil { + tui.Error("error checking if agent is running", err) + } + } + if agent { + cmd.shareAgent(args, root) + } else { + cmd.shareLocal(args, root) + } + } +} + +func (cmd *sharePublicCommand) shareLocal(args []string, root env_core.Root) { var target string switch cmd.backendMode { case "proxy": v, err := parseUrl(args[0]) if err != nil { - if !panicInstead { - tui.Error("invalid target endpoint URL", err) - } - panic(err) + cmd.error("invalid target endpoint URL", err) } target = v @@ -92,27 +139,12 @@ func (cmd *sharePublicCommand) run(_ *cobra.Command, args []string) { target = args[0] default: - tui.Error(fmt.Sprintf("invalid backend mode '%v'; expected {proxy, web, caddy, drive}", cmd.backendMode), nil) - } - - root, err := environment.LoadRoot() - if err != nil { - if !panicInstead { - tui.Error("unable to load environment", err) - } - panic(err) - } - - if !root.IsEnabled() { - tui.Error("unable to load environment; did you 'zrok enable'?", nil) + cmd.error("unable to create share", fmt.Errorf("invalid backend mode '%v'; expected {proxy, web, caddy, drive}", cmd.backendMode)) } zif, err := root.ZitiIdentityNamed(root.EnvironmentIdentityName()) if err != nil { - if !panicInstead { - tui.Error("unable to access ziti identity file", err) - } - panic(err) + cmd.error("unable to access ziti identity file", err) } req := &sdk.ShareRequest{ @@ -134,23 +166,17 @@ func (cmd *sharePublicCommand) run(_ *cobra.Command, args []string) { for _, g := range cmd.oauthEmailAddressPatterns { _, err := glob.Compile(g) if err != nil { - if !panicInstead { - tui.Error(fmt.Sprintf("unable to create share, invalid oauth email glob (%v)", g), err) - } - panic(err) + cmd.error(fmt.Sprintf("unable to create share, invalid oauth email glob (%v)", g), err) } } } shr, err := sdk.CreateShare(root, req) if err != nil { - if !panicInstead { - tui.Error("unable to create share", err) - } - panic(err) + cmd.error("unable to create share", err) } mdl := newShareModel(shr.Token, shr.FrontendEndpoints, sdk.PublicShareMode, sdk.BackendMode(cmd.backendMode)) - if !cmd.headless { + if !cmd.headless && !cmd.subordinate { proxy.SetCaddyLoggingWriter(mdl) } @@ -176,10 +202,7 @@ func (cmd *sharePublicCommand) run(_ *cobra.Command, args []string) { be, err := proxy.NewBackend(cfg) if err != nil { - if !panicInstead { - tui.Error("error creating proxy backend", err) - } - panic(err) + cmd.error("unable to create proxy backend", err) } go func() { @@ -198,10 +221,7 @@ func (cmd *sharePublicCommand) run(_ *cobra.Command, args []string) { be, err := proxy.NewCaddyWebBackend(cfg) if err != nil { - if !panicInstead { - tui.Error("unable to create web backend", err) - } - panic(err) + cmd.error("unable to create web backend", err) } go func() { @@ -220,10 +240,7 @@ func (cmd *sharePublicCommand) run(_ *cobra.Command, args []string) { be, err := proxy.NewCaddyfileBackend(cfg) if err != nil { cmd.shutdown(root, shr) - if !panicInstead { - tui.Error("unable to create caddy backend", err) - } - panic(err) + cmd.error("unable to create caddy backend", err) } go func() { @@ -242,10 +259,7 @@ func (cmd *sharePublicCommand) run(_ *cobra.Command, args []string) { be, err := drive.NewBackend(cfg) if err != nil { - if !panicInstead { - tui.Error("error creating drive backend", err) - } - panic(err) + cmd.error("unable to create drive backend", err) } go func() { @@ -258,7 +272,19 @@ func (cmd *sharePublicCommand) run(_ *cobra.Command, args []string) { tui.Error("invalid backend mode", nil) } - if cmd.headless { + if cmd.subordinate { + data := make(map[string]interface{}) + data[subordinate.MessageKey] = subordinate.BootMessage + data["token"] = shr.Token + data["frontend_endpoints"] = shr.FrontendEndpoints + jsonData, err := json.Marshal(data) + if err != nil { + cmd.error("unable to marshal", err) + } + fmt.Println(string(jsonData)) + } + + if cmd.headless && !cmd.subordinate { logrus.Infof("access your zrok share at the following endpoints:\n %v", strings.Join(shr.FrontendEndpoints, "\n")) for { select { @@ -267,6 +293,23 @@ func (cmd *sharePublicCommand) run(_ *cobra.Command, args []string) { } } + } else if cmd.subordinate { + for { + select { + case req := <-requests: + data := make(map[string]interface{}) + data[subordinate.MessageKey] = "access" + data["remote_address"] = req.RemoteAddr + data["method"] = req.Method + data["path"] = req.Path + jsonData, err := json.Marshal(data) + if err != nil { + fmt.Println(err) + } + fmt.Println(string(jsonData)) + } + } + } else { logrus.SetOutput(mdl) prg := tea.NewProgram(mdl, tea.WithAltScreen()) @@ -290,6 +333,16 @@ func (cmd *sharePublicCommand) run(_ *cobra.Command, args []string) { } } +func (cmd *sharePublicCommand) error(msg string, err error) { + if cmd.subordinate { + subordinateError(errors.Wrap(err, msg)) + } + if !panicInstead { + tui.Error(msg, err) + } + panic(errors.Wrap(err, msg)) +} + func (cmd *sharePublicCommand) shutdown(root env_core.Root, shr *sdk.Share) { logrus.Debugf("shutting down '%v'", shr.Token) if err := sdk.DeleteShare(root, shr); err != nil { @@ -297,3 +350,76 @@ func (cmd *sharePublicCommand) shutdown(root env_core.Root, shr *sdk.Share) { } logrus.Debugf("shutdown complete") } + +func (cmd *sharePublicCommand) shareAgent(args []string, root env_core.Root) { + var target string + + switch cmd.backendMode { + case "proxy": + v, err := parseUrl(args[0]) + if err != nil { + if !panicInstead { + tui.Error("invalid target endpoint URL", err) + } + panic(err) + } + target = v + + case "web": + v, err := filepath.Abs(args[0]) + if err != nil { + if !panicInstead { + tui.Error("invalid target endpoint URL", err) + } + panic(err) + } + target = v + + case "caddy": + v, err := filepath.Abs(args[0]) + if err != nil { + if !panicInstead { + tui.Error("invalid target endpoint URL", err) + } + panic(err) + } + target = v + + case "drive": + v, err := filepath.Abs(args[0]) + if err != nil { + if !panicInstead { + tui.Error("invalid target endpoint URL", err) + } + panic(err) + } + target = v + + default: + tui.Error(fmt.Sprintf("invalid backend mode '%v'", cmd.backendMode), nil) + } + + client, conn, err := agentClient.NewClient(root) + if err != nil { + tui.Error("error connecting to agent", err) + } + defer func() { _ = conn.Close() }() + + shr, err := client.SharePublic(context.Background(), &agentGrpc.SharePublicRequest{ + Target: target, + BasicAuth: cmd.basicAuth, + FrontendSelection: cmd.frontendSelection, + BackendMode: cmd.backendMode, + Insecure: cmd.insecure, + OauthProvider: cmd.oauthProvider, + OauthEmailAddressPatterns: cmd.oauthEmailAddressPatterns, + OauthCheckInterval: cmd.oauthCheckInterval.String(), + Closed: cmd.closed, + AccessGrants: cmd.accessGrants, + }) + if err != nil { + tui.Error("error creating share", err) + } + + fmt.Println(shr) +} diff --git a/cmd/zrok/shareReserved.go b/cmd/zrok/shareReserved.go index 0d5688e4..b02641cd 100644 --- a/cmd/zrok/shareReserved.go +++ b/cmd/zrok/shareReserved.go @@ -1,9 +1,14 @@ package main import ( + "context" + "encoding/json" "fmt" tea "github.com/charmbracelet/bubbletea" httptransport "github.com/go-openapi/runtime/client" + "github.com/openziti/zrok/agent/agentClient" + "github.com/openziti/zrok/agent/agentGrpc" + "github.com/openziti/zrok/cmd/zrok/subordinate" "github.com/openziti/zrok/endpoints" "github.com/openziti/zrok/endpoints/drive" "github.com/openziti/zrok/endpoints/proxy" @@ -12,13 +17,15 @@ import ( "github.com/openziti/zrok/endpoints/udpTunnel" "github.com/openziti/zrok/endpoints/vpn" "github.com/openziti/zrok/environment" + "github.com/openziti/zrok/environment/env_core" "github.com/openziti/zrok/rest_client_zrok/metadata" "github.com/openziti/zrok/rest_client_zrok/share" - "github.com/openziti/zrok/rest_model_zrok" "github.com/openziti/zrok/sdk/golang/sdk" "github.com/openziti/zrok/tui" + "github.com/pkg/errors" "github.com/sirupsen/logrus" "github.com/spf13/cobra" + "time" ) func init() { @@ -28,6 +35,9 @@ func init() { type shareReservedCommand struct { overrideEndpoint string headless bool + subordinate bool + forceLocal bool + forceAgent bool insecure bool cmd *cobra.Command } @@ -39,45 +49,68 @@ func newShareReservedCommand() *shareReservedCommand { Args: cobra.ExactArgs(1), } command := &shareReservedCommand{cmd: cmd} + headless := false + if root, err := environment.LoadRoot(); err == nil { + headless, _ = root.Headless() + } cmd.Flags().StringVar(&command.overrideEndpoint, "override-endpoint", "", "Override the stored target endpoint with a replacement") - cmd.Flags().BoolVar(&command.headless, "headless", false, "Disable TUI and run headless") + cmd.Flags().BoolVar(&command.headless, "headless", headless, "Disable TUI and run headless") + cmd.Flags().BoolVar(&command.subordinate, "subordinate", false, "Enable agent mode") + cmd.MarkFlagsMutuallyExclusive("headless", "subordinate") + cmd.Flags().BoolVar(&command.forceLocal, "force-local", false, "Skip agent detection and force local mode") + cmd.Flags().BoolVar(&command.forceAgent, "force-agent", false, "Skip agent detection and force agent mode") + cmd.MarkFlagsMutuallyExclusive("force-local", "force-agent") cmd.Flags().BoolVar(&command.insecure, "insecure", false, "Enable insecure TLS certificate validation") cmd.Run = command.run return command } func (cmd *shareReservedCommand) run(_ *cobra.Command, args []string) { - shrToken := args[0] - var target string + if cmd.subordinate { + logrus.SetFormatter(&logrus.JSONFormatter{TimestampFormat: time.RFC3339Nano}) + } root, err := environment.LoadRoot() if err != nil { - if !panicInstead { - tui.Error("error loading environment", err) - } - panic(err) + cmd.error("error loading environment", err) } if !root.IsEnabled() { - tui.Error("unable to load environment; did you 'zrok enable'?", nil) + cmd.error("unable to create share", errors.New("unable to load environment; did you 'zrok enable'?")) } + if cmd.subordinate || cmd.forceLocal { + cmd.shareLocal(args, root) + } else { + agent := cmd.forceAgent + if !cmd.forceAgent { + agent, err = agentClient.IsAgentRunning(root) + if err != nil { + tui.Error("error checking if agent is running", err) + } + } + if agent { + cmd.shareAgent(args, root) + } else { + cmd.shareLocal(args, root) + } + } +} + +func (cmd *shareReservedCommand) shareLocal(args []string, root env_core.Root) { + shrToken := args[0] + var target string + zrok, err := root.Client() if err != nil { - if !panicInstead { - tui.Error("unable to create zrok client", err) - } - panic(err) + cmd.error("unable to create zrok client", err) } auth := httptransport.APIKeyAuth("X-TOKEN", "header", root.Environment().Token) req := metadata.NewGetShareDetailParams() - req.ShrToken = shrToken + req.ShareToken = shrToken resp, err := zrok.Metadata.GetShareDetail(req, auth) if err != nil { - if !panicInstead { - tui.Error("unable to retrieve reserved share", err) - } - panic(err) + cmd.error("unable to retrieve reserved share", err) } target = cmd.overrideEndpoint if target == "" { @@ -89,30 +122,28 @@ func (cmd *shareReservedCommand) run(_ *cobra.Command, args []string) { zif, err := root.ZitiIdentityNamed(root.EnvironmentIdentityName()) if err != nil { - if !panicInstead { - tui.Error("unable to load ziti identity configuration", err) - } - panic(err) + cmd.error("unable to load ziti identity configuration", err) } if resp.Payload.BackendMode != "socks" { - logrus.Infof("sharing target: '%v'", target) + if !cmd.subordinate { + logrus.Infof("sharing target: '%v'", target) + } if resp.Payload.BackendProxyEndpoint != target { upReq := share.NewUpdateShareParams() - upReq.Body = &rest_model_zrok.UpdateShareRequest{ - ShrToken: shrToken, - BackendProxyEndpoint: target, - } + upReq.Body.ShareToken = shrToken + upReq.Body.BackendProxyEndpoint = target if _, err := zrok.Share.UpdateShare(upReq, auth); err != nil { - if !panicInstead { - tui.Error("unable to update backend target", err) - } - panic(err) + cmd.error("unable to update backend target", err) + } + if !cmd.subordinate { + logrus.Infof("updated backend target to: %v", target) } - logrus.Infof("updated backend target to: %v", target) } else { - logrus.Infof("using existing backend target: %v", target) + if !cmd.subordinate { + logrus.Infof("using existing backend target: %v", target) + } } } @@ -125,7 +156,7 @@ func (cmd *shareReservedCommand) run(_ *cobra.Command, args []string) { } mdl := newShareModel(shrToken, []string{shareDescription}, sdk.ShareMode(resp.Payload.ShareMode), sdk.BackendMode(resp.Payload.BackendMode)) - if !cmd.headless { + if !cmd.headless && !cmd.subordinate { proxy.SetCaddyLoggingWriter(mdl) } @@ -142,10 +173,7 @@ func (cmd *shareReservedCommand) run(_ *cobra.Command, args []string) { be, err := proxy.NewBackend(cfg) if err != nil { - if !panicInstead { - tui.Error("unable to create proxy backend handler", err) - } - panic(err) + cmd.error("unable to create 'proxy' backend", err) } go func() { @@ -164,10 +192,7 @@ func (cmd *shareReservedCommand) run(_ *cobra.Command, args []string) { be, err := proxy.NewCaddyWebBackend(cfg) if err != nil { - if !panicInstead { - tui.Error("error creating web backend", err) - } - panic(err) + cmd.error("unable to create 'web' backend", err) } go func() { @@ -186,10 +211,7 @@ func (cmd *shareReservedCommand) run(_ *cobra.Command, args []string) { be, err := tcpTunnel.NewBackend(cfg) if err != nil { - if !panicInstead { - tui.Error("error creating tcpTunnel backend", err) - } - panic(err) + cmd.error("unable to create 'tcpTunnel' backend", err) } go func() { @@ -208,10 +230,7 @@ func (cmd *shareReservedCommand) run(_ *cobra.Command, args []string) { be, err := udpTunnel.NewBackend(cfg) if err != nil { - if !panicInstead { - tui.Error("error creating udpTunnel backend", err) - } - panic(err) + cmd.error("unable to create 'udpTunnel' backend", err) } go func() { @@ -229,10 +248,7 @@ func (cmd *shareReservedCommand) run(_ *cobra.Command, args []string) { be, err := proxy.NewCaddyfileBackend(cfg) if err != nil { - if !panicInstead { - tui.Error("error creating caddy backend", err) - } - panic(err) + cmd.error("unable to create 'caddy' backend", err) } go func() { @@ -251,10 +267,7 @@ func (cmd *shareReservedCommand) run(_ *cobra.Command, args []string) { be, err := drive.NewBackend(cfg) if err != nil { - if !panicInstead { - tui.Error("error creating drive backend", err) - } - panic(err) + cmd.error("unable to create 'drive' backend", err) } go func() { @@ -272,10 +285,7 @@ func (cmd *shareReservedCommand) run(_ *cobra.Command, args []string) { be, err := socks.NewBackend(cfg) if err != nil { - if !panicInstead { - tui.Error("error creating socks backend", err) - } - panic(err) + cmd.error("unable to create 'socks' backend", err) } go func() { @@ -294,10 +304,7 @@ func (cmd *shareReservedCommand) run(_ *cobra.Command, args []string) { be, err := vpn.NewBackend(cfg) if err != nil { - if !panicInstead { - tui.Error("error creating VPN backend", err) - } - panic(err) + cmd.error("unable to create 'vpn' backend", err) } go func() { @@ -307,10 +314,29 @@ func (cmd *shareReservedCommand) run(_ *cobra.Command, args []string) { }() default: - tui.Error("invalid backend mode", nil) + cmd.error("unable to share", errors.New("invalid backend mode")) } - if cmd.headless { + if cmd.subordinate { + data := make(map[string]interface{}) + data[subordinate.MessageKey] = subordinate.BootMessage + data["token"] = resp.Payload.ShareToken + data["backend_mode"] = resp.Payload.BackendMode + data["share_mode"] = resp.Payload.ShareMode + if resp.Payload.FrontendEndpoint != "" { + data["frontend_endpoints"] = resp.Payload.FrontendEndpoint + } + if resp.Payload.BackendProxyEndpoint != "" { + data["target"] = resp.Payload.BackendProxyEndpoint + } + jsonData, err := json.Marshal(data) + if err != nil { + cmd.error("unable to marshal", err) + } + fmt.Println(string(jsonData)) + } + + if cmd.headless && !cmd.subordinate { switch resp.Payload.ShareMode { case string(sdk.PublicShareMode): logrus.Infof("access your zrok share: %v", resp.Payload.FrontendEndpoint) @@ -324,6 +350,24 @@ func (cmd *shareReservedCommand) run(_ *cobra.Command, args []string) { logrus.Infof("%v -> %v %v", req.RemoteAddr, req.Method, req.Path) } } + + } else if cmd.subordinate { + for { + select { + case req := <-requests: + data := make(map[string]interface{}) + data[subordinate.MessageKey] = "access" + data["remote-address"] = req.RemoteAddr + data["method"] = req.Method + data["path"] = req.Path + jsonData, err := json.Marshal(data) + if err != nil { + fmt.Println(err) + } + fmt.Println(string(jsonData)) + } + } + } else { logrus.SetOutput(mdl) prg := tea.NewProgram(mdl, tea.WithAltScreen()) @@ -345,3 +389,34 @@ func (cmd *shareReservedCommand) run(_ *cobra.Command, args []string) { close(requests) } } + +func (cmd *shareReservedCommand) error(msg string, err error) { + if cmd.subordinate { + subordinateError(errors.Wrap(err, msg)) + } + if !panicInstead { + tui.Error(msg, err) + } + panic(errors.Wrap(err, msg)) +} + +func (cmd *shareReservedCommand) shareAgent(args []string, root env_core.Root) { + logrus.Info("starting") + + client, conn, err := agentClient.NewClient(root) + if err != nil { + tui.Error("error connecting to agent", err) + } + defer func() { _ = conn.Close() }() + + shr, err := client.ShareReserved(context.Background(), &agentGrpc.ShareReservedRequest{ + Token: args[0], + OverrideEndpoint: cmd.overrideEndpoint, + Insecure: cmd.insecure, + }) + if err != nil { + tui.Error("error sharing reserved share", err) + } + + fmt.Println(shr) +} diff --git a/cmd/zrok/status.go b/cmd/zrok/status.go index f54f83cb..304b7dca 100644 --- a/cmd/zrok/status.go +++ b/cmd/zrok/status.go @@ -52,6 +52,8 @@ func (cmd *statusCommand) run(_ *cobra.Command, _ []string) { t.AppendRow(table.Row{"apiEndpoint", apiEndpoint, apiEndpointFrom}) defaultFrontend, defaultFrontendFrom := env.DefaultFrontend() t.AppendRow(table.Row{"defaultFrontend", defaultFrontend, defaultFrontendFrom}) + headless, headlessFrom := env.Headless() + t.AppendRow(table.Row{"headless", headless, headlessFrom}) t.Render() _, _ = fmt.Fprintf(os.Stderr, "\n") diff --git a/cmd/zrok/subordinate/message.go b/cmd/zrok/subordinate/message.go new file mode 100644 index 00000000..95890954 --- /dev/null +++ b/cmd/zrok/subordinate/message.go @@ -0,0 +1,86 @@ +package subordinate + +import ( + "bytes" + "encoding/json" + "github.com/sirupsen/logrus" + "strings" +) + +const ( + MessageKey = "msg" + RawMessage = "raw" + BootMessage = "boot" + ErrorMessage = "error" +) + +type Message map[string]interface{} + +type MessageHandler struct { + BootHandler func(string, Message) + MessageHandler func(Message) + MalformedHandler func(Message) + BootComplete chan struct{} + readBuffer bytes.Buffer + booted bool +} + +func NewMessageHandler() *MessageHandler { + return &MessageHandler{ + BootComplete: make(chan struct{}), + } +} + +func (h *MessageHandler) Tail(data []byte) { + defer func() { + if r := recover(); r != nil { + logrus.Errorf("recovered: %v", r) + } + }() + + h.readBuffer.Write(data) + if line, err := h.readBuffer.ReadString('\n'); err == nil { + line = strings.Trim(line, "\n \t") + logrus.Debugf("line: '%v'", line) + msg := make(map[string]interface{}) + if !h.booted { + if line[0] == '{' { + if err := json.Unmarshal([]byte(line), &msg); err == nil { + if v, found := msg[MessageKey]; found { + if vStr, ok := v.(string); ok { + if vStr == BootMessage || vStr == ErrorMessage { + h.BootHandler(vStr, msg) + h.booted = true + close(h.BootComplete) + } else { + h.MessageHandler(msg) + } + } else { + h.MalformedHandler(msg) + } + } else { + h.MalformedHandler(msg) + } + } else { + msg[MessageKey] = RawMessage + msg[RawMessage] = line + h.MessageHandler(msg) + } + } else { + msg[MessageKey] = RawMessage + msg[RawMessage] = line + h.MessageHandler(msg) + } + } else { + if line[0] == '{' { + if err := json.Unmarshal([]byte(line), &msg); err != nil { + logrus.Error(line) + } + } else { + msg[MessageKey] = RawMessage + msg[RawMessage] = line + } + h.MessageHandler(msg) + } + } +} diff --git a/cmd/zrok/util.go b/cmd/zrok/util.go index 6a04d288..887106b8 100644 --- a/cmd/zrok/util.go +++ b/cmd/zrok/util.go @@ -1,9 +1,11 @@ package main import ( + "encoding/json" "fmt" "github.com/go-openapi/runtime" httptransport "github.com/go-openapi/runtime/client" + "github.com/openziti/zrok/cmd/zrok/subordinate" "github.com/pkg/errors" "math" "net/url" @@ -45,3 +47,15 @@ func parseUrl(in string) (string, error) { return targetEndpoint.String(), nil } + +func subordinateError(err error) { + msg := make(map[string]interface{}) + msg[subordinate.MessageKey] = subordinate.ErrorMessage + msg[subordinate.ErrorMessage] = err.Error() + if data, err := json.Marshal(msg); err == nil { + fmt.Println(string(data)) + } else { + fmt.Println("{\"" + subordinate.MessageKey + "\":\"" + subordinate.ErrorMessage + "\",\"" + subordinate.ErrorMessage + "\":\"internal error\"}") + } + os.Exit(1) +} diff --git a/controller/access.go b/controller/access.go index e3fc9d9a..15ad155c 100644 --- a/controller/access.go +++ b/controller/access.go @@ -46,7 +46,7 @@ func (h *accessHandler) Handle(params share.AccessParams, principal *rest_model_ return share.NewAccessNotFound() } - shrToken := params.Body.ShrToken + shrToken := params.Body.ShareToken shr, err := str.FindShareWithToken(shrToken, trx) if err != nil { logrus.Errorf("error finding share with token '%v': %v", shrToken, err) @@ -106,7 +106,7 @@ func (h *accessHandler) Handle(params share.AccessParams, principal *rest_model_ return share.NewAccessInternalServerError() } - return share.NewAccessCreated().WithPayload(&rest_model_zrok.AccessResponse{ + return share.NewAccessCreated().WithPayload(&share.AccessCreatedBody{ FrontendToken: feToken, BackendMode: shr.BackendMode, }) diff --git a/controller/addOrganizationMember.go b/controller/addOrganizationMember.go index b9c7e1db..360c38ba 100644 --- a/controller/addOrganizationMember.go +++ b/controller/addOrganizationMember.go @@ -32,9 +32,9 @@ func (h *addOrganizationMemberHandler) Handle(params admin.AddOrganizationMember return admin.NewAddOrganizationMemberNotFound() } - org, err := str.FindOrganizationByToken(params.Body.Token, trx) + org, err := str.FindOrganizationByToken(params.Body.OrganizationToken, trx) if err != nil { - logrus.Errorf("error finding organization '%v': %v", params.Body.Token, err) + logrus.Errorf("error finding organization '%v': %v", params.Body.OrganizationToken, err) return admin.NewAddOrganizationMemberNotFound() } diff --git a/controller/changePassword.go b/controller/changePassword.go index ab05a494..a767ac6b 100644 --- a/controller/changePassword.go +++ b/controller/changePassword.go @@ -19,7 +19,7 @@ func newChangePasswordHandler(cfg *config.Config) *changePasswordHandler { } func (handler *changePasswordHandler) Handle(params account.ChangePasswordParams, principal *rest_model_zrok.Principal) middleware.Responder { - if params.Body == nil || params.Body.Email == "" || params.Body.OldPassword == "" || params.Body.NewPassword == "" { + if params.Body.Email == "" || params.Body.OldPassword == "" || params.Body.NewPassword == "" { logrus.Error("missing email, old, or new password") return account.NewChangePasswordUnauthorized() } diff --git a/controller/config/config.go b/controller/config/config.go index 3a1589d4..68181e17 100644 --- a/controller/config/config.go +++ b/controller/config/config.go @@ -28,7 +28,6 @@ type Config struct { Limits *limits.Config Maintenance *MaintenanceConfig Metrics *metrics.Config - Passwords *PasswordsConfig Registration *RegistrationConfig ResetPassword *ResetPasswordConfig Store *store.Config @@ -58,14 +57,6 @@ type MaintenanceConfig struct { Registration *RegistrationMaintenanceConfig } -type PasswordsConfig struct { - Length int - RequireCapital bool - RequireNumeric bool - RequireSpecial bool - ValidSpecialCharacters string -} - type RegistrationConfig struct { RegistrationUrlTemplate string } @@ -106,13 +97,6 @@ func DefaultConfig() *Config { BatchLimit: 500, }, }, - Passwords: &PasswordsConfig{ - Length: 8, - RequireCapital: true, - RequireNumeric: true, - RequireSpecial: true, - ValidSpecialCharacters: `!@$&*_-., "#%'()+/:;<=>?[\]^{|}~`, - }, } } diff --git a/controller/configuration.go b/controller/configuration.go index de104469..fc021fa6 100644 --- a/controller/configuration.go +++ b/controller/configuration.go @@ -30,14 +30,5 @@ func (ch *configurationHandler) Handle(_ metadata.ConfigurationParams) middlewar if cfg.Invites != nil { data.InviteTokenContact = cfg.Invites.TokenContact } - if cfg.Passwords != nil { - data.PasswordRequirements = &rest_model_zrok.PasswordRequirements{ - Length: int64(cfg.Passwords.Length), - RequireCapital: cfg.Passwords.RequireCapital, - RequireNumeric: cfg.Passwords.RequireNumeric, - RequireSpecial: cfg.Passwords.RequireSpecial, - ValidSpecialCharacters: cfg.Passwords.ValidSpecialCharacters, - } - } return metadata.NewConfigurationOK().WithPayload(data) } diff --git a/controller/controller.go b/controller/controller.go index e72c3c6a..90d17270 100644 --- a/controller/controller.go +++ b/controller/controller.go @@ -46,7 +46,7 @@ func Run(inCfg *config.Config) error { api.AccountChangePasswordHandler = newChangePasswordHandler(cfg) api.AccountInviteHandler = newInviteHandler(cfg) api.AccountLoginHandler = account.LoginHandlerFunc(loginHandler) - api.AccountRegenerateTokenHandler = newRegenerateTokenHandler() + api.AccountRegenerateAccountTokenHandler = newRegenerateAccountTokenHandler() api.AccountRegisterHandler = newRegisterHandler(cfg) api.AccountResetPasswordHandler = newResetPasswordHandler(cfg) api.AccountResetPasswordRequestHandler = newResetPasswordRequestHandler() @@ -67,8 +67,10 @@ func Run(inCfg *config.Config) error { api.AdminUpdateFrontendHandler = newUpdateFrontendHandler() api.EnvironmentEnableHandler = newEnableHandler() api.EnvironmentDisableHandler = newDisableHandler() - api.MetadataGetAccountDetailHandler = newAccountDetailHandler() api.MetadataConfigurationHandler = newConfigurationHandler(cfg) + api.MetadataClientVersionCheckHandler = metadata.ClientVersionCheckHandlerFunc(clientVersionCheckHandler) + api.MetadataGetAccountDetailHandler = newAccountDetailHandler() + api.MetadataGetSparklinesHandler = newSparklinesHandler() if cfg.Metrics != nil && cfg.Metrics.Influx != nil { api.MetadataGetAccountMetricsHandler = newGetAccountMetricsHandler(cfg.Metrics.Influx) api.MetadataGetEnvironmentMetricsHandler = newGetEnvironmentMetricsHandler(cfg.Metrics.Influx) @@ -86,6 +88,7 @@ func Run(inCfg *config.Config) error { api.ShareShareHandler = newShareHandler() api.ShareUnaccessHandler = newUnaccessHandler() api.ShareUnshareHandler = newUnshareHandler() + api.ShareUpdateAccessHandler = newUpdateAccessHandler() api.ShareUpdateShareHandler = newUpdateShareHandler() if err := controllerStartup(); err != nil { diff --git a/controller/createAccount.go b/controller/createAccount.go index 0fc5ef6a..269cff07 100644 --- a/controller/createAccount.go +++ b/controller/createAccount.go @@ -55,5 +55,5 @@ func (h *createAccountHandler) Handle(params admin.CreateAccountParams, principa logrus.Infof("administratively created account '%v'", params.Body.Email) - return admin.NewCreateAccountCreated().WithPayload(&admin.CreateAccountCreatedBody{Token: token}) + return admin.NewCreateAccountCreated().WithPayload(&admin.CreateAccountCreatedBody{AccountToken: token}) } diff --git a/controller/createFrontend.go b/controller/createFrontend.go index 882b753d..d1034398 100644 --- a/controller/createFrontend.go +++ b/controller/createFrontend.go @@ -88,5 +88,5 @@ func (h *createFrontendHandler) Handle(params admin.CreateFrontendParams, princi logrus.Infof("created global frontend '%v' with public name '%v'", fe.Token, *fe.PublicName) - return admin.NewCreateFrontendCreated().WithPayload(&rest_model_zrok.CreateFrontendResponse{Token: feToken}) + return admin.NewCreateFrontendCreated().WithPayload(&admin.CreateFrontendCreatedBody{FrontendToken: feToken}) } diff --git a/controller/createOrganization.go b/controller/createOrganization.go index a3b60ce2..d7bd1bbe 100644 --- a/controller/createOrganization.go +++ b/controller/createOrganization.go @@ -49,5 +49,5 @@ func (h *createOrganizationHandler) Handle(params admin.CreateOrganizationParams logrus.Infof("added organzation '%v' with description '%v'", org.Token, org.Description) - return admin.NewCreateOrganizationCreated().WithPayload(&admin.CreateOrganizationCreatedBody{Token: org.Token}) + return admin.NewCreateOrganizationCreated().WithPayload(&admin.CreateOrganizationCreatedBody{OrganizationToken: org.Token}) } diff --git a/controller/deleteOrganization.go b/controller/deleteOrganization.go index 70df1d5c..20f1f2ee 100644 --- a/controller/deleteOrganization.go +++ b/controller/deleteOrganization.go @@ -26,7 +26,7 @@ func (h *deleteOrganizationHandler) Handle(params admin.DeleteOrganizationParams } defer func() { _ = trx.Rollback() }() - org, err := str.FindOrganizationByToken(params.Body.Token, trx) + org, err := str.FindOrganizationByToken(params.Body.OrganizationToken, trx) if err != nil { logrus.Errorf("error finding organization by token: %v", err) return admin.NewDeleteOrganizationNotFound() diff --git a/controller/enable.go b/controller/enable.go index 56375edf..2f6254f0 100644 --- a/controller/enable.go +++ b/controller/enable.go @@ -81,9 +81,7 @@ func (h *enableHandler) Handle(params environment.EnableParams, principal *rest_ } logrus.Infof("created environment for '%v', with ziti identity '%v', and database id '%v'", principal.Email, ident.Payload.Data.ID, envId) - resp := environment.NewEnableCreated().WithPayload(&rest_model_zrok.EnableResponse{ - Identity: envZId, - }) + resp := environment.NewEnableCreated().WithPayload(&environment.EnableCreatedBody{Identity: envZId}) var out bytes.Buffer enc := json.NewEncoder(&out) diff --git a/controller/environmentDetail.go b/controller/environmentDetail.go index 5f401ad2..f6e52270 100644 --- a/controller/environmentDetail.go +++ b/controller/environmentDetail.go @@ -68,7 +68,7 @@ func (h *environmentDetailHandler) Handle(params metadata.GetEnvironmentDetailPa sparkData = append(sparkData, &rest_model_zrok.SparkDataSample{Rx: float64(sparkRx[shr.Token][i]), Tx: float64(sparkTx[shr.Token][i])}) } es.Shares = append(es.Shares, &rest_model_zrok.Share{ - Token: shr.Token, + ShareToken: shr.Token, ZID: shr.ZId, ShareMode: shr.ShareMode, BackendMode: shr.BackendMode, diff --git a/controller/frontendDetail.go b/controller/frontendDetail.go index 7d8fa2db..9c780fba 100644 --- a/controller/frontendDetail.go +++ b/controller/frontendDetail.go @@ -20,9 +20,9 @@ func (h *getFrontendDetailHandler) Handle(params metadata.GetFrontendDetailParam return metadata.NewGetFrontendDetailInternalServerError() } defer func() { _ = trx.Rollback() }() - fe, err := str.GetFrontend(int(params.FeID), trx) + fe, err := str.GetFrontend(int(params.FrontendID), trx) if err != nil { - logrus.Errorf("error finding share '%d': %v", params.FeID, err) + logrus.Errorf("error finding share '%d': %v", params.FrontendID, err) return metadata.NewGetFrontendDetailNotFound() } envs, err := str.FindEnvironmentsForAccount(int(principal.ID), trx) @@ -46,11 +46,17 @@ func (h *getFrontendDetailHandler) Handle(params metadata.GetFrontendDetailParam return metadata.NewGetFrontendDetailNotFound() } payload := &rest_model_zrok.Frontend{ - ID: int64(fe.Id), - Token: fe.Token, - ZID: fe.ZId, - CreatedAt: fe.CreatedAt.UnixMilli(), - UpdatedAt: fe.UpdatedAt.UnixMilli(), + ID: int64(fe.Id), + FrontendToken: fe.Token, + ZID: fe.ZId, + CreatedAt: fe.CreatedAt.UnixMilli(), + UpdatedAt: fe.UpdatedAt.UnixMilli(), + } + if fe.BindAddress != nil { + payload.BindAddress = *fe.BindAddress + } + if fe.Description != nil { + payload.Description = *fe.Description } if fe.PrivateShareId != nil { shr, err := str.GetShare(*fe.PrivateShareId, trx) @@ -58,7 +64,8 @@ func (h *getFrontendDetailHandler) Handle(params metadata.GetFrontendDetailParam logrus.Errorf("error getting share for frontend '%d': %v", fe.Id, err) return metadata.NewGetFrontendDetailInternalServerError() } - payload.ShrToken = shr.Token + payload.ShareToken = shr.Token + payload.BackendMode = shr.BackendMode } return metadata.NewGetFrontendDetailOK().WithPayload(payload) } diff --git a/controller/invite.go b/controller/invite.go index 57dd5851..bc4b229a 100644 --- a/controller/invite.go +++ b/controller/invite.go @@ -24,7 +24,7 @@ func (h *inviteHandler) Handle(params account.InviteParams) middleware.Responder logrus.Warnf("not accepting invites; attempt from '%v'", params.Body.Email) return account.NewInviteBadRequest() } - if params.Body == nil || params.Body.Email == "" { + if params.Body.Email == "" { logrus.Errorf("missing email") return account.NewInviteBadRequest() } @@ -33,7 +33,7 @@ func (h *inviteHandler) Handle(params account.InviteParams) middleware.Responder return account.NewInviteBadRequest() } logrus.Infof("received account request for email '%v'", params.Body.Email) - var token string + var regToken string tx, err := str.Begin() if err != nil { @@ -43,9 +43,9 @@ func (h *inviteHandler) Handle(params account.InviteParams) middleware.Responder defer func() { _ = tx.Rollback() }() if h.cfg.Invites != nil && h.cfg.Invites.TokenStrategy == "store" { - inviteToken, err := str.FindInviteTokenByToken(params.Body.Token, tx) + inviteToken, err := str.FindInviteTokenByToken(params.Body.InviteToken, tx) if err != nil { - logrus.Errorf("cannot get invite token '%v' for '%v': %v", params.Body.Token, params.Body.Email, err) + logrus.Errorf("cannot get invite token '%v' for '%v': %v", params.Body.InviteToken, params.Body.Email, err) return account.NewInviteBadRequest().WithPayload("missing invite token") } if err := str.DeleteInviteToken(inviteToken.Id, tx); err != nil { @@ -55,13 +55,13 @@ func (h *inviteHandler) Handle(params account.InviteParams) middleware.Responder logrus.Infof("using invite token '%v' to process invite request for '%v'", inviteToken.Token, params.Body.Email) } - token, err = CreateToken() + regToken, err = CreateToken() if err != nil { logrus.Error(err) return account.NewInviteInternalServerError() } ar := &store.AccountRequest{ - Token: token, + Token: regToken, Email: params.Body.Email, SourceAddress: params.HTTPRequest.RemoteAddr, } @@ -94,7 +94,7 @@ func (h *inviteHandler) Handle(params account.InviteParams) middleware.Responder } if cfg.Email != nil && cfg.Registration != nil { - if err := sendVerificationEmail(params.Body.Email, token); err != nil { + if err := sendVerificationEmail(params.Body.Email, regToken); err != nil { logrus.Errorf("error sending verification email for '%v': %v", params.Body.Email, err) return account.NewInviteInternalServerError() } diff --git a/controller/inviteTokenGenerate.go b/controller/inviteTokenGenerate.go index 7ada23f4..a92f4e33 100644 --- a/controller/inviteTokenGenerate.go +++ b/controller/inviteTokenGenerate.go @@ -22,14 +22,14 @@ func (handler *inviteTokenGenerateHandler) Handle(params admin.InviteTokenGenera return admin.NewInviteTokenGenerateUnauthorized() } - if params.Body == nil || len(params.Body.Tokens) == 0 { + if len(params.Body.InviteTokens) == 0 { logrus.Error("missing tokens") return admin.NewInviteTokenGenerateBadRequest() } - logrus.Infof("received invite generate request with %d tokens", len(params.Body.Tokens)) + logrus.Infof("received invite generate request with %d tokens", len(params.Body.InviteTokens)) - invites := make([]*store.InviteToken, len(params.Body.Tokens)) - for i, token := range params.Body.Tokens { + invites := make([]*store.InviteToken, len(params.Body.InviteTokens)) + for i, token := range params.Body.InviteTokens { invites[i] = &store.InviteToken{ Token: token, } diff --git a/controller/listFrontends.go b/controller/listFrontends.go index 00623ee8..8858ac6c 100644 --- a/controller/listFrontends.go +++ b/controller/listFrontends.go @@ -32,13 +32,13 @@ func (h *listFrontendsHandler) Handle(params admin.ListFrontendsParams, principa return admin.NewListFrontendsInternalServerError() } - var frontends rest_model_zrok.PublicFrontendList + var frontends []*admin.ListFrontendsOKBodyItems0 for _, sfe := range sfes { - frontend := &rest_model_zrok.PublicFrontend{ - Token: sfe.Token, - ZID: sfe.ZId, - CreatedAt: sfe.CreatedAt.UnixMilli(), - UpdatedAt: sfe.UpdatedAt.UnixMilli(), + frontend := &admin.ListFrontendsOKBodyItems0{ + FrontendToken: sfe.Token, + ZID: sfe.ZId, + CreatedAt: sfe.CreatedAt.UnixMilli(), + UpdatedAt: sfe.UpdatedAt.UnixMilli(), } if sfe.UrlTemplate != nil { frontend.URLTemplate = *sfe.UrlTemplate diff --git a/controller/listMemberships.go b/controller/listMemberships.go index e6e91f3d..9687372a 100644 --- a/controller/listMemberships.go +++ b/controller/listMemberships.go @@ -29,7 +29,7 @@ func (h *listMembershipsHandler) Handle(_ metadata.ListMembershipsParams, princi var out []*metadata.ListMembershipsOKBodyMembershipsItems0 for _, om := range oms { - out = append(out, &metadata.ListMembershipsOKBodyMembershipsItems0{Token: om.Token, Description: om.Description, Admin: om.Admin}) + out = append(out, &metadata.ListMembershipsOKBodyMembershipsItems0{OrganizationToken: om.Token, Description: om.Description, Admin: om.Admin}) } return metadata.NewListMembershipsOK().WithPayload(&metadata.ListMembershipsOKBody{Memberships: out}) } diff --git a/controller/listOrganizationMembers.go b/controller/listOrganizationMembers.go index e101bc49..002c5250 100644 --- a/controller/listOrganizationMembers.go +++ b/controller/listOrganizationMembers.go @@ -26,13 +26,13 @@ func (h *listOrganizationMembersHandler) Handle(params admin.ListOrganizationMem } defer func() { _ = trx.Rollback() }() - org, err := str.FindOrganizationByToken(params.Body.Token, trx) + org, err := str.FindOrganizationByToken(params.Body.OrganizationToken, trx) if err != nil { logrus.Errorf("error finding organization by token: %v", err) return admin.NewListOrganizationMembersNotFound() } if org == nil { - logrus.Errorf("organization '%v' not found", params.Body.Token) + logrus.Errorf("organization '%v' not found", params.Body.OrganizationToken) return admin.NewListOrganizationMembersNotFound() } diff --git a/controller/listOrganizations.go b/controller/listOrganizations.go index f2f769e9..8e069009 100644 --- a/controller/listOrganizations.go +++ b/controller/listOrganizations.go @@ -34,7 +34,7 @@ func (h *listOrganizationsHandler) Handle(_ admin.ListOrganizationsParams, princ var out []*admin.ListOrganizationsOKBodyOrganizationsItems0 for _, org := range orgs { - out = append(out, &admin.ListOrganizationsOKBodyOrganizationsItems0{Description: org.Description, Token: org.Token}) + out = append(out, &admin.ListOrganizationsOKBodyOrganizationsItems0{Description: org.Description, OrganizationToken: org.Token}) } return admin.NewListOrganizationsOK().WithPayload(&admin.ListOrganizationsOKBody{Organizations: out}) } diff --git a/controller/login.go b/controller/login.go index 0e048225..bfdafcce 100644 --- a/controller/login.go +++ b/controller/login.go @@ -2,13 +2,12 @@ package controller import ( "github.com/go-openapi/runtime/middleware" - "github.com/openziti/zrok/rest_model_zrok" "github.com/openziti/zrok/rest_server_zrok/operations/account" "github.com/sirupsen/logrus" ) func loginHandler(params account.LoginParams) middleware.Responder { - if params.Body == nil || params.Body.Email == "" || params.Body.Password == "" { + if params.Body.Email == "" || params.Body.Password == "" { logrus.Errorf("missing email or password") return account.NewLoginUnauthorized() } @@ -36,5 +35,5 @@ func loginHandler(params account.LoginParams) middleware.Responder { return account.NewLoginUnauthorized() } - return account.NewLoginOK().WithPayload(rest_model_zrok.LoginResponse(a.Token)) + return account.NewLoginOK().WithPayload(a.Token) } diff --git a/controller/metrics.go b/controller/metrics.go index f31f4657..d251f2f6 100644 --- a/controller/metrics.go +++ b/controller/metrics.go @@ -165,9 +165,9 @@ func (h *getShareMetricsHandler) Handle(params metadata.GetShareMetricsParams, p return metadata.NewGetEnvironmentMetricsInternalServerError() } defer func() { _ = trx.Rollback() }() - shr, err := str.FindShareWithToken(params.ShrToken, trx) + shr, err := str.FindShareWithToken(params.ShareToken, trx) if err != nil { - logrus.Errorf("error finding share '%v' for '%v': %v", params.ShrToken, principal.Email, err) + logrus.Errorf("error finding share '%v' for '%v': %v", params.ShareToken, principal.Email, err) return metadata.NewGetShareMetricsUnauthorized() } env, err := str.GetEnvironment(shr.EnvironmentId, trx) @@ -176,7 +176,7 @@ func (h *getShareMetricsHandler) Handle(params metadata.GetShareMetricsParams, p return metadata.NewGetShareMetricsUnauthorized() } if env.AccountId != nil && int64(*env.AccountId) != principal.ID { - logrus.Errorf("user '%v' does not own share '%v'", principal.Email, params.ShrToken) + logrus.Errorf("user '%v' does not own share '%v'", principal.Email, params.ShareToken) return metadata.NewGetShareMetricsUnauthorized() } diff --git a/controller/orgAccountOverview.go b/controller/orgAccountOverview.go index 2bea8b6a..d5d27e96 100644 --- a/controller/orgAccountOverview.go +++ b/controller/orgAccountOverview.go @@ -99,7 +99,7 @@ func (h *orgAccountOverviewHandler) Handle(params metadata.OrgAccountOverviewPar beProxyEndpoint = *shr.BackendProxyEndpoint } envShr := &rest_model_zrok.Share{ - Token: shr.Token, + ShareToken: shr.Token, ZID: shr.ZId, ShareMode: shr.ShareMode, BackendMode: shr.BackendMode, @@ -120,11 +120,11 @@ func (h *orgAccountOverviewHandler) Handle(params metadata.OrgAccountOverviewPar } for _, fe := range fes { envFe := &rest_model_zrok.Frontend{ - ID: int64(fe.Id), - Token: fe.Token, - ZID: fe.ZId, - CreatedAt: fe.CreatedAt.UnixMilli(), - UpdatedAt: fe.UpdatedAt.UnixMilli(), + ID: int64(fe.Id), + FrontendToken: fe.Token, + ZID: fe.ZId, + CreatedAt: fe.CreatedAt.UnixMilli(), + UpdatedAt: fe.UpdatedAt.UnixMilli(), } if fe.PrivateShareId != nil { feShr, err := str.GetShare(*fe.PrivateShareId, trx) @@ -132,7 +132,7 @@ func (h *orgAccountOverviewHandler) Handle(params metadata.OrgAccountOverviewPar logrus.Errorf("error getting share for frontend '%v': %v", fe.ZId, err) return metadata.NewOverviewInternalServerError() } - envFe.ShrToken = feShr.Token + envFe.ShareToken = feShr.Token } ear.Frontends = append(ear.Frontends, envFe) } diff --git a/controller/overview.go b/controller/overview.go index d75b79e1..00de1de4 100644 --- a/controller/overview.go +++ b/controller/overview.go @@ -42,6 +42,7 @@ func (h *overviewHandler) Handle(_ metadata.OverviewParams, principal *rest_mode Description: env.Description, Host: env.Host, ZID: env.ZId, + Limited: accountLimited, CreatedAt: env.CreatedAt.UnixMilli(), UpdatedAt: env.UpdatedAt.UnixMilli(), }, @@ -66,7 +67,7 @@ func (h *overviewHandler) Handle(_ metadata.OverviewParams, principal *rest_mode beProxyEndpoint = *shr.BackendProxyEndpoint } envShr := &rest_model_zrok.Share{ - Token: shr.Token, + ShareToken: shr.Token, ZID: shr.ZId, ShareMode: shr.ShareMode, BackendMode: shr.BackendMode, @@ -74,6 +75,7 @@ func (h *overviewHandler) Handle(_ metadata.OverviewParams, principal *rest_mode FrontendEndpoint: feEndpoint, BackendProxyEndpoint: beProxyEndpoint, Reserved: shr.Reserved, + Limited: accountLimited, CreatedAt: shr.CreatedAt.UnixMilli(), UpdatedAt: shr.UpdatedAt.UnixMilli(), } @@ -86,11 +88,17 @@ func (h *overviewHandler) Handle(_ metadata.OverviewParams, principal *rest_mode } for _, fe := range fes { envFe := &rest_model_zrok.Frontend{ - ID: int64(fe.Id), - Token: fe.Token, - ZID: fe.ZId, - CreatedAt: fe.CreatedAt.UnixMilli(), - UpdatedAt: fe.UpdatedAt.UnixMilli(), + ID: int64(fe.Id), + FrontendToken: fe.Token, + ZID: fe.ZId, + CreatedAt: fe.CreatedAt.UnixMilli(), + UpdatedAt: fe.UpdatedAt.UnixMilli(), + } + if fe.BindAddress != nil { + envFe.BindAddress = *fe.BindAddress + } + if fe.Description != nil { + envFe.Description = *fe.Description } if fe.PrivateShareId != nil { feShr, err := str.GetShare(*fe.PrivateShareId, trx) @@ -98,7 +106,8 @@ func (h *overviewHandler) Handle(_ metadata.OverviewParams, principal *rest_mode logrus.Errorf("error getting share for frontend '%v': %v", fe.ZId, err) return metadata.NewOverviewInternalServerError() } - envFe.ShrToken = feShr.Token + envFe.ShareToken = feShr.Token + envFe.BackendMode = feShr.BackendMode } ear.Frontends = append(ear.Frontends, envFe) } diff --git a/controller/regenerateAccountToken.go b/controller/regenerateAccountToken.go new file mode 100644 index 00000000..4e64a6b0 --- /dev/null +++ b/controller/regenerateAccountToken.go @@ -0,0 +1,63 @@ +package controller + +import ( + "github.com/go-openapi/runtime/middleware" + "github.com/openziti/zrok/rest_model_zrok" + "github.com/openziti/zrok/rest_server_zrok/operations/account" + "github.com/sirupsen/logrus" +) + +type regenerateAccountTokenHandler struct{} + +func newRegenerateAccountTokenHandler() *regenerateAccountTokenHandler { + return ®enerateAccountTokenHandler{} +} + +func (handler *regenerateAccountTokenHandler) Handle(params account.RegenerateAccountTokenParams, principal *rest_model_zrok.Principal) middleware.Responder { + logrus.Infof("received account token regeneration request for email '%v'", principal.Email) + + if params.Body.EmailAddress != principal.Email { + logrus.Errorf("mismatched account '%v' for '%v'", params.Body.EmailAddress, principal.Email) + return account.NewRegenerateAccountTokenNotFound() + } + + tx, err := str.Begin() + if err != nil { + logrus.Errorf("error starting transaction for '%v': %v", params.Body.EmailAddress, err) + return account.NewRegenerateAccountTokenInternalServerError() + } + defer tx.Rollback() + + a, err := str.FindAccountWithEmail(params.Body.EmailAddress, tx) + if err != nil { + logrus.Errorf("error finding account for '%v': %v", params.Body.EmailAddress, err) + return account.NewRegenerateAccountTokenNotFound() + } + if a.Deleted { + logrus.Errorf("account '%v' for '%v' deleted", a.Email, a.Token) + return account.NewRegenerateAccountTokenNotFound() + } + + // Need to create new token and invalidate all other resources + accountToken, err := CreateToken() + if err != nil { + logrus.Errorf("error creating account token for request '%v': %v", params.Body.EmailAddress, err) + return account.NewRegenerateAccountTokenInternalServerError() + } + + a.Token = accountToken + + if _, err := str.UpdateAccount(a, tx); err != nil { + logrus.Errorf("error updating account for request '%v': %v", params.Body.EmailAddress, err) + return account.NewRegenerateAccountTokenInternalServerError() + } + + if err := tx.Commit(); err != nil { + logrus.Errorf("error committing '%v' (%v): %v", params.Body.EmailAddress, a.Email, err) + return account.NewRegenerateAccountTokenInternalServerError() + } + + logrus.Infof("regenerated account token '%v' for '%v'", a.Token, a.Email) + + return account.NewRegenerateAccountTokenOK().WithPayload(&account.RegenerateAccountTokenOKBody{AccountToken: accountToken}) +} diff --git a/controller/regenerateToken.go b/controller/regenerateToken.go deleted file mode 100644 index 89e67c0b..00000000 --- a/controller/regenerateToken.go +++ /dev/null @@ -1,63 +0,0 @@ -package controller - -import ( - "github.com/go-openapi/runtime/middleware" - "github.com/openziti/zrok/rest_model_zrok" - "github.com/openziti/zrok/rest_server_zrok/operations/account" - "github.com/sirupsen/logrus" -) - -type regenerateTokenHandler struct{} - -func newRegenerateTokenHandler() *regenerateTokenHandler { - return ®enerateTokenHandler{} -} - -func (handler *regenerateTokenHandler) Handle(params account.RegenerateTokenParams, principal *rest_model_zrok.Principal) middleware.Responder { - logrus.Infof("received token regeneration request for email '%v'", principal.Email) - - if params.Body.EmailAddress != principal.Email { - logrus.Errorf("mismatched account '%v' for '%v'", params.Body.EmailAddress, principal.Email) - return account.NewRegenerateTokenNotFound() - } - - tx, err := str.Begin() - if err != nil { - logrus.Errorf("error starting transaction for '%v': %v", params.Body.EmailAddress, err) - return account.NewRegenerateTokenInternalServerError() - } - defer tx.Rollback() - - a, err := str.FindAccountWithEmail(params.Body.EmailAddress, tx) - if err != nil { - logrus.Errorf("error finding account for '%v': %v", params.Body.EmailAddress, err) - return account.NewRegenerateTokenNotFound() - } - if a.Deleted { - logrus.Errorf("account '%v' for '%v' deleted", a.Email, a.Token) - return account.NewRegenerateTokenNotFound() - } - - // Need to create new token and invalidate all other resources - token, err := CreateToken() - if err != nil { - logrus.Errorf("error creating token for request '%v': %v", params.Body.EmailAddress, err) - return account.NewRegenerateTokenInternalServerError() - } - - a.Token = token - - if _, err := str.UpdateAccount(a, tx); err != nil { - logrus.Errorf("error updating account for request '%v': %v", params.Body.EmailAddress, err) - return account.NewRegenerateTokenInternalServerError() - } - - if err := tx.Commit(); err != nil { - logrus.Errorf("error committing '%v' (%v): %v", params.Body.EmailAddress, a.Email, err) - return account.NewRegenerateTokenInternalServerError() - } - - logrus.Infof("regenerated token '%v' for '%v'", a.Token, a.Email) - - return account.NewRegenerateTokenOK().WithPayload(&account.RegenerateTokenOKBody{Token: token}) -} diff --git a/controller/register.go b/controller/register.go index 7067c356..aff33120 100644 --- a/controller/register.go +++ b/controller/register.go @@ -19,63 +19,63 @@ func newRegisterHandler(cfg *config.Config) *registerHandler { } } func (h *registerHandler) Handle(params account.RegisterParams) middleware.Responder { - if params.Body == nil || params.Body.Token == "" || params.Body.Password == "" { + if params.Body.RegisterToken == "" || params.Body.Password == "" { logrus.Error("missing token or password") return account.NewRegisterNotFound() } - logrus.Infof("received register request for token '%v'", params.Body.Token) + logrus.Infof("received register request for registration token '%v'", params.Body.RegisterToken) tx, err := str.Begin() if err != nil { - logrus.Errorf("error starting transaction for token '%v': %v", params.Body.Token, err) + logrus.Errorf("error starting transaction for registration token '%v': %v", params.Body.RegisterToken, err) return account.NewRegisterInternalServerError() } defer func() { _ = tx.Rollback() }() - ar, err := str.FindAccountRequestWithToken(params.Body.Token, tx) + ar, err := str.FindAccountRequestWithToken(params.Body.RegisterToken, tx) if err != nil { - logrus.Errorf("error finding account request with token '%v': %v", params.Body.Token, err) + logrus.Errorf("error finding account request with registration token '%v': %v", params.Body.RegisterToken, err) return account.NewRegisterNotFound() } - token, err := CreateToken() + accountToken, err := CreateToken() if err != nil { - logrus.Errorf("error creating token for request '%v' (%v): %v", params.Body.Token, ar.Email, err) + logrus.Errorf("error creating account token for request '%v' (%v): %v", params.Body.RegisterToken, ar.Email, err) return account.NewRegisterInternalServerError() } if err := validatePassword(h.cfg, params.Body.Password); err != nil { - logrus.Errorf("password not valid for request '%v', (%v): %v", params.Body.Token, ar.Email, err) + logrus.Errorf("password not valid for request '%v', (%v): %v", params.Body.RegisterToken, ar.Email, err) return account.NewRegisterUnprocessableEntity().WithPayload(rest_model_zrok.ErrorMessage(err.Error())) } hpwd, err := HashPassword(params.Body.Password) if err != nil { - logrus.Errorf("error hashing password for request '%v' (%v): %v", params.Body.Token, ar.Email, err) + logrus.Errorf("error hashing password for request '%v' (%v): %v", params.Body.RegisterToken, ar.Email, err) return account.NewRegisterInternalServerError() } a := &store.Account{ Email: ar.Email, Salt: hpwd.Salt, Password: hpwd.Password, - Token: token, + Token: accountToken, } if _, err := str.CreateAccount(a, tx); err != nil { - logrus.Errorf("error creating account for request '%v' (%v): %v", params.Body.Token, ar.Email, err) + logrus.Errorf("error creating account for request '%v' (%v): %v", params.Body.RegisterToken, ar.Email, err) return account.NewRegisterInternalServerError() } if err := str.DeleteAccountRequest(ar.Id, tx); err != nil { - logrus.Errorf("error deleteing account request '%v' (%v): %v", params.Body.Token, ar.Email, err) + logrus.Errorf("error deleteing account request '%v' (%v): %v", params.Body.RegisterToken, ar.Email, err) return account.NewRegisterInternalServerError() } if err := tx.Commit(); err != nil { - logrus.Errorf("error committing '%v' (%v): %v", params.Body.Token, ar.Email, err) + logrus.Errorf("error committing '%v' (%v): %v", params.Body.RegisterToken, ar.Email, err) return account.NewRegisterInternalServerError() } logrus.Infof("created account '%v'", a.Email) - return account.NewRegisterOK().WithPayload(&rest_model_zrok.RegisterResponse{Token: a.Token}) + return account.NewRegisterOK().WithPayload(&account.RegisterOKBody{AccountToken: a.Token}) } diff --git a/controller/removeOrganizationMember.go b/controller/removeOrganizationMember.go index 63cb2da2..11cea366 100644 --- a/controller/removeOrganizationMember.go +++ b/controller/removeOrganizationMember.go @@ -32,9 +32,9 @@ func (h *removeOrganizationMemberHandler) Handle(params admin.RemoveOrganization return admin.NewAddOrganizationMemberNotFound() } - org, err := str.FindOrganizationByToken(params.Body.Token, trx) + org, err := str.FindOrganizationByToken(params.Body.OrganizationToken, trx) if err != nil { - logrus.Errorf("error finding organization '%v': %v", params.Body.Token, err) + logrus.Errorf("error finding organization '%v': %v", params.Body.OrganizationToken, err) return admin.NewAddOrganizationMemberNotFound() } diff --git a/controller/resetPassword.go b/controller/resetPassword.go index fb66ed77..3847b25d 100644 --- a/controller/resetPassword.go +++ b/controller/resetPassword.go @@ -19,28 +19,28 @@ func newResetPasswordHandler(cfg *config.Config) *resetPasswordHandler { } func (handler *resetPasswordHandler) Handle(params account.ResetPasswordParams) middleware.Responder { - if params.Body == nil || params.Body.Token == "" || params.Body.Password == "" { + if params.Body.ResetToken == "" || params.Body.Password == "" { logrus.Error("missing token or password") return account.NewResetPasswordNotFound() } - logrus.Infof("received password reset request for token '%v'", params.Body.Token) + logrus.Infof("received password reset request for reset token '%v'", params.Body.ResetToken) tx, err := str.Begin() if err != nil { - logrus.Errorf("error starting transaction for '%v': %v", params.Body.Token, err) + logrus.Errorf("error starting transaction for '%v': %v", params.Body.ResetToken, err) return account.NewResetPasswordInternalServerError() } defer func() { _ = tx.Rollback() }() - prr, err := str.FindPasswordResetRequestWithToken(params.Body.Token, tx) + prr, err := str.FindPasswordResetRequestWithToken(params.Body.ResetToken, tx) if err != nil { - logrus.Errorf("error finding reset request for '%v': %v", params.Body.Token, err) + logrus.Errorf("error finding reset request for reset token '%v': %v", params.Body.ResetToken, err) return account.NewResetPasswordNotFound() } a, err := str.GetAccount(prr.AccountId, tx) if err != nil { - logrus.Errorf("error finding account for '%v': %v", params.Body.Token, err) + logrus.Errorf("error finding account for reset token '%v': %v", params.Body.ResetToken, err) return account.NewResetPasswordNotFound() } if a.Deleted { @@ -49,30 +49,30 @@ func (handler *resetPasswordHandler) Handle(params account.ResetPasswordParams) } if err := validatePassword(handler.cfg, params.Body.Password); err != nil { - logrus.Errorf("password not valid for request '%v', (%v): %v", params.Body.Token, a.Email, err) + logrus.Errorf("password not valid for reset token '%v', (%v): %v", params.Body.ResetToken, a.Email, err) return account.NewResetPasswordUnprocessableEntity().WithPayload(rest_model_zrok.ErrorMessage(err.Error())) } hpwd, err := HashPassword(params.Body.Password) if err != nil { - logrus.Errorf("error hashing password for '%v' (%v): %v", params.Body.Token, a.Email, err) + logrus.Errorf("error hashing password for '%v' (%v): %v", params.Body.ResetToken, a.Email, err) return account.NewResetPasswordRequestInternalServerError() } a.Salt = hpwd.Salt a.Password = hpwd.Password if _, err := str.UpdateAccount(a, tx); err != nil { - logrus.Errorf("error updating for '%v' (%v): %v", params.Body.Token, a.Email, err) + logrus.Errorf("error updating for reset token '%v' (%v): %v", params.Body.ResetToken, a.Email, err) return account.NewResetPasswordInternalServerError() } if err := str.DeletePasswordResetRequest(prr.Id, tx); err != nil { - logrus.Errorf("error deleting reset request '%v' (%v): %v", params.Body.Token, a.Email, err) + logrus.Errorf("error deleting reset request for reset token '%v' (%v): %v", params.Body.ResetToken, a.Email, err) return account.NewResetPasswordInternalServerError() } if err := tx.Commit(); err != nil { - logrus.Errorf("error committing '%v' (%v): %v", params.Body.Token, a.Email, err) + logrus.Errorf("error committing for reset token '%v' (%v): %v", params.Body.ResetToken, a.Email, err) return account.NewResetPasswordInternalServerError() } diff --git a/controller/share.go b/controller/share.go index b43088d1..6e2eed3c 100644 --- a/controller/share.go +++ b/controller/share.go @@ -209,7 +209,7 @@ func (h *shareHandler) Handle(params share.ShareParams, principal *rest_model_zr return share.NewShareCreated().WithPayload(&rest_model_zrok.ShareResponse{ FrontendProxyEndpoints: frontendEndpoints, - ShrToken: shrToken, + ShareToken: shrToken, }) } diff --git a/controller/shareDetail.go b/controller/shareDetail.go index 096f67f3..94fde868 100644 --- a/controller/shareDetail.go +++ b/controller/shareDetail.go @@ -21,9 +21,9 @@ func (h *shareDetailHandler) Handle(params metadata.GetShareDetailParams, princi return metadata.NewGetShareDetailInternalServerError() } defer func() { _ = tx.Rollback() }() - shr, err := str.FindShareWithToken(params.ShrToken, tx) + shr, err := str.FindShareWithToken(params.ShareToken, tx) if err != nil { - logrus.Errorf("error finding share '%v': %v", params.ShrToken, err) + logrus.Errorf("error finding share '%v': %v", params.ShareToken, err) return metadata.NewGetShareDetailNotFound() } envs, err := str.FindEnvironmentsForAccount(int(principal.ID), tx) @@ -39,7 +39,7 @@ func (h *shareDetailHandler) Handle(params metadata.GetShareDetailParams, princi } } if !found { - logrus.Errorf("environment not matched for share '%v' for account '%v'", params.ShrToken, principal.Email) + logrus.Errorf("environment not matched for share '%v' for account '%v'", params.ShareToken, principal.Email) return metadata.NewGetShareDetailNotFound() } sparkRx := make(map[string][]int64) @@ -69,7 +69,7 @@ func (h *shareDetailHandler) Handle(params metadata.GetShareDetailParams, princi sparkData = append(sparkData, &rest_model_zrok.SparkDataSample{Rx: float64(sparkRx[shr.Token][i]), Tx: float64(sparkTx[shr.Token][i])}) } return metadata.NewGetShareDetailOK().WithPayload(&rest_model_zrok.Share{ - Token: shr.Token, + ShareToken: shr.Token, ZID: shr.ZId, ShareMode: shr.ShareMode, BackendMode: shr.BackendMode, diff --git a/controller/sparklines.go b/controller/sparklines.go new file mode 100644 index 00000000..c92d9c2b --- /dev/null +++ b/controller/sparklines.go @@ -0,0 +1,107 @@ +package controller + +import ( + "github.com/go-openapi/runtime/middleware" + "github.com/openziti/zrok/controller/store" + "github.com/openziti/zrok/rest_model_zrok" + "github.com/openziti/zrok/rest_server_zrok/operations/metadata" + "github.com/sirupsen/logrus" + "slices" +) + +type sparklinesHandler struct { +} + +func newSparklinesHandler() *sparklinesHandler { + return &sparklinesHandler{} +} + +func (h *sparklinesHandler) Handle(params metadata.GetSparklinesParams, principal *rest_model_zrok.Principal) middleware.Responder { + trx, err := str.Begin() + if err != nil { + logrus.Errorf("error beginning transaction: %v", err) + return metadata.NewGetSparklinesInternalServerError() + } + defer func() { _ = trx.Rollback() }() + + out := &metadata.GetSparklinesOKBody{} + + if len(params.Body.Environments) > 0 { + if envs, err := str.FindEnvironmentsForAccount(int(principal.ID), trx); err == nil { + var selectedEnvs []*store.Environment + selectedEnvsIdIdx := make(map[int]*store.Environment) + for _, envZId := range params.Body.Environments { + if idx := slices.IndexFunc(envs, func(env *store.Environment) bool { return env.ZId == envZId }); idx > -1 { + selectedEnvs = append(selectedEnvs, envs[idx]) + selectedEnvsIdIdx[envs[idx].Id] = envs[idx] + } else { + logrus.Warnf("requested sparkdata for environment '%v' not owned by '%v'", envZId, principal.Email) + } + } + envsRxSparkdata, envsTxSparkdata, err := sparkDataForEnvironments(selectedEnvs) + if err != nil { + logrus.Errorf("error getting sparkdata for selected environments for '%v': %v", principal.Email, err) + return metadata.NewGetSparklinesInternalServerError() + } + for envId, rx := range envsRxSparkdata { + tx := envsTxSparkdata[envId] + forEnv := selectedEnvsIdIdx[envId] + + var samples []*rest_model_zrok.MetricsSample + for i := 0; i < len(rx) && i < len(tx); i++ { + samples = append(samples, &rest_model_zrok.MetricsSample{ + Rx: float64(rx[i]), + Tx: float64(tx[i]), + }) + } + out.Sparklines = append(out.Sparklines, &rest_model_zrok.Metrics{ + Scope: "environment", + ID: forEnv.ZId, + Samples: samples, + }) + } + } else { + logrus.Errorf("error finding environments for '%v': %v", principal.Email, err) + return metadata.NewGetSparklinesInternalServerError() + } + } + + if len(params.Body.Shares) > 0 { + if shrs, err := str.FindAllSharesForAccount(int(principal.ID), trx); err == nil { + var selectedShares []*store.Share + for _, selectedShareToken := range params.Body.Shares { + if idx := slices.IndexFunc(shrs, func(shr *store.Share) bool { return shr.Token == selectedShareToken }); idx > -1 { + selectedShares = append(selectedShares, shrs[idx]) + } else { + logrus.Warnf("requested sparkdata for share '%v' not owned by '%v'", selectedShareToken, principal.Email) + } + } + shrsRxSparkdata, shrsTxSparkdata, err := sparkDataForShares(selectedShares) + if err != nil { + logrus.Errorf("error getting sparkdata for selected shares for '%v': %v", principal.Email, err) + return metadata.NewGetSparklinesInternalServerError() + } + for shrToken, rx := range shrsRxSparkdata { + tx := shrsTxSparkdata[shrToken] + + var samples []*rest_model_zrok.MetricsSample + for i := 0; i < len(rx) && i < len(tx); i++ { + samples = append(samples, &rest_model_zrok.MetricsSample{ + Rx: float64(rx[i]), + Tx: float64(tx[i]), + }) + } + out.Sparklines = append(out.Sparklines, &rest_model_zrok.Metrics{ + Scope: "share", + ID: shrToken, + Samples: samples, + }) + } + } else { + logrus.Errorf("error finding shares for '%v': %v", principal.Email, err) + return metadata.NewGetSparklinesInternalServerError() + } + } + + return metadata.NewGetSparklinesOK().WithPayload(out) +} diff --git a/controller/store/frontend.go b/controller/store/frontend.go index 8086b468..d0cbf678 100644 --- a/controller/store/frontend.go +++ b/controller/store/frontend.go @@ -15,27 +15,29 @@ type Frontend struct { UrlTemplate *string Reserved bool PermissionMode PermissionMode + Description *string + BindAddress *string } func (str *Store) CreateFrontend(envId int, f *Frontend, tx *sqlx.Tx) (int, error) { - stmt, err := tx.Prepare("insert into frontends (environment_id, private_share_id, token, z_id, public_name, url_template, reserved, permission_mode) values ($1, $2, $3, $4, $5, $6, $7, $8) returning id") + stmt, err := tx.Prepare("insert into frontends (environment_id, private_share_id, token, z_id, public_name, url_template, reserved, permission_mode, description, bind_address) values ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10) returning id") if err != nil { return 0, errors.Wrap(err, "error preparing frontends insert statement") } var id int - if err := stmt.QueryRow(envId, f.PrivateShareId, f.Token, f.ZId, f.PublicName, f.UrlTemplate, f.Reserved, f.PermissionMode).Scan(&id); err != nil { + if err := stmt.QueryRow(envId, f.PrivateShareId, f.Token, f.ZId, f.PublicName, f.UrlTemplate, f.Reserved, f.PermissionMode, f.Description, f.BindAddress).Scan(&id); err != nil { return 0, errors.Wrap(err, "error executing frontends insert statement") } return id, nil } func (str *Store) CreateGlobalFrontend(f *Frontend, tx *sqlx.Tx) (int, error) { - stmt, err := tx.Prepare("insert into frontends (token, z_id, public_name, url_template, reserved, permission_mode) values ($1, $2, $3, $4, $5, $6) returning id") + stmt, err := tx.Prepare("insert into frontends (token, z_id, public_name, url_template, reserved, permission_mode, description) values ($1, $2, $3, $4, $5, $6, $7) returning id") if err != nil { return 0, errors.Wrap(err, "error preparing global frontends insert statement") } var id int - if err := stmt.QueryRow(f.Token, f.ZId, f.PublicName, f.UrlTemplate, f.Reserved, f.PermissionMode).Scan(&id); err != nil { + if err := stmt.QueryRow(f.Token, f.ZId, f.PublicName, f.UrlTemplate, f.Reserved, f.PermissionMode, f.Description).Scan(&id); err != nil { return 0, errors.Wrap(err, "error executing global frontends insert statement") } return id, nil @@ -122,12 +124,12 @@ func (str *Store) FindFrontendsForPrivateShare(shrId int, tx *sqlx.Tx) ([]*Front } func (str *Store) UpdateFrontend(fe *Frontend, tx *sqlx.Tx) error { - sql := "update frontends set environment_id = $1, private_share_id = $2, token = $3, z_id = $4, public_name = $5, url_template = $6, reserved = $7, permission_mode = $8, updated_at = current_timestamp where id = $9" + sql := "update frontends set environment_id = $1, private_share_id = $2, token = $3, z_id = $4, public_name = $5, url_template = $6, reserved = $7, permission_mode = $8, description = $9, bind_address = $10, updated_at = current_timestamp where id = $11" stmt, err := tx.Prepare(sql) if err != nil { return errors.Wrap(err, "error preparing frontends update statement") } - _, err = stmt.Exec(fe.EnvironmentId, fe.PrivateShareId, fe.Token, fe.ZId, fe.PublicName, fe.UrlTemplate, fe.Reserved, fe.PermissionMode, fe.Id) + _, err = stmt.Exec(fe.EnvironmentId, fe.PrivateShareId, fe.Token, fe.ZId, fe.PublicName, fe.UrlTemplate, fe.Reserved, fe.PermissionMode, fe.Description, fe.BindAddress, fe.Id) if err != nil { return errors.Wrap(err, "error executing frontends update statement") } diff --git a/controller/store/share.go b/controller/store/share.go index cd8257e9..0b73b58a 100644 --- a/controller/store/share.go +++ b/controller/store/share.go @@ -56,6 +56,26 @@ func (str *Store) FindAllShares(tx *sqlx.Tx) ([]*Share, error) { return shrs, nil } +func (str *Store) FindAllSharesForAccount(accountId int, trx *sqlx.Tx) ([]*Share, error) { + sql := "select shares.* from shares, environments" + + " where shares.environment_id = environments.id" + + " and environments.account_id = $1" + + " and not shares.deleted" + rows, err := trx.Queryx(sql, accountId) + if err != nil { + return nil, errors.Wrap(err, "error selecting all shares for account") + } + var shrs []*Share + for rows.Next() { + shr := &Share{} + if err := rows.StructScan(shr); err != nil { + return nil, errors.Wrap(err, "error scanning share") + } + shrs = append(shrs, shr) + } + return shrs, nil +} + func (str *Store) FindShareWithToken(shrToken string, tx *sqlx.Tx) (*Share, error) { shr := &Share{} if err := tx.QueryRowx("select * from shares where token = $1 and not deleted", shrToken).StructScan(shr); err != nil { diff --git a/controller/store/sql/postgresql/031_v1_0_0_frontend_description.sql b/controller/store/sql/postgresql/031_v1_0_0_frontend_description.sql new file mode 100644 index 00000000..bd0ec6ef --- /dev/null +++ b/controller/store/sql/postgresql/031_v1_0_0_frontend_description.sql @@ -0,0 +1,3 @@ +-- +migrate Up + +alter table frontends add column description text; \ No newline at end of file diff --git a/controller/store/sql/postgresql/032_v1_0_0_frontend_bindAddress.sql b/controller/store/sql/postgresql/032_v1_0_0_frontend_bindAddress.sql new file mode 100644 index 00000000..7bb3d343 --- /dev/null +++ b/controller/store/sql/postgresql/032_v1_0_0_frontend_bindAddress.sql @@ -0,0 +1,3 @@ +-- +migrate Up + +alter table frontends add column bind_address varchar(128); \ No newline at end of file diff --git a/controller/store/sql/sqlite3/031_v1_0_0_frontend_description.sql b/controller/store/sql/sqlite3/031_v1_0_0_frontend_description.sql new file mode 100644 index 00000000..bd0ec6ef --- /dev/null +++ b/controller/store/sql/sqlite3/031_v1_0_0_frontend_description.sql @@ -0,0 +1,3 @@ +-- +migrate Up + +alter table frontends add column description text; \ No newline at end of file diff --git a/controller/store/sql/sqlite3/032_v1_0_0_frontend_bindAddress.sql b/controller/store/sql/sqlite3/032_v1_0_0_frontend_bindAddress.sql new file mode 100644 index 00000000..7bb3d343 --- /dev/null +++ b/controller/store/sql/sqlite3/032_v1_0_0_frontend_bindAddress.sql @@ -0,0 +1,3 @@ +-- +migrate Up + +alter table frontends add column bind_address varchar(128); \ No newline at end of file diff --git a/controller/store/store.go b/controller/store/store.go index 6779344b..05683dd3 100644 --- a/controller/store/store.go +++ b/controller/store/store.go @@ -22,9 +22,10 @@ type Model struct { } type Config struct { - Path string `cf:"+secret"` - Type string - EnableLocking bool + Path string `cf:"+secret"` + Type string + EnableLocking bool + DisableAutoMigration bool } type Store struct { @@ -57,8 +58,10 @@ func Open(cfg *Config) (*Store, error) { dbx.MapperFunc(strcase.ToSnake) store := &Store{cfg: cfg, db: dbx} - if err := store.migrate(cfg); err != nil { - return nil, errors.Wrapf(err, "error migrating database '%v'", cfg.Path) + if !cfg.DisableAutoMigration { + if err := store.migrate(cfg); err != nil { + return nil, errors.Wrapf(err, "error migrating database '%v'", cfg.Path) + } } return store, nil } diff --git a/controller/unaccess.go b/controller/unaccess.go index 197c1b7e..a7dec06a 100644 --- a/controller/unaccess.go +++ b/controller/unaccess.go @@ -18,7 +18,7 @@ func newUnaccessHandler() *unaccessHandler { func (h *unaccessHandler) Handle(params share.UnaccessParams, principal *rest_model_zrok.Principal) middleware.Responder { feToken := params.Body.FrontendToken - shrToken := params.Body.ShrToken + shrToken := params.Body.ShareToken envZId := params.Body.EnvZID logrus.Infof("processing unaccess request for frontend '%v' (share '%v', environment '%v')", feToken, shrToken, envZId) diff --git a/controller/unshare.go b/controller/unshare.go index cbadcfcc..a2633437 100644 --- a/controller/unshare.go +++ b/controller/unshare.go @@ -34,7 +34,7 @@ func (h *unshareHandler) Handle(params share.UnshareParams, principal *rest_mode logrus.Errorf("error getting edge client for '%v': %v", principal.Email, err) return share.NewUnshareInternalServerError() } - shrToken := params.Body.ShrToken + shrToken := params.Body.ShareToken shrZId, err := h.findShareZId(shrToken, edge) if err != nil { logrus.Errorf("error finding share identity for '%v' (%v): %v", shrToken, principal.Email, err) diff --git a/controller/updateAccess.go b/controller/updateAccess.go new file mode 100644 index 00000000..09118c8d --- /dev/null +++ b/controller/updateAccess.go @@ -0,0 +1,70 @@ +package controller + +import ( + "github.com/go-openapi/runtime/middleware" + "github.com/openziti/zrok/rest_model_zrok" + "github.com/openziti/zrok/rest_server_zrok/operations/share" + "github.com/sirupsen/logrus" +) + +type updateAccessHandler struct{} + +func newUpdateAccessHandler() *updateAccessHandler { + return &updateAccessHandler{} +} + +func (h *updateAccessHandler) Handle(params share.UpdateAccessParams, principal *rest_model_zrok.Principal) middleware.Responder { + frontendToken := params.Body.FrontendToken + bindAddress := params.Body.BindAddress + desc := params.Body.Description + + trx, err := str.Begin() + if err != nil { + logrus.Errorf("error starting transaction: %v", err) + return share.NewUpdateAccessInternalServerError() + } + defer func() { _ = trx.Rollback() }() + + fe, err := str.FindFrontendWithToken(frontendToken, trx) + if err != nil { + logrus.Errorf("error finding frontend with token '%v': %v", frontendToken, err) + return share.NewUpdateAccessNotFound() + } + + envs, err := str.FindEnvironmentsForAccount(int(principal.ID), trx) + if err != nil { + logrus.Errorf("error finding environments for account '%v': %v", principal.Email, err) + } + + envMatched := false + for _, env := range envs { + if fe.EnvironmentId != nil && env.Id == *fe.EnvironmentId { + envMatched = true + break + } + } + if !envMatched { + logrus.Errorf("account '%v' does not own frontend '%v'", principal.Email, frontendToken) + return share.NewUpdateAccessNotFound() + } + + if desc != "" { + fe.Description = &desc + } else { + fe.Description = nil + } + if bindAddress != "" { + fe.BindAddress = &bindAddress + } else { + fe.BindAddress = nil + } + if err := str.UpdateFrontend(fe, trx); err != nil { + logrus.Errorf("error updating frontend '%v': %v", frontendToken, err) + return share.NewUpdateAccessInternalServerError() + } + if err := trx.Commit(); err != nil { + logrus.Errorf("error committing transaction for frontend '%v': %v", frontendToken, err) + return share.NewUpdateAccessInternalServerError() + } + return share.NewUpdateAccessOK() +} diff --git a/controller/updateShare.go b/controller/updateShare.go index 0eccffed..1a7e0574 100644 --- a/controller/updateShare.go +++ b/controller/updateShare.go @@ -14,7 +14,7 @@ func newUpdateShareHandler() *updateShareHandler { } func (h *updateShareHandler) Handle(params share.UpdateShareParams, principal *rest_model_zrok.Principal) middleware.Responder { - shrToken := params.Body.ShrToken + shrToken := params.Body.ShareToken backendProxyEndpoint := params.Body.BackendProxyEndpoint tx, err := str.Begin() diff --git a/controller/util.go b/controller/util.go index cf70f982..048d195b 100644 --- a/controller/util.go +++ b/controller/util.go @@ -92,23 +92,17 @@ func proxyUrl(shrToken, template string) string { } func validatePassword(cfg *config.Config, password string) error { - if cfg.Passwords.Length > len(password) { - return fmt.Errorf("password length: expected (%d), got (%d)", cfg.Passwords.Length, len(password)) + if len(password) < 8 { + return fmt.Errorf("password length: expected (8), got (%d)", len(password)) } - if cfg.Passwords.RequireCapital { - if !hasCapital(password) { - return fmt.Errorf("password requires capital, found none") - } + if !hasCapital(password) { + return fmt.Errorf("password requires capital, found none") } - if cfg.Passwords.RequireNumeric { - if !hasNumeric(password) { - return fmt.Errorf("password requires numeric, found none") - } + if !hasNumeric(password) { + return fmt.Errorf("password requires numeric, found none") } - if cfg.Passwords.RequireSpecial { - if !strings.ContainsAny(password, cfg.Passwords.ValidSpecialCharacters) { - return fmt.Errorf("password requires special character, found none") - } + if !strings.ContainsAny(password, "!@#$%^&*()_+-=[]{};':\"\\|,.<>") { + return fmt.Errorf("password requires special character, found none") } return nil } diff --git a/controller/verify.go b/controller/verify.go index a7c1e6af..66758518 100644 --- a/controller/verify.go +++ b/controller/verify.go @@ -2,21 +2,19 @@ package controller import ( "github.com/go-openapi/runtime/middleware" - "github.com/openziti/zrok/rest_model_zrok" "github.com/openziti/zrok/rest_server_zrok/operations/account" "github.com/sirupsen/logrus" ) -type verifyHandler struct { -} +type verifyHandler struct{} func newVerifyHandler() *verifyHandler { return &verifyHandler{} } -func (self *verifyHandler) Handle(params account.VerifyParams) middleware.Responder { - if params.Body != nil { - logrus.Debugf("received verify request for token '%v'", params.Body.Token) +func (h *verifyHandler) Handle(params account.VerifyParams) middleware.Responder { + if params.Body.RegisterToken != "" { + logrus.Debugf("received verify request for registration token '%v'", params.Body.RegisterToken) tx, err := str.Begin() if err != nil { logrus.Errorf("error starting transaction: %v", err) @@ -24,13 +22,13 @@ func (self *verifyHandler) Handle(params account.VerifyParams) middleware.Respon } defer func() { _ = tx.Rollback() }() - ar, err := str.FindAccountRequestWithToken(params.Body.Token, tx) + ar, err := str.FindAccountRequestWithToken(params.Body.RegisterToken, tx) if err != nil { - logrus.Errorf("error finding account request with token '%v': %v", params.Body.Token, err) + logrus.Errorf("error finding account request with registration token '%v': %v", params.Body.RegisterToken, err) return account.NewVerifyNotFound() } - return account.NewVerifyOK().WithPayload(&rest_model_zrok.VerifyResponse{Email: ar.Email}) + return account.NewVerifyOK().WithPayload(&account.VerifyOKBody{Email: ar.Email}) } logrus.Error("empty verification request") return account.NewVerifyInternalServerError() diff --git a/controller/verifyEmail.go b/controller/verifyEmail.go index b7a448ad..a020f665 100644 --- a/controller/verifyEmail.go +++ b/controller/verifyEmail.go @@ -17,10 +17,10 @@ type verificationEmail struct { Version string } -func sendVerificationEmail(emailAddress, token string) error { +func sendVerificationEmail(emailAddress, regToken string) error { emailData := &verificationEmail{ EmailAddress: emailAddress, - VerifyUrl: cfg.Registration.RegistrationUrlTemplate + "/" + token, + VerifyUrl: cfg.Registration.RegistrationUrlTemplate + "/" + regToken, Version: build.String(), } diff --git a/controller/version.go b/controller/version.go index 8a139fb9..4a7dffad 100644 --- a/controller/version.go +++ b/controller/version.go @@ -1,12 +1,28 @@ package controller import ( + "fmt" "github.com/go-openapi/runtime/middleware" "github.com/openziti/zrok/build" "github.com/openziti/zrok/rest_model_zrok" "github.com/openziti/zrok/rest_server_zrok/operations/metadata" + "github.com/sirupsen/logrus" + "regexp" ) func versionHandler(_ metadata.VersionParams) middleware.Responder { - return metadata.NewVersionOK().WithPayload(rest_model_zrok.Version(build.String())) + outOfDate := "your local zrok installation is out of date and needs to be upgraded! " + + "please visit 'https://github.com/openziti/zrok/releases' for the latest build!" + return metadata.NewVersionOK().WithPayload(rest_model_zrok.Version(outOfDate)) +} + +func clientVersionCheckHandler(params metadata.ClientVersionCheckParams) middleware.Responder { + logrus.Debugf("client sent version '%v'", params.Body.ClientVersion) + // allow reported version string to be optionally prefixed with + // "refs/heads/" or "refs/tags/" + re := regexp.MustCompile(`^(refs/(heads|tags)/)?` + build.Series) + if !re.MatchString(params.Body.ClientVersion) { + return metadata.NewClientVersionCheckBadRequest().WithPayload(fmt.Sprintf("expecting a zrok client version matching '%v' version, received: '%v'; please visit 'https://github.com/openziti/zrok/releases' to make sure you're running the correct client version!", build.Series, params.Body.ClientVersion)) + } + return metadata.NewClientVersionCheckOK() } diff --git a/docker/compose/zrok-instance/README.md b/docker/compose/zrok-instance/README.md index ba68d0d7..73992947 100644 --- a/docker/compose/zrok-instance/README.md +++ b/docker/compose/zrok-instance/README.md @@ -190,7 +190,7 @@ See "My internet connection can only send traffic to common ports" below about c docker compose logs zrok-controller ``` -1. Check the caddy logs. +1. Check the Caddy logs. It can take a few minutes for Caddy to obtain the wildcard certificate. You can check the logs to see if there were any errors completing the DNS challenge which involves using the Caddy DNS plugin to create a TXT record in your DNS zone. This leverages the API token you provided in the `.env` file, which must have permission to create DNS records in the zrok DNS zone. @@ -198,6 +198,23 @@ See "My internet connection can only send traffic to common ports" below about c docker compose logs caddy ``` +1. Caddy keeps failing to obtain a wildcard certificate because it timed out waiting for DNS. + + Symptom: the Caddy log contains "timed out waiting for record to fully propagate." This means that Caddy added a DNS record with your DNS provider's API to prove to the CA it controls the zrok DNS zone, but it wasn't able to verify the record was created successfully with a DNS query. + + Solutions: + + - Add `propagation_delay` in your `Caddyfile` to delay the first DNS verification query. This avoids caching a verification query failure by waiting a few minutes for the record to become available so the verification query will succeed on the first attempt. Caddy will be unable to verify the DNS record if the failure remains in the cache too long. + - If the prior solution fails, you can override the default resolves/nameservers with `resolvers`, a space-separated list of DNS servers. This gives you more control over if and where the verification query result is cached. + + ``` + tls { + dns {CADDY_DNS_PLUGIN} {CADDY_DNS_PLUGIN_TOKEN} + propagation_timeout 60m # default 2m + propagation_delay 5m # default 0m + } + ``` + 1. `zrok enable` fails certificate verification: ensure you are not using the staging API for Let's Encrypt. If you are using the staging API, you will see an error about the API certificate when you use the zrok CLI. You can switch to the production API by removing the overriding assignment of the `CADDY_ACME_API` variable. diff --git a/docker/compose/zrok-instance/compose.yml b/docker/compose/zrok-instance/compose.yml index 80b9b143..4b553d63 100644 --- a/docker/compose/zrok-instance/compose.yml +++ b/docker/compose/zrok-instance/compose.yml @@ -87,6 +87,8 @@ services: depends_on: zrok-permissions: condition: service_completed_successfully + ziti-quickstart: + condition: service_healthy build: context: . dockerfile: ./zrok-controller.Dockerfile @@ -121,6 +123,8 @@ services: depends_on: zrok-permissions: condition: service_completed_successfully + ziti-quickstart: + condition: service_healthy build: context: . dockerfile: zrok-frontend.Dockerfile diff --git a/docs/getting-started.mdx b/docs/getting-started.mdx index 0b577fea..6632c532 100644 --- a/docs/getting-started.mdx +++ b/docs/getting-started.mdx @@ -1,5 +1,5 @@ --- -title: Getting Started with zrok +title: Getting Started sidebar_label: Getting Started sidebar_position: 10 --- @@ -8,46 +8,75 @@ import { AssetsProvider } from '@site/src/components/assets-context'; import DownloadCard from '@site/src/components/download-card'; import DownloadCardStyles from '@site/src/css/download-card.module.css'; +## Your Secure Internet Sharing Perimeter -## Get an Account +`zrok` (*/ziːɹɒk/ ZEE-rock*) is a secure, open-source, self-hostable sharing platform that simplifies shielding and sharing network services or files. +There's a hardened zrok-as-a-service offering available at [myzrok.io](https://myzrok.io) with a generous free tier. - - - - -

Hosted zrokNet

-
- - Use NetFoundry's public zrok instance. - - - - - - -
-
- - - -

Self-Hosted zrok

-
- - Run a zrok instance on Linux, Docker, or Kubernetes. - - - - - - -
-
+### Your First Share + +1. Get an account token + + + + +

Hosted zrok

+
+ + Use NetFoundry's public zrok instance. + + + + + + +
+
+ + + +

Self-Hosted zrok

+
+ + Run a zrok instance on Linux, Docker, or Kubernetes. + + + + + + +
+
+2. [Download the zrok binary](#installing-the-zrok-command) +3. Enable zrok for your [user environment](#enabling-your-zrok-environment) -## What's a zrok? + ```bash + zrok enable + ``` + +4. Share `http://localhost:8080` + + ```bash + zrok share public 8080 + ``` + +5. Visit the public URL displayed in your terminal + + ![zrok share public](images/zrok_share_public.png) + +## Share Backend Modes + +zrok shares can be public or private, with different options for backend modes, including: + +* [Public shares](./concepts/sharing-public.mdx) for [web services](./concepts/http.md) or [files](./concepts/files.md) +* [Private shares for web services or files](./concepts/sharing-private.mdx) +* [TCP Tunnels](./concepts/tunnels.md) +* [UDP Tunnels](./concepts/tunnels.md) +* [File Drives](./guides/drives.mdx) +* [VPN](./guides/vpn/vpn.md) -`zrok` (*/ziːɹɒk/ ZEE-rock*) is a secure, open-source, self-hostable sharing platform that simplifies shielding and sharing network services or files. There's a hardened zrok-as-a-service offering available at [zrok.io](https://zrok.io) with a generous free tier. ## Open Source @@ -98,7 +127,7 @@ If [sharing privately](./concepts/sharing-private.mdx), only users with the shar ## Enabling Your zrok Environment -After you have [an account](#get-an-account), you can enable your `zrok` environment. +After you have [an account](#your-first-share), you can enable your `zrok` environment. A zrok environment usually refers to an enabled device where shares and accesses can be created, .e.g., `~/.zrok` on a Unix machine. It can be a specific user's environment or a system-wide agent's environment owned by the administrator. @@ -336,7 +365,7 @@ Here's a quick review of the `zrok` mental model and the vocabulary. You create an _account_ with a `zrok` _instance_. Your account is identified by a username and a password, which you use to log into the _web console_. Your account also has a _secret token_, which you will use to authenticate from the `zrok` command-line to interact with the _instance_. -You create a new _account_ with NetFoundry's `zrok` _instance_ by subscribing in [myzrok.io](https://myzrok.io) or in a self-hosted `zrok` _instance_ by running [the `zrok invite` command](/guides/self-hosting/self-service-invite.mdx). +You create a new _account_ with NetFoundry's `zrok` _instance_ by subscribing in [myzrok.io](https://myzrok.io) or in a self-hosted `zrok` _instance_ by running [the `zrok invite` command](/guides/self-hosting/self-service-invite.mdx) or the `zrok admin create account` command. ### Environment diff --git a/docs/guides/install/windows.mdx b/docs/guides/install/windows.mdx index e6bb4b76..e0a4760d 100644 --- a/docs/guides/install/windows.mdx +++ b/docs/guides/install/windows.mdx @@ -18,7 +18,13 @@ import styles from '@site/src/css/download-card.module.css'; -1. In PowerShell, install in `%USERPROFILE%\bin\zrok.exe` and set the search path. +1. In PowerShell, change to the directory where you downloaded zrok. + + ```text + cd "$env:USERPROFILE\Downloads" + ``` + +1. In PowerShell, install zrok in your home directory (`bin\zrok.exe`), and permanently set the executable search path. ```text $binDir = Join-Path -Path $env:USERPROFILE -ChildPath "bin" diff --git a/docs/guides/self-hosting/self-service-invite.mdx b/docs/guides/self-hosting/self-service-invite.mdx index a04c0cbc..42c23dfd 100644 --- a/docs/guides/self-hosting/self-service-invite.mdx +++ b/docs/guides/self-hosting/self-service-invite.mdx @@ -6,10 +6,10 @@ This is how to set up self-service invitations for your users to get an account ## Overview -- You can create user accounts directly with the `zrok admin` CLI or API. +- You can create user accounts directly with the `zrok admin create account` CLI or API instead of inviting them. - You can welcome users to invite themselves via email. -- You can generate invitation tokens if you want to restrict self-service invitations. - To enable self-service invitations you must also configure the controller to send email. +- You can require an invitation token if you want to restrict self-service. ## The Self-Service User Experience diff --git a/docs/myzrok/_category_.json b/docs/myzrok/_category_.json new file mode 100644 index 00000000..13e637eb --- /dev/null +++ b/docs/myzrok/_category_.json @@ -0,0 +1,7 @@ +{ + "label": "myzrok", + "position": 50, + "link": { + "type": "generated-index" + } +} diff --git a/docs/myzrok/custom-domains/_category_.json b/docs/myzrok/custom-domains/_category_.json new file mode 100644 index 00000000..ea8a8f1c --- /dev/null +++ b/docs/myzrok/custom-domains/_category_.json @@ -0,0 +1,8 @@ +{ + "label": "Custom Domains", + "position": 120, + "link": { + "type": "doc", + "id": "myzrok/custom-domains/index" + } +} diff --git a/docs/myzrok/custom-domains/images/myzrok_add_a_record.png b/docs/myzrok/custom-domains/images/myzrok_add_a_record.png new file mode 100644 index 00000000..751fe3b1 Binary files /dev/null and b/docs/myzrok/custom-domains/images/myzrok_add_a_record.png differ diff --git a/docs/myzrok/custom-domains/images/myzrok_add_cname.png b/docs/myzrok/custom-domains/images/myzrok_add_cname.png new file mode 100644 index 00000000..d079c2a1 Binary files /dev/null and b/docs/myzrok/custom-domains/images/myzrok_add_cname.png differ diff --git a/docs/myzrok/custom-domains/images/myzrok_add_domain.png b/docs/myzrok/custom-domains/images/myzrok_add_domain.png new file mode 100644 index 00000000..ab06b844 Binary files /dev/null and b/docs/myzrok/custom-domains/images/myzrok_add_domain.png differ diff --git a/docs/myzrok/custom-domains/images/myzrok_domains_page.png b/docs/myzrok/custom-domains/images/myzrok_domains_page.png new file mode 100644 index 00000000..170e6a8e Binary files /dev/null and b/docs/myzrok/custom-domains/images/myzrok_domains_page.png differ diff --git a/docs/myzrok/custom-domains/images/myzrok_finalize.png b/docs/myzrok/custom-domains/images/myzrok_finalize.png new file mode 100644 index 00000000..09008be5 Binary files /dev/null and b/docs/myzrok/custom-domains/images/myzrok_finalize.png differ diff --git a/docs/myzrok/custom-domains/images/myzrok_verify_dns.png b/docs/myzrok/custom-domains/images/myzrok_verify_dns.png new file mode 100644 index 00000000..bb689c9d Binary files /dev/null and b/docs/myzrok/custom-domains/images/myzrok_verify_dns.png differ diff --git a/docs/myzrok/custom-domains/images/zrok_status.png b/docs/myzrok/custom-domains/images/zrok_status.png new file mode 100644 index 00000000..d562d5dc Binary files /dev/null and b/docs/myzrok/custom-domains/images/zrok_status.png differ diff --git a/docs/myzrok/custom-domains/index.mdx b/docs/myzrok/custom-domains/index.mdx new file mode 100644 index 00000000..e6057e32 --- /dev/null +++ b/docs/myzrok/custom-domains/index.mdx @@ -0,0 +1,110 @@ +--- +title: Custom Domains +--- + +## Overview +[myzrok.io](https://myzrok.io) is a hosted zrok-as-a-service offering that provides a way for you bring a custom DNS name for zrok shares. +For example, let's say you own the domain `foo.example.io`, you can leverage zrok custom domains to +create ephemeral shares such as: `https://vw8jbg4ijz5g.foo.example.io` +or [reserved shares](/concepts/sharing-reserved.md) such as `https://myshare.foo.example.io`. + +Custom domains require a Pro subscription with [myzrok.io](https://myzrok.io). +If you don't already have an account, you can sign up for one [here](https://myzrok.io). + +[myzrok.io](https://myzrok.io) provides a guided setup with just a few easy steps! + +1. Bring your own custom domain name +2. Create DNS records for certificate validation and traffic routing +3. Wait for zrok to validate your records and finalize configuration +4. Start sharing! + +Detailed setup instructions are documented below. + +### Prerequisites +:::note +In order to create a custom domain in zrok, **you must already own the domain you want to use.** +::: + +During the setup process you will need to create DNS records to validate ownership and to allow a certificate to be issued +on behalf of your domain. Once you have your domain registered, you can begin the process of setting up your custom +domain with zrok. + +### Create Your Custom Domain + +Log into the myzrok console and access the domains page by clicking on the globe icon in the left navigation menu. + +![myzrok_domains_page](images/myzrok_domains_page.png) + + +Click the CREATE button on the top right of the page to get started. +When you click the create button you’ll be presented with a form to allow you to enable your custom domain. +Enter your domain into the form field and click CREATE. This will begin the process for setting up your custom domain. +A new managed TLS certificate will be created to host traffic on your domain's behalf. + +![myzrok_add_domain](images/myzrok_add_domain.png) + +This may take a few minutes. +You may close the form at this time and come back when your domain is *pending validation.* +Once your certificate is ready, you’ll be presented with instructions on how to set up your DNS records. + +### Creating DNS Records + +zrok will host and manage a TLS certificate for the custom domain on your behalf. +This process requires a DNS validation record to be created in order to prove ownership of the domain. +Follow the prompts in the UI to create a CNAME DNS record with the name and value specified in the UI. + +![myzrok_add_cname](images/myzrok_add_cname.png) + +Next, create an A record to direct all DNS requests for your domain to a set of static IPs that are hosted by zrok. + +![myzrok_add_a_record](images/myzrok_add_a_record.png) + +After you’ve created your records, you can verify that they are configured properly using the instructions provided in the form. + +![myzrok_verify_dns](images/myzrok_verify_dns.png) + +If the `nslookup` command returns the IP addresses supplied for the A-record entry, then DNS for your domain is resolving properly. + +``` +nslookup test.foo.example.io +Server: 192.168.86.194 +Address: 192.168.86.194#53 + +Non-authoritative answer: +Name: test.foo.example.io +Address: 99.83.220.186 +Name: test.foo.example.io +Address: 52.223.6.108 +``` + +Once you have created your DNS records, it will take zrok a few minutes to validate that they exist. +You can safely close the form until your certificate has been issued. + +### Finalizing Your Custom Domain + +After your records have been validated and your certificate has been issued, click the FINALIZE button within 72 hours to complete your custom domain setup. + +![myzrok_finalize](images/myzrok_finalize.png) + +From here, myzrok.io will complete the last few steps of creating your custom domain. +This should only take a minute, but if you need to close the form you can find the instructions on how to share your frontend when you return. + +### Start Sharing! +Once the Finalize stage has completed, you can start sharing with your custom DNS. + +In order to create shares that utilize your custom DNS, you will need to specify the `--frontend` flag when creating a share, +or update your environment configuration to use this new frontend by default. + +``` +zrok share public --frontend foo-example--goPIhgtJtz +``` + +You can set the custom frontend as the environment default by running: + +``` +zrok config set defaultFrontend foo-example--goPIhgtJtz +``` + +To validate which frontend is being used, use the `zrok status` command, which will identify the default frontend being used: + +![zrok_status](images/zrok_status.png) diff --git a/endpoints/proxy/backend.go b/endpoints/proxy/backend.go index a181b025..4d3491d3 100644 --- a/endpoints/proxy/backend.go +++ b/endpoints/proxy/backend.go @@ -67,6 +67,10 @@ func (b *Backend) Run() error { return nil } +func (b *Backend) Stop() error { + return b.listener.Close() +} + func newReverseProxy(cfg *BackendConfig) (*httputil.ReverseProxy, error) { targetURL, err := url.Parse(cfg.EndpointAddress) if err != nil { diff --git a/endpoints/proxy/caddyWebBackend.go b/endpoints/proxy/caddyWebBackend.go index ebae913a..e5d6a663 100644 --- a/endpoints/proxy/caddyWebBackend.go +++ b/endpoints/proxy/caddyWebBackend.go @@ -81,6 +81,10 @@ func (c *CaddyWebBackend) Run() error { return caddy.Run(c.caddyCfg) } +func (c *CaddyWebBackend) Stop() error { + return caddy.Stop() +} + func (c *CaddyWebBackend) Requests() func() int32 { return func() int32 { return 0 } } diff --git a/environment/env_core/model.go b/environment/env_core/model.go index ebb1df34..39624774 100644 --- a/environment/env_core/model.go +++ b/environment/env_core/model.go @@ -14,6 +14,7 @@ type Root interface { Client() (*rest_client_zrok.Zrok, error) ApiEndpoint() (string, string) DefaultFrontend() (string, string) + Headless() (bool, string) IsEnabled() bool Environment() *Environment @@ -26,6 +27,8 @@ type Root interface { ZitiIdentityNamed(name string) (string, error) SaveZitiIdentityNamed(name, data string) error DeleteZitiIdentityNamed(name string) error + + AgentSocket() (string, error) } type Environment struct { @@ -37,6 +40,7 @@ type Environment struct { type Config struct { ApiEndpoint string DefaultFrontend string + Headless bool } type Metadata struct { diff --git a/environment/env_v0_3/api.go b/environment/env_v0_3/api.go index 61a03296..b877c2dc 100644 --- a/environment/env_v0_3/api.go +++ b/environment/env_v0_3/api.go @@ -7,11 +7,12 @@ import ( "github.com/openziti/zrok/build" "github.com/openziti/zrok/environment/env_core" "github.com/openziti/zrok/rest_client_zrok" + metadata2 "github.com/openziti/zrok/rest_client_zrok/metadata" "github.com/pkg/errors" "net/url" "os" "path/filepath" - "regexp" + "strconv" ) func (r *Root) Metadata() *env_core.Metadata { @@ -48,15 +49,13 @@ func (r *Root) Client() (*rest_client_zrok.Zrok, error) { transport.Consumers["application/zrok.v1+json"] = runtime.JSONConsumer() zrok := rest_client_zrok.New(transport, strfmt.Default) - v, err := zrok.Metadata.Version(nil) + _, err = zrok.Metadata.ClientVersionCheck(&metadata2.ClientVersionCheckParams{ + Body: metadata2.ClientVersionCheckBody{ + ClientVersion: build.String(), + }, + }) if err != nil { - return nil, errors.Wrapf(err, "error getting version from api endpoint '%v': %v", apiEndpoint, err) - } - // allow reported version string to be optionally prefixed with - // "refs/heads/" or "refs/tags/" - re := regexp.MustCompile(`^(refs/(heads|tags)/)?` + build.Series) - if !re.MatchString(string(v.Payload)) { - return nil, errors.Errorf("expected a '%v' version, received: '%v'", build.Series, v.Payload) + return nil, errors.Wrapf(err, "client version error accessing api endpoint '%v': %v", apiEndpoint, err) } return zrok, nil @@ -103,6 +102,26 @@ func (r *Root) DefaultFrontend() (string, string) { return defaultFrontend, from } +func (r *Root) Headless() (bool, string) { + headless := false + from := "binary" + + if r.Config() != nil { + headless = r.Config().Headless + from = "config" + } + + env := os.Getenv("ZROK_HEADLESS") + if env != "" { + if v, err := strconv.ParseBool(env); err == nil { + headless = v + from = "ZROK_HEADLESS" + } + } + + return headless, from +} + func (r *Root) Environment() *env_core.Environment { return r.env } @@ -174,6 +193,10 @@ func (r *Root) DeleteZitiIdentityNamed(name string) error { return nil } +func (r *Root) AgentSocket() (string, error) { + return "", errors.Errorf("this environment version does not support agent sockets; please 'zrok update' this environment") +} + func (r *Root) Obliterate() error { zrd, err := rootDir() if err != nil { diff --git a/environment/env_v0_4/api.go b/environment/env_v0_4/api.go index 35db06c5..2b51d4e1 100644 --- a/environment/env_v0_4/api.go +++ b/environment/env_v0_4/api.go @@ -7,11 +7,12 @@ import ( "github.com/openziti/zrok/build" "github.com/openziti/zrok/environment/env_core" "github.com/openziti/zrok/rest_client_zrok" + metadata2 "github.com/openziti/zrok/rest_client_zrok/metadata" "github.com/pkg/errors" "net/url" "os" "path/filepath" - "regexp" + "strconv" ) func (r *Root) Metadata() *env_core.Metadata { @@ -48,17 +49,14 @@ func (r *Root) Client() (*rest_client_zrok.Zrok, error) { transport.Consumers["application/zrok.v1+json"] = runtime.JSONConsumer() zrok := rest_client_zrok.New(transport, strfmt.Default) - v, err := zrok.Metadata.Version(nil) + _, err = zrok.Metadata.ClientVersionCheck(&metadata2.ClientVersionCheckParams{ + Body: metadata2.ClientVersionCheckBody{ + ClientVersion: build.String(), + }, + }) if err != nil { - return nil, errors.Wrapf(err, "error getting version from api endpoint '%v': %v", apiEndpoint, err) + return nil, errors.Wrapf(err, "client version error accessing api endpoint '%v': %v", apiEndpoint, err) } - // allow reported version string to be optionally prefixed with - // "refs/heads/" or "refs/tags/" - re := regexp.MustCompile(`^(refs/(heads|tags)/)?` + build.Series) - if !re.MatchString(string(v.Payload)) { - return nil, errors.Errorf("expected a '%v' version, received: '%v'", build.Series, v.Payload) - } - return zrok, nil } @@ -103,6 +101,26 @@ func (r *Root) DefaultFrontend() (string, string) { return defaultFrontend, from } +func (r *Root) Headless() (bool, string) { + headless := false + from := "binary" + + if r.Config() != nil { + headless = r.Config().Headless + from = "config" + } + + env := os.Getenv("ZROK_HEADLESS") + if env != "" { + if v, err := strconv.ParseBool(env); err == nil { + headless = v + from = "ZROK_HEADLESS" + } + } + + return headless, from +} + func (r *Root) Environment() *env_core.Environment { return r.env } @@ -174,6 +192,10 @@ func (r *Root) DeleteZitiIdentityNamed(name string) error { return nil } +func (r *Root) AgentSocket() (string, error) { + return agentSocket() +} + func (r *Root) Obliterate() error { zrd, err := rootDir() if err != nil { diff --git a/environment/env_v0_4/dirs.go b/environment/env_v0_4/dirs.go index b259fe09..bf18febf 100644 --- a/environment/env_v0_4/dirs.go +++ b/environment/env_v0_4/dirs.go @@ -53,3 +53,11 @@ func identityFile(name string) (string, error) { } return filepath.Join(idd, fmt.Sprintf("%v.json", name)), nil } + +func agentSocket() (string, error) { + zrd, err := rootDir() + if err != nil { + return "", err + } + return filepath.Join(zrd, "agent.socket"), nil +} diff --git a/environment/env_v0_4/root.go b/environment/env_v0_4/root.go index f085f3f6..329c7fd1 100644 --- a/environment/env_v0_4/root.go +++ b/environment/env_v0_4/root.go @@ -225,12 +225,17 @@ func loadConfig() (*env_core.Config, error) { out := &env_core.Config{ ApiEndpoint: cfg.ApiEndpoint, DefaultFrontend: cfg.DefaultFrontend, + Headless: cfg.Headless, } return out, nil } func saveConfig(cfg *env_core.Config) error { - in := &config{ApiEndpoint: cfg.ApiEndpoint, DefaultFrontend: cfg.DefaultFrontend} + in := &config{ + ApiEndpoint: cfg.ApiEndpoint, + DefaultFrontend: cfg.DefaultFrontend, + Headless: cfg.Headless, + } data, err := json.MarshalIndent(in, "", " ") if err != nil { return errors.Wrap(err, "error marshaling config") @@ -326,6 +331,7 @@ type metadata struct { type config struct { ApiEndpoint string `json:"api_endpoint"` DefaultFrontend string `json:"default_frontend"` + Headless bool `json:"headless"` } type environment struct { diff --git a/etc/ctrl.yml b/etc/ctrl.yml index d9b0efd0..18ffc4d0 100644 --- a/etc/ctrl.yml +++ b/etc/ctrl.yml @@ -131,16 +131,6 @@ metrics: org: zrok token: "" -# Configure password requirements for user accounts. -# -#passwords: -# length: 8 -# require_capital: true -# require_numeric: true -# require_special: true -# # Denote which characters satisfy the `require_special` requirement. Note the need to escape specific characters. -# valid_special_characters: "\"\\`'~!@#$%^&*()[],./" - # Configure the generated URL for the registration email. The registration token will be appended to this URL. # registration: @@ -158,6 +148,7 @@ reset_password: #store: # path: "host=127.0.0.1 user=zrok password=zrok dbname=zrok" # type: "postgres" +# disable_auto_migration: true # store: path: zrok.db diff --git a/go.mod b/go.mod index 18964fa3..f4de47ed 100644 --- a/go.mod +++ b/go.mod @@ -23,12 +23,14 @@ require ( github.com/google/uuid v1.6.0 github.com/gorilla/websocket v1.5.3 github.com/greenpau/caddy-security v1.1.29 + github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.0 github.com/iancoleman/strcase v0.3.0 github.com/influxdata/influxdb-client-go/v2 v2.11.0 github.com/jaevor/go-nanoid v1.3.0 github.com/jedib0t/go-pretty/v6 v6.5.9 github.com/jessevdk/go-flags v1.6.1 github.com/jmoiron/sqlx v1.3.5 + github.com/kolesnikovae/go-winjob v1.0.0 github.com/lib/pq v1.10.9 github.com/mattn/go-sqlite3 v1.14.18 github.com/michaelquigley/cf v0.0.13 @@ -59,12 +61,17 @@ require ( golang.org/x/crypto v0.27.0 golang.org/x/net v0.29.0 golang.org/x/oauth2 v0.23.0 + golang.org/x/sys v0.25.0 golang.org/x/time v0.6.0 + google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142 + google.golang.org/grpc v1.67.1 + google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.5.1 + google.golang.org/protobuf v1.34.2 nhooyr.io/websocket v1.8.17 ) require ( - cloud.google.com/go/compute/metadata v0.3.0 // indirect + cloud.google.com/go/compute/metadata v0.5.0 // indirect filippo.io/edwards25519 v1.1.0 // indirect github.com/AndreasBriese/bbloom v0.0.0-20190825152654-46b345b51c96 // indirect github.com/Azure/go-ntlmssp v0.0.0-20221128193559-754e69321358 // indirect @@ -87,7 +94,7 @@ require ( github.com/caddyserver/zerossl v0.1.3 // indirect github.com/cenkalti/backoff/v4 v4.3.0 // indirect github.com/cespare/xxhash v1.1.0 // indirect - github.com/cespare/xxhash/v2 v2.2.0 // indirect + github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/chzyer/readline v1.5.1 // indirect github.com/containerd/console v1.0.3 // indirect github.com/cpuguy83/go-md2man/v2 v2.0.4 // indirect @@ -129,7 +136,7 @@ require ( github.com/gobwas/pool v0.2.1 // indirect github.com/gobwas/ws v1.2.1 // indirect github.com/golang-jwt/jwt/v4 v4.5.1 // indirect - github.com/golang/glog v1.2.0 // indirect + github.com/golang/glog v1.2.2 // indirect github.com/golang/protobuf v1.5.4 // indirect github.com/golang/snappy v0.0.4 // indirect github.com/google/cel-go v0.20.1 // indirect @@ -142,7 +149,6 @@ require ( github.com/gorilla/securecookie v1.1.2 // indirect github.com/greenpau/go-authcrunch v1.1.4 // indirect github.com/greenpau/versioned v1.0.30 // indirect - github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.0 // indirect github.com/huandu/xstrings v1.4.0 // indirect github.com/imdario/mergo v0.3.16 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect @@ -257,17 +263,13 @@ require ( golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 // indirect golang.org/x/mod v0.19.0 // indirect golang.org/x/sync v0.8.0 // indirect - golang.org/x/sys v0.25.0 // indirect golang.org/x/term v0.24.0 // indirect golang.org/x/text v0.18.0 // indirect golang.org/x/tools v0.23.0 // indirect golang.zx2c4.com/wintun v0.0.0-20230126152724-0fa3db229ce2 // indirect golang.zx2c4.com/wireguard v0.0.0-20220703234212-c31a7b1ab478 // indirect golang.zx2c4.com/wireguard/windows v0.5.3 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20240506185236-b8a5c65736ae // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20240429193739-8cf5692501f6 // indirect - google.golang.org/grpc v1.63.2 // indirect - google.golang.org/protobuf v1.34.2 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240814211410-ddb44dafa142 // indirect gopkg.in/go-jose/go-jose.v2 v2.6.3 // indirect gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 // indirect diff --git a/go.sum b/go.sum index 2a3bc51c..cd243e1a 100644 --- a/go.sum +++ b/go.sum @@ -29,8 +29,8 @@ cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvf cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= -cloud.google.com/go/compute/metadata v0.3.0 h1:Tz+eQXMEqDIKRsmY3cHTL6FVaynIjX2QxYC4trgAKZc= -cloud.google.com/go/compute/metadata v0.3.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k= +cloud.google.com/go/compute/metadata v0.5.0 h1:Zr0eK8JbFv6+Wi4ilXAR8FJ3wyNdpxHKJNPos6LTZOY= +cloud.google.com/go/compute/metadata v0.5.0/go.mod h1:aHnloV2TPI38yx4s9+wAZhHykWvVCfu7hQbF+9CWoiY= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk= @@ -151,8 +151,8 @@ github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= -github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= +github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/charmbracelet/bubbles v0.14.0 h1:DJfCwnARfWjZLvMglhSQzo76UZ2gucuHPy9jLWX45Og= github.com/charmbracelet/bubbles v0.14.0/go.mod h1:bbeTiXwPww4M031aGi8UK2HT9RDWoiNibae+1yCMtcc= github.com/charmbracelet/bubbletea v0.21.0/go.mod h1:GgmJMec61d08zXsOhqRC/AiOx4K4pmz+VIcRIm1FKr4= @@ -334,8 +334,8 @@ github.com/golang-jwt/jwt/v4 v4.5.1/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w github.com/golang-jwt/jwt/v5 v5.2.1 h1:OuVbFODueb089Lh128TAcimifWaLhJwVflnrgM17wHk= github.com/golang-jwt/jwt/v5 v5.2.1/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/glog v1.2.0 h1:uCdmnmatrKCgMBlM4rMuJZWOkPDqdbZPnrMXDY4gI68= -github.com/golang/glog v1.2.0/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w= +github.com/golang/glog v1.2.2 h1:1+mZ9upx1Dh6FmUTFR1naJ77miKiXgALjWOZ3NVFPmY= +github.com/golang/glog v1.2.2/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -588,6 +588,8 @@ github.com/klauspost/compress v1.17.8/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ib github.com/klauspost/cpuid/v2 v2.0.12/go.mod h1:g2LTdtYhdyuGPqyWyv7qRAmj1WBqxuObKfj5c0PQa7c= github.com/klauspost/cpuid/v2 v2.2.7 h1:ZWSB3igEs+d0qvnxR/ZBzXVmxkgt8DdzP6m9pfuVLDM= github.com/klauspost/cpuid/v2 v2.2.7/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= +github.com/kolesnikovae/go-winjob v1.0.0 h1:OKEtCHB3sYNAiqNwGDhf08Y6luM7C8mP+42rp1N6SeE= +github.com/kolesnikovae/go-winjob v1.0.0/go.mod h1:k0joOLP3/NBrRmDQjPV2+oN1TPmEWt6arTNtFjVeQuM= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= @@ -1223,6 +1225,7 @@ golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200826173525-f9321e4c35a6/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1440,10 +1443,10 @@ google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaE google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= google.golang.org/genproto v0.0.0-20240401170217-c3f982113cda h1:wu/KJm9KJwpfHWhkkZGohVC6KRrc1oJNr4jwtQMOQXw= google.golang.org/genproto v0.0.0-20240401170217-c3f982113cda/go.mod h1:g2LLCvCeCSir/JJSWosk19BR4NVxGqHUC6rxIRsd7Aw= -google.golang.org/genproto/googleapis/api v0.0.0-20240506185236-b8a5c65736ae h1:AH34z6WAGVNkllnKs5raNq3yRq93VnjBG6rpfub/jYk= -google.golang.org/genproto/googleapis/api v0.0.0-20240506185236-b8a5c65736ae/go.mod h1:FfiGhwUm6CJviekPrc0oJ+7h29e+DmWU6UtjX0ZvI7Y= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240429193739-8cf5692501f6 h1:DujSIu+2tC9Ht0aPNA7jgj23Iq8Ewi5sgkQ++wdvonE= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240429193739-8cf5692501f6/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY= +google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142 h1:wKguEg1hsxI2/L3hUYrpo1RVi48K+uTyzKqprwLXsb8= +google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142/go.mod h1:d6be+8HhtEtucleCbxpPW9PA9XwISACu8nvpPqF0BVo= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240814211410-ddb44dafa142 h1:e7S5W7MGGLaSu8j3YjdezkZ+m1/Nm0uRVRMEMGk26Xs= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240814211410-ddb44dafa142/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= @@ -1464,8 +1467,10 @@ google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAG google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.63.2 h1:MUeiw1B2maTVZthpU5xvASfTh3LDbxHd6IJ6QQVU+xM= -google.golang.org/grpc v1.63.2/go.mod h1:WAX/8DgncnokcFUldAxq7GeB5DXHDbMF+lLvDomNkRA= +google.golang.org/grpc v1.67.1 h1:zWnc1Vrcno+lHZCOofnIMvycFcc0QRGIzm9dhnDX68E= +google.golang.org/grpc v1.67.1/go.mod h1:1gLDyUQU7CTLJI90u3nXZ9ekeghjeM7pTDZlqFNg2AA= +google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.5.1 h1:F29+wU6Ee6qgu9TddPgooOdaqsxTMunOoj8KA5yuS5A= +google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.5.1/go.mod h1:5KF+wpkbTSbGcR9zteSqZV6fqFOWBl4Yde8En8MryZA= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= diff --git a/google/api/annotations.proto b/google/api/annotations.proto new file mode 100644 index 00000000..84c48164 --- /dev/null +++ b/google/api/annotations.proto @@ -0,0 +1,31 @@ +// Copyright 2024 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.api; + +import "google/api/http.proto"; +import "google/protobuf/descriptor.proto"; + +option go_package = "google.golang.org/genproto/googleapis/api/annotations;annotations"; +option java_multiple_files = true; +option java_outer_classname = "AnnotationsProto"; +option java_package = "com.google.api"; +option objc_class_prefix = "GAPI"; + +extend google.protobuf.MethodOptions { + // See `HttpRule`. + HttpRule http = 72295728; +} diff --git a/google/api/field_behavior.proto b/google/api/field_behavior.proto new file mode 100644 index 00000000..2865ba05 --- /dev/null +++ b/google/api/field_behavior.proto @@ -0,0 +1,104 @@ +// Copyright 2024 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.api; + +import "google/protobuf/descriptor.proto"; + +option go_package = "google.golang.org/genproto/googleapis/api/annotations;annotations"; +option java_multiple_files = true; +option java_outer_classname = "FieldBehaviorProto"; +option java_package = "com.google.api"; +option objc_class_prefix = "GAPI"; + +extend google.protobuf.FieldOptions { + // A designation of a specific field behavior (required, output only, etc.) + // in protobuf messages. + // + // Examples: + // + // string name = 1 [(google.api.field_behavior) = REQUIRED]; + // State state = 1 [(google.api.field_behavior) = OUTPUT_ONLY]; + // google.protobuf.Duration ttl = 1 + // [(google.api.field_behavior) = INPUT_ONLY]; + // google.protobuf.Timestamp expire_time = 1 + // [(google.api.field_behavior) = OUTPUT_ONLY, + // (google.api.field_behavior) = IMMUTABLE]; + repeated google.api.FieldBehavior field_behavior = 1052 [packed = false]; +} + +// An indicator of the behavior of a given field (for example, that a field +// is required in requests, or given as output but ignored as input). +// This **does not** change the behavior in protocol buffers itself; it only +// denotes the behavior and may affect how API tooling handles the field. +// +// Note: This enum **may** receive new values in the future. +enum FieldBehavior { + // Conventional default for enums. Do not use this. + FIELD_BEHAVIOR_UNSPECIFIED = 0; + + // Specifically denotes a field as optional. + // While all fields in protocol buffers are optional, this may be specified + // for emphasis if appropriate. + OPTIONAL = 1; + + // Denotes a field as required. + // This indicates that the field **must** be provided as part of the request, + // and failure to do so will cause an error (usually `INVALID_ARGUMENT`). + REQUIRED = 2; + + // Denotes a field as output only. + // This indicates that the field is provided in responses, but including the + // field in a request does nothing (the server *must* ignore it and + // *must not* throw an error as a result of the field's presence). + OUTPUT_ONLY = 3; + + // Denotes a field as input only. + // This indicates that the field is provided in requests, and the + // corresponding field is not included in output. + INPUT_ONLY = 4; + + // Denotes a field as immutable. + // This indicates that the field may be set once in a request to create a + // resource, but may not be changed thereafter. + IMMUTABLE = 5; + + // Denotes that a (repeated) field is an unordered list. + // This indicates that the service may provide the elements of the list + // in any arbitrary order, rather than the order the user originally + // provided. Additionally, the list's order may or may not be stable. + UNORDERED_LIST = 6; + + // Denotes that this field returns a non-empty default value if not set. + // This indicates that if the user provides the empty value in a request, + // a non-empty value will be returned. The user will not be aware of what + // non-empty value to expect. + NON_EMPTY_DEFAULT = 7; + + // Denotes that the field in a resource (a message annotated with + // google.api.resource) is used in the resource name to uniquely identify the + // resource. For AIP-compliant APIs, this should only be applied to the + // `name` field on the resource. + // + // This behavior should not be applied to references to other resources within + // the message. + // + // The identifier field of resources often have different field behavior + // depending on the request it is embedded in (e.g. for Create methods name + // is optional and unused, while for Update methods it is required). Instead + // of method-specific annotations, only `IDENTIFIER` is required. + IDENTIFIER = 8; +} diff --git a/google/api/http.proto b/google/api/http.proto new file mode 100644 index 00000000..e3270371 --- /dev/null +++ b/google/api/http.proto @@ -0,0 +1,371 @@ +// Copyright 2024 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.api; + +option cc_enable_arenas = true; +option go_package = "google.golang.org/genproto/googleapis/api/annotations;annotations"; +option java_multiple_files = true; +option java_outer_classname = "HttpProto"; +option java_package = "com.google.api"; +option objc_class_prefix = "GAPI"; + +// Defines the HTTP configuration for an API service. It contains a list of +// [HttpRule][google.api.HttpRule], each specifying the mapping of an RPC method +// to one or more HTTP REST API methods. +message Http { + // A list of HTTP configuration rules that apply to individual API methods. + // + // **NOTE:** All service configuration rules follow "last one wins" order. + repeated HttpRule rules = 1; + + // When set to true, URL path parameters will be fully URI-decoded except in + // cases of single segment matches in reserved expansion, where "%2F" will be + // left encoded. + // + // The default behavior is to not decode RFC 6570 reserved characters in multi + // segment matches. + bool fully_decode_reserved_expansion = 2; +} + +// gRPC Transcoding +// +// gRPC Transcoding is a feature for mapping between a gRPC method and one or +// more HTTP REST endpoints. It allows developers to build a single API service +// that supports both gRPC APIs and REST APIs. Many systems, including [Google +// APIs](https://github.com/googleapis/googleapis), +// [Cloud Endpoints](https://cloud.google.com/endpoints), [gRPC +// Gateway](https://github.com/grpc-ecosystem/grpc-gateway), +// and [Envoy](https://github.com/envoyproxy/envoy) proxy support this feature +// and use it for large scale production services. +// +// `HttpRule` defines the schema of the gRPC/REST mapping. The mapping specifies +// how different portions of the gRPC request message are mapped to the URL +// path, URL query parameters, and HTTP request body. It also controls how the +// gRPC response message is mapped to the HTTP response body. `HttpRule` is +// typically specified as an `google.api.http` annotation on the gRPC method. +// +// Each mapping specifies a URL path template and an HTTP method. The path +// template may refer to one or more fields in the gRPC request message, as long +// as each field is a non-repeated field with a primitive (non-message) type. +// The path template controls how fields of the request message are mapped to +// the URL path. +// +// Example: +// +// service Messaging { +// rpc GetMessage(GetMessageRequest) returns (Message) { +// option (google.api.http) = { +// get: "/v1/{name=messages/*}" +// }; +// } +// } +// message GetMessageRequest { +// string name = 1; // Mapped to URL path. +// } +// message Message { +// string text = 1; // The resource content. +// } +// +// This enables an HTTP REST to gRPC mapping as below: +// +// - HTTP: `GET /v1/messages/123456` +// - gRPC: `GetMessage(name: "messages/123456")` +// +// Any fields in the request message which are not bound by the path template +// automatically become HTTP query parameters if there is no HTTP request body. +// For example: +// +// service Messaging { +// rpc GetMessage(GetMessageRequest) returns (Message) { +// option (google.api.http) = { +// get:"/v1/messages/{message_id}" +// }; +// } +// } +// message GetMessageRequest { +// message SubMessage { +// string subfield = 1; +// } +// string message_id = 1; // Mapped to URL path. +// int64 revision = 2; // Mapped to URL query parameter `revision`. +// SubMessage sub = 3; // Mapped to URL query parameter `sub.subfield`. +// } +// +// This enables a HTTP JSON to RPC mapping as below: +// +// - HTTP: `GET /v1/messages/123456?revision=2&sub.subfield=foo` +// - gRPC: `GetMessage(message_id: "123456" revision: 2 sub: +// SubMessage(subfield: "foo"))` +// +// Note that fields which are mapped to URL query parameters must have a +// primitive type or a repeated primitive type or a non-repeated message type. +// In the case of a repeated type, the parameter can be repeated in the URL +// as `...?param=A¶m=B`. In the case of a message type, each field of the +// message is mapped to a separate parameter, such as +// `...?foo.a=A&foo.b=B&foo.c=C`. +// +// For HTTP methods that allow a request body, the `body` field +// specifies the mapping. Consider a REST update method on the +// message resource collection: +// +// service Messaging { +// rpc UpdateMessage(UpdateMessageRequest) returns (Message) { +// option (google.api.http) = { +// patch: "/v1/messages/{message_id}" +// body: "message" +// }; +// } +// } +// message UpdateMessageRequest { +// string message_id = 1; // mapped to the URL +// Message message = 2; // mapped to the body +// } +// +// The following HTTP JSON to RPC mapping is enabled, where the +// representation of the JSON in the request body is determined by +// protos JSON encoding: +// +// - HTTP: `PATCH /v1/messages/123456 { "text": "Hi!" }` +// - gRPC: `UpdateMessage(message_id: "123456" message { text: "Hi!" })` +// +// The special name `*` can be used in the body mapping to define that +// every field not bound by the path template should be mapped to the +// request body. This enables the following alternative definition of +// the update method: +// +// service Messaging { +// rpc UpdateMessage(Message) returns (Message) { +// option (google.api.http) = { +// patch: "/v1/messages/{message_id}" +// body: "*" +// }; +// } +// } +// message Message { +// string message_id = 1; +// string text = 2; +// } +// +// +// The following HTTP JSON to RPC mapping is enabled: +// +// - HTTP: `PATCH /v1/messages/123456 { "text": "Hi!" }` +// - gRPC: `UpdateMessage(message_id: "123456" text: "Hi!")` +// +// Note that when using `*` in the body mapping, it is not possible to +// have HTTP parameters, as all fields not bound by the path end in +// the body. This makes this option more rarely used in practice when +// defining REST APIs. The common usage of `*` is in custom methods +// which don't use the URL at all for transferring data. +// +// It is possible to define multiple HTTP methods for one RPC by using +// the `additional_bindings` option. Example: +// +// service Messaging { +// rpc GetMessage(GetMessageRequest) returns (Message) { +// option (google.api.http) = { +// get: "/v1/messages/{message_id}" +// additional_bindings { +// get: "/v1/users/{user_id}/messages/{message_id}" +// } +// }; +// } +// } +// message GetMessageRequest { +// string message_id = 1; +// string user_id = 2; +// } +// +// This enables the following two alternative HTTP JSON to RPC mappings: +// +// - HTTP: `GET /v1/messages/123456` +// - gRPC: `GetMessage(message_id: "123456")` +// +// - HTTP: `GET /v1/users/me/messages/123456` +// - gRPC: `GetMessage(user_id: "me" message_id: "123456")` +// +// Rules for HTTP mapping +// +// 1. Leaf request fields (recursive expansion nested messages in the request +// message) are classified into three categories: +// - Fields referred by the path template. They are passed via the URL path. +// - Fields referred by the [HttpRule.body][google.api.HttpRule.body]. They +// are passed via the HTTP +// request body. +// - All other fields are passed via the URL query parameters, and the +// parameter name is the field path in the request message. A repeated +// field can be represented as multiple query parameters under the same +// name. +// 2. If [HttpRule.body][google.api.HttpRule.body] is "*", there is no URL +// query parameter, all fields +// are passed via URL path and HTTP request body. +// 3. If [HttpRule.body][google.api.HttpRule.body] is omitted, there is no HTTP +// request body, all +// fields are passed via URL path and URL query parameters. +// +// Path template syntax +// +// Template = "/" Segments [ Verb ] ; +// Segments = Segment { "/" Segment } ; +// Segment = "*" | "**" | LITERAL | Variable ; +// Variable = "{" FieldPath [ "=" Segments ] "}" ; +// FieldPath = IDENT { "." IDENT } ; +// Verb = ":" LITERAL ; +// +// The syntax `*` matches a single URL path segment. The syntax `**` matches +// zero or more URL path segments, which must be the last part of the URL path +// except the `Verb`. +// +// The syntax `Variable` matches part of the URL path as specified by its +// template. A variable template must not contain other variables. If a variable +// matches a single path segment, its template may be omitted, e.g. `{var}` +// is equivalent to `{var=*}`. +// +// The syntax `LITERAL` matches literal text in the URL path. If the `LITERAL` +// contains any reserved character, such characters should be percent-encoded +// before the matching. +// +// If a variable contains exactly one path segment, such as `"{var}"` or +// `"{var=*}"`, when such a variable is expanded into a URL path on the client +// side, all characters except `[-_.~0-9a-zA-Z]` are percent-encoded. The +// server side does the reverse decoding. Such variables show up in the +// [Discovery +// Document](https://developers.google.com/discovery/v1/reference/apis) as +// `{var}`. +// +// If a variable contains multiple path segments, such as `"{var=foo/*}"` +// or `"{var=**}"`, when such a variable is expanded into a URL path on the +// client side, all characters except `[-_.~/0-9a-zA-Z]` are percent-encoded. +// The server side does the reverse decoding, except "%2F" and "%2f" are left +// unchanged. Such variables show up in the +// [Discovery +// Document](https://developers.google.com/discovery/v1/reference/apis) as +// `{+var}`. +// +// Using gRPC API Service Configuration +// +// gRPC API Service Configuration (service config) is a configuration language +// for configuring a gRPC service to become a user-facing product. The +// service config is simply the YAML representation of the `google.api.Service` +// proto message. +// +// As an alternative to annotating your proto file, you can configure gRPC +// transcoding in your service config YAML files. You do this by specifying a +// `HttpRule` that maps the gRPC method to a REST endpoint, achieving the same +// effect as the proto annotation. This can be particularly useful if you +// have a proto that is reused in multiple services. Note that any transcoding +// specified in the service config will override any matching transcoding +// configuration in the proto. +// +// The following example selects a gRPC method and applies an `HttpRule` to it: +// +// http: +// rules: +// - selector: example.v1.Messaging.GetMessage +// get: /v1/messages/{message_id}/{sub.subfield} +// +// Special notes +// +// When gRPC Transcoding is used to map a gRPC to JSON REST endpoints, the +// proto to JSON conversion must follow the [proto3 +// specification](https://developers.google.com/protocol-buffers/docs/proto3#json). +// +// While the single segment variable follows the semantics of +// [RFC 6570](https://tools.ietf.org/html/rfc6570) Section 3.2.2 Simple String +// Expansion, the multi segment variable **does not** follow RFC 6570 Section +// 3.2.3 Reserved Expansion. The reason is that the Reserved Expansion +// does not expand special characters like `?` and `#`, which would lead +// to invalid URLs. As the result, gRPC Transcoding uses a custom encoding +// for multi segment variables. +// +// The path variables **must not** refer to any repeated or mapped field, +// because client libraries are not capable of handling such variable expansion. +// +// The path variables **must not** capture the leading "/" character. The reason +// is that the most common use case "{var}" does not capture the leading "/" +// character. For consistency, all path variables must share the same behavior. +// +// Repeated message fields must not be mapped to URL query parameters, because +// no client library can support such complicated mapping. +// +// If an API needs to use a JSON array for request or response body, it can map +// the request or response body to a repeated field. However, some gRPC +// Transcoding implementations may not support this feature. +message HttpRule { + // Selects a method to which this rule applies. + // + // Refer to [selector][google.api.DocumentationRule.selector] for syntax + // details. + string selector = 1; + + // Determines the URL pattern is matched by this rules. This pattern can be + // used with any of the {get|put|post|delete|patch} methods. A custom method + // can be defined using the 'custom' field. + oneof pattern { + // Maps to HTTP GET. Used for listing and getting information about + // resources. + string get = 2; + + // Maps to HTTP PUT. Used for replacing a resource. + string put = 3; + + // Maps to HTTP POST. Used for creating a resource or performing an action. + string post = 4; + + // Maps to HTTP DELETE. Used for deleting a resource. + string delete = 5; + + // Maps to HTTP PATCH. Used for updating a resource. + string patch = 6; + + // The custom pattern is used for specifying an HTTP method that is not + // included in the `pattern` field, such as HEAD, or "*" to leave the + // HTTP method unspecified for this rule. The wild-card rule is useful + // for services that provide content to Web (HTML) clients. + CustomHttpPattern custom = 8; + } + + // The name of the request field whose value is mapped to the HTTP request + // body, or `*` for mapping all request fields not captured by the path + // pattern to the HTTP body, or omitted for not having any HTTP request body. + // + // NOTE: the referred field must be present at the top-level of the request + // message type. + string body = 7; + + // Optional. The name of the response field whose value is mapped to the HTTP + // response body. When omitted, the entire response message will be used + // as the HTTP response body. + // + // NOTE: The referred field must be present at the top-level of the response + // message type. + string response_body = 12; + + // Additional HTTP bindings for the selector. Nested bindings must + // not contain an `additional_bindings` field themselves (that is, + // the nesting may only be one level deep). + repeated HttpRule additional_bindings = 11; +} + +// A custom pattern is used for defining custom HTTP verb. +message CustomHttpPattern { + // The name of this custom HTTP verb. + string kind = 1; + + // The path matched by this custom verb. + string path = 2; +} diff --git a/google/api/httpbody.proto b/google/api/httpbody.proto new file mode 100644 index 00000000..920612dc --- /dev/null +++ b/google/api/httpbody.proto @@ -0,0 +1,81 @@ +// Copyright 2024 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +syntax = "proto3"; + +package google.api; + +import "google/protobuf/any.proto"; + +option cc_enable_arenas = true; +option go_package = "google.golang.org/genproto/googleapis/api/httpbody;httpbody"; +option java_multiple_files = true; +option java_outer_classname = "HttpBodyProto"; +option java_package = "com.google.api"; +option objc_class_prefix = "GAPI"; + +// Message that represents an arbitrary HTTP body. It should only be used for +// payload formats that can't be represented as JSON, such as raw binary or +// an HTML page. +// +// +// This message can be used both in streaming and non-streaming API methods in +// the request as well as the response. +// +// It can be used as a top-level request field, which is convenient if one +// wants to extract parameters from either the URL or HTTP template into the +// request fields and also want access to the raw HTTP body. +// +// Example: +// +// message GetResourceRequest { +// // A unique request id. +// string request_id = 1; +// +// // The raw HTTP body is bound to this field. +// google.api.HttpBody http_body = 2; +// +// } +// +// service ResourceService { +// rpc GetResource(GetResourceRequest) +// returns (google.api.HttpBody); +// rpc UpdateResource(google.api.HttpBody) +// returns (google.protobuf.Empty); +// +// } +// +// Example with streaming methods: +// +// service CaldavService { +// rpc GetCalendar(stream google.api.HttpBody) +// returns (stream google.api.HttpBody); +// rpc UpdateCalendar(stream google.api.HttpBody) +// returns (stream google.api.HttpBody); +// +// } +// +// Use of this type only changes how the request and response bodies are +// handled, all other features will continue to work unchanged. +message HttpBody { + // The HTTP Content-Type header value specifying the content type of the body. + string content_type = 1; + + // The HTTP request/response body as raw binary. + bytes data = 2; + + // Application specific response metadata. Must be set in the first response + // for streaming APIs. + repeated google.protobuf.Any extensions = 3; +} diff --git a/rest_client_zrok/account/account_client.go b/rest_client_zrok/account/account_client.go index be4e1400..2f602875 100644 --- a/rest_client_zrok/account/account_client.go +++ b/rest_client_zrok/account/account_client.go @@ -36,7 +36,7 @@ type ClientService interface { Login(params *LoginParams, opts ...ClientOption) (*LoginOK, error) - RegenerateToken(params *RegenerateTokenParams, authInfo runtime.ClientAuthInfoWriter, opts ...ClientOption) (*RegenerateTokenOK, error) + RegenerateAccountToken(params *RegenerateAccountTokenParams, authInfo runtime.ClientAuthInfoWriter, opts ...ClientOption) (*RegenerateAccountTokenOK, error) Register(params *RegisterParams, opts ...ClientOption) (*RegisterOK, error) @@ -165,22 +165,22 @@ func (a *Client) Login(params *LoginParams, opts ...ClientOption) (*LoginOK, err } /* -RegenerateToken regenerate token API +RegenerateAccountToken regenerate account token API */ -func (a *Client) RegenerateToken(params *RegenerateTokenParams, authInfo runtime.ClientAuthInfoWriter, opts ...ClientOption) (*RegenerateTokenOK, error) { +func (a *Client) RegenerateAccountToken(params *RegenerateAccountTokenParams, authInfo runtime.ClientAuthInfoWriter, opts ...ClientOption) (*RegenerateAccountTokenOK, error) { // TODO: Validate the params before sending if params == nil { - params = NewRegenerateTokenParams() + params = NewRegenerateAccountTokenParams() } op := &runtime.ClientOperation{ - ID: "regenerateToken", + ID: "regenerateAccountToken", Method: "POST", - PathPattern: "/regenerateToken", + PathPattern: "/regenerateAccountToken", ProducesMediaTypes: []string{"application/zrok.v1+json"}, ConsumesMediaTypes: []string{"application/zrok.v1+json"}, Schemes: []string{"http"}, Params: params, - Reader: &RegenerateTokenReader{formats: a.formats}, + Reader: &RegenerateAccountTokenReader{formats: a.formats}, AuthInfo: authInfo, Context: params.Context, Client: params.HTTPClient, @@ -193,13 +193,13 @@ func (a *Client) RegenerateToken(params *RegenerateTokenParams, authInfo runtime if err != nil { return nil, err } - success, ok := result.(*RegenerateTokenOK) + success, ok := result.(*RegenerateAccountTokenOK) if ok { return success, nil } // unexpected success response // safeguard: normally, absent a default response, unknown success responses return an error above: so this is a codegen issue - msg := fmt.Sprintf("unexpected success response for regenerateToken: API contract not enforced by server. Client expected to get an error, but got: %T", result) + msg := fmt.Sprintf("unexpected success response for regenerateAccountToken: API contract not enforced by server. Client expected to get an error, but got: %T", result) panic(msg) } diff --git a/rest_client_zrok/account/change_password_parameters.go b/rest_client_zrok/account/change_password_parameters.go index 8ab0d86c..565e059b 100644 --- a/rest_client_zrok/account/change_password_parameters.go +++ b/rest_client_zrok/account/change_password_parameters.go @@ -14,8 +14,6 @@ import ( "github.com/go-openapi/runtime" cr "github.com/go-openapi/runtime/client" "github.com/go-openapi/strfmt" - - "github.com/openziti/zrok/rest_model_zrok" ) // NewChangePasswordParams creates a new ChangePasswordParams object, @@ -64,7 +62,7 @@ ChangePasswordParams contains all the parameters to send to the API endpoint type ChangePasswordParams struct { // Body. - Body *rest_model_zrok.ChangePasswordRequest + Body ChangePasswordBody timeout time.Duration Context context.Context @@ -120,13 +118,13 @@ func (o *ChangePasswordParams) SetHTTPClient(client *http.Client) { } // WithBody adds the body to the change password params -func (o *ChangePasswordParams) WithBody(body *rest_model_zrok.ChangePasswordRequest) *ChangePasswordParams { +func (o *ChangePasswordParams) WithBody(body ChangePasswordBody) *ChangePasswordParams { o.SetBody(body) return o } // SetBody adds the body to the change password params -func (o *ChangePasswordParams) SetBody(body *rest_model_zrok.ChangePasswordRequest) { +func (o *ChangePasswordParams) SetBody(body ChangePasswordBody) { o.Body = body } @@ -137,10 +135,8 @@ func (o *ChangePasswordParams) WriteToRequest(r runtime.ClientRequest, reg strfm return err } var res []error - if o.Body != nil { - if err := r.SetBodyParam(o.Body); err != nil { - return err - } + if err := r.SetBodyParam(o.Body); err != nil { + return err } if len(res) > 0 { diff --git a/rest_client_zrok/account/change_password_responses.go b/rest_client_zrok/account/change_password_responses.go index 195afe8b..4d3f9fc7 100644 --- a/rest_client_zrok/account/change_password_responses.go +++ b/rest_client_zrok/account/change_password_responses.go @@ -6,11 +6,13 @@ package account // Editing this file might prove futile when you re-run the swagger generate command import ( + "context" "fmt" "io" "github.com/go-openapi/runtime" "github.com/go-openapi/strfmt" + "github.com/go-openapi/swag" "github.com/openziti/zrok/rest_model_zrok" ) @@ -66,7 +68,7 @@ func NewChangePasswordOK() *ChangePasswordOK { /* ChangePasswordOK describes a response with status code 200, with default header values. -changed password +password changed */ type ChangePasswordOK struct { } @@ -347,3 +349,47 @@ func (o *ChangePasswordInternalServerError) readResponse(response runtime.Client return nil } + +/* +ChangePasswordBody change password body +swagger:model ChangePasswordBody +*/ +type ChangePasswordBody struct { + + // email + Email string `json:"email,omitempty"` + + // new password + NewPassword string `json:"newPassword,omitempty"` + + // old password + OldPassword string `json:"oldPassword,omitempty"` +} + +// Validate validates this change password body +func (o *ChangePasswordBody) Validate(formats strfmt.Registry) error { + return nil +} + +// ContextValidate validates this change password body based on context it is used +func (o *ChangePasswordBody) ContextValidate(ctx context.Context, formats strfmt.Registry) error { + return nil +} + +// MarshalBinary interface implementation +func (o *ChangePasswordBody) MarshalBinary() ([]byte, error) { + if o == nil { + return nil, nil + } + return swag.WriteJSON(o) +} + +// UnmarshalBinary interface implementation +func (o *ChangePasswordBody) UnmarshalBinary(b []byte) error { + var res ChangePasswordBody + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *o = res + return nil +} diff --git a/rest_client_zrok/account/invite_parameters.go b/rest_client_zrok/account/invite_parameters.go index 5b7baaa1..cbadcd7f 100644 --- a/rest_client_zrok/account/invite_parameters.go +++ b/rest_client_zrok/account/invite_parameters.go @@ -14,8 +14,6 @@ import ( "github.com/go-openapi/runtime" cr "github.com/go-openapi/runtime/client" "github.com/go-openapi/strfmt" - - "github.com/openziti/zrok/rest_model_zrok" ) // NewInviteParams creates a new InviteParams object, @@ -64,7 +62,7 @@ InviteParams contains all the parameters to send to the API endpoint type InviteParams struct { // Body. - Body *rest_model_zrok.InviteRequest + Body InviteBody timeout time.Duration Context context.Context @@ -120,13 +118,13 @@ func (o *InviteParams) SetHTTPClient(client *http.Client) { } // WithBody adds the body to the invite params -func (o *InviteParams) WithBody(body *rest_model_zrok.InviteRequest) *InviteParams { +func (o *InviteParams) WithBody(body InviteBody) *InviteParams { o.SetBody(body) return o } // SetBody adds the body to the invite params -func (o *InviteParams) SetBody(body *rest_model_zrok.InviteRequest) { +func (o *InviteParams) SetBody(body InviteBody) { o.Body = body } @@ -137,10 +135,8 @@ func (o *InviteParams) WriteToRequest(r runtime.ClientRequest, reg strfmt.Regist return err } var res []error - if o.Body != nil { - if err := r.SetBodyParam(o.Body); err != nil { - return err - } + if err := r.SetBodyParam(o.Body); err != nil { + return err } if len(res) > 0 { diff --git a/rest_client_zrok/account/invite_responses.go b/rest_client_zrok/account/invite_responses.go index a07d98a3..c009cc6d 100644 --- a/rest_client_zrok/account/invite_responses.go +++ b/rest_client_zrok/account/invite_responses.go @@ -6,11 +6,13 @@ package account // Editing this file might prove futile when you re-run the swagger generate command import ( + "context" "fmt" "io" "github.com/go-openapi/runtime" "github.com/go-openapi/strfmt" + "github.com/go-openapi/swag" "github.com/openziti/zrok/rest_model_zrok" ) @@ -285,3 +287,44 @@ func (o *InviteInternalServerError) readResponse(response runtime.ClientResponse return nil } + +/* +InviteBody invite body +swagger:model InviteBody +*/ +type InviteBody struct { + + // email + Email string `json:"email,omitempty"` + + // invite token + InviteToken string `json:"inviteToken,omitempty"` +} + +// Validate validates this invite body +func (o *InviteBody) Validate(formats strfmt.Registry) error { + return nil +} + +// ContextValidate validates this invite body based on context it is used +func (o *InviteBody) ContextValidate(ctx context.Context, formats strfmt.Registry) error { + return nil +} + +// MarshalBinary interface implementation +func (o *InviteBody) MarshalBinary() ([]byte, error) { + if o == nil { + return nil, nil + } + return swag.WriteJSON(o) +} + +// UnmarshalBinary interface implementation +func (o *InviteBody) UnmarshalBinary(b []byte) error { + var res InviteBody + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *o = res + return nil +} diff --git a/rest_client_zrok/account/login_parameters.go b/rest_client_zrok/account/login_parameters.go index 1b25e6e5..322b30e9 100644 --- a/rest_client_zrok/account/login_parameters.go +++ b/rest_client_zrok/account/login_parameters.go @@ -14,8 +14,6 @@ import ( "github.com/go-openapi/runtime" cr "github.com/go-openapi/runtime/client" "github.com/go-openapi/strfmt" - - "github.com/openziti/zrok/rest_model_zrok" ) // NewLoginParams creates a new LoginParams object, @@ -64,7 +62,7 @@ LoginParams contains all the parameters to send to the API endpoint type LoginParams struct { // Body. - Body *rest_model_zrok.LoginRequest + Body LoginBody timeout time.Duration Context context.Context @@ -120,13 +118,13 @@ func (o *LoginParams) SetHTTPClient(client *http.Client) { } // WithBody adds the body to the login params -func (o *LoginParams) WithBody(body *rest_model_zrok.LoginRequest) *LoginParams { +func (o *LoginParams) WithBody(body LoginBody) *LoginParams { o.SetBody(body) return o } // SetBody adds the body to the login params -func (o *LoginParams) SetBody(body *rest_model_zrok.LoginRequest) { +func (o *LoginParams) SetBody(body LoginBody) { o.Body = body } @@ -137,10 +135,8 @@ func (o *LoginParams) WriteToRequest(r runtime.ClientRequest, reg strfmt.Registr return err } var res []error - if o.Body != nil { - if err := r.SetBodyParam(o.Body); err != nil { - return err - } + if err := r.SetBodyParam(o.Body); err != nil { + return err } if len(res) > 0 { diff --git a/rest_client_zrok/account/login_responses.go b/rest_client_zrok/account/login_responses.go index 534f6a4f..7a348ebc 100644 --- a/rest_client_zrok/account/login_responses.go +++ b/rest_client_zrok/account/login_responses.go @@ -6,13 +6,13 @@ package account // Editing this file might prove futile when you re-run the swagger generate command import ( + "context" "fmt" "io" "github.com/go-openapi/runtime" "github.com/go-openapi/strfmt" - - "github.com/openziti/zrok/rest_model_zrok" + "github.com/go-openapi/swag" ) // LoginReader is a Reader for the Login structure. @@ -51,7 +51,7 @@ LoginOK describes a response with status code 200, with default header values. login successful */ type LoginOK struct { - Payload rest_model_zrok.LoginResponse + Payload string } // IsSuccess returns true when this login o k response has a 2xx status code @@ -92,7 +92,7 @@ func (o *LoginOK) String() string { return fmt.Sprintf("[POST /login][%d] loginOK %+v", 200, o.Payload) } -func (o *LoginOK) GetPayload() rest_model_zrok.LoginResponse { +func (o *LoginOK) GetPayload() string { return o.Payload } @@ -161,3 +161,44 @@ func (o *LoginUnauthorized) readResponse(response runtime.ClientResponse, consum return nil } + +/* +LoginBody login body +swagger:model LoginBody +*/ +type LoginBody struct { + + // email + Email string `json:"email,omitempty"` + + // password + Password string `json:"password,omitempty"` +} + +// Validate validates this login body +func (o *LoginBody) Validate(formats strfmt.Registry) error { + return nil +} + +// ContextValidate validates this login body based on context it is used +func (o *LoginBody) ContextValidate(ctx context.Context, formats strfmt.Registry) error { + return nil +} + +// MarshalBinary interface implementation +func (o *LoginBody) MarshalBinary() ([]byte, error) { + if o == nil { + return nil, nil + } + return swag.WriteJSON(o) +} + +// UnmarshalBinary interface implementation +func (o *LoginBody) UnmarshalBinary(b []byte) error { + var res LoginBody + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *o = res + return nil +} diff --git a/rest_client_zrok/account/regenerate_account_token_parameters.go b/rest_client_zrok/account/regenerate_account_token_parameters.go new file mode 100644 index 00000000..5431c9e2 --- /dev/null +++ b/rest_client_zrok/account/regenerate_account_token_parameters.go @@ -0,0 +1,146 @@ +// Code generated by go-swagger; DO NOT EDIT. + +package account + +// This file was generated by the swagger tool. +// Editing this file might prove futile when you re-run the swagger generate command + +import ( + "context" + "net/http" + "time" + + "github.com/go-openapi/errors" + "github.com/go-openapi/runtime" + cr "github.com/go-openapi/runtime/client" + "github.com/go-openapi/strfmt" +) + +// NewRegenerateAccountTokenParams creates a new RegenerateAccountTokenParams object, +// with the default timeout for this client. +// +// Default values are not hydrated, since defaults are normally applied by the API server side. +// +// To enforce default values in parameter, use SetDefaults or WithDefaults. +func NewRegenerateAccountTokenParams() *RegenerateAccountTokenParams { + return &RegenerateAccountTokenParams{ + timeout: cr.DefaultTimeout, + } +} + +// NewRegenerateAccountTokenParamsWithTimeout creates a new RegenerateAccountTokenParams object +// with the ability to set a timeout on a request. +func NewRegenerateAccountTokenParamsWithTimeout(timeout time.Duration) *RegenerateAccountTokenParams { + return &RegenerateAccountTokenParams{ + timeout: timeout, + } +} + +// NewRegenerateAccountTokenParamsWithContext creates a new RegenerateAccountTokenParams object +// with the ability to set a context for a request. +func NewRegenerateAccountTokenParamsWithContext(ctx context.Context) *RegenerateAccountTokenParams { + return &RegenerateAccountTokenParams{ + Context: ctx, + } +} + +// NewRegenerateAccountTokenParamsWithHTTPClient creates a new RegenerateAccountTokenParams object +// with the ability to set a custom HTTPClient for a request. +func NewRegenerateAccountTokenParamsWithHTTPClient(client *http.Client) *RegenerateAccountTokenParams { + return &RegenerateAccountTokenParams{ + HTTPClient: client, + } +} + +/* +RegenerateAccountTokenParams contains all the parameters to send to the API endpoint + + for the regenerate account token operation. + + Typically these are written to a http.Request. +*/ +type RegenerateAccountTokenParams struct { + + // Body. + Body RegenerateAccountTokenBody + + timeout time.Duration + Context context.Context + HTTPClient *http.Client +} + +// WithDefaults hydrates default values in the regenerate account token params (not the query body). +// +// All values with no default are reset to their zero value. +func (o *RegenerateAccountTokenParams) WithDefaults() *RegenerateAccountTokenParams { + o.SetDefaults() + return o +} + +// SetDefaults hydrates default values in the regenerate account token params (not the query body). +// +// All values with no default are reset to their zero value. +func (o *RegenerateAccountTokenParams) SetDefaults() { + // no default values defined for this parameter +} + +// WithTimeout adds the timeout to the regenerate account token params +func (o *RegenerateAccountTokenParams) WithTimeout(timeout time.Duration) *RegenerateAccountTokenParams { + o.SetTimeout(timeout) + return o +} + +// SetTimeout adds the timeout to the regenerate account token params +func (o *RegenerateAccountTokenParams) SetTimeout(timeout time.Duration) { + o.timeout = timeout +} + +// WithContext adds the context to the regenerate account token params +func (o *RegenerateAccountTokenParams) WithContext(ctx context.Context) *RegenerateAccountTokenParams { + o.SetContext(ctx) + return o +} + +// SetContext adds the context to the regenerate account token params +func (o *RegenerateAccountTokenParams) SetContext(ctx context.Context) { + o.Context = ctx +} + +// WithHTTPClient adds the HTTPClient to the regenerate account token params +func (o *RegenerateAccountTokenParams) WithHTTPClient(client *http.Client) *RegenerateAccountTokenParams { + o.SetHTTPClient(client) + return o +} + +// SetHTTPClient adds the HTTPClient to the regenerate account token params +func (o *RegenerateAccountTokenParams) SetHTTPClient(client *http.Client) { + o.HTTPClient = client +} + +// WithBody adds the body to the regenerate account token params +func (o *RegenerateAccountTokenParams) WithBody(body RegenerateAccountTokenBody) *RegenerateAccountTokenParams { + o.SetBody(body) + return o +} + +// SetBody adds the body to the regenerate account token params +func (o *RegenerateAccountTokenParams) SetBody(body RegenerateAccountTokenBody) { + o.Body = body +} + +// WriteToRequest writes these params to a swagger request +func (o *RegenerateAccountTokenParams) WriteToRequest(r runtime.ClientRequest, reg strfmt.Registry) error { + + if err := r.SetTimeout(o.timeout); err != nil { + return err + } + var res []error + if err := r.SetBodyParam(o.Body); err != nil { + return err + } + + if len(res) > 0 { + return errors.CompositeValidationError(res...) + } + return nil +} diff --git a/rest_client_zrok/account/regenerate_account_token_responses.go b/rest_client_zrok/account/regenerate_account_token_responses.go new file mode 100644 index 00000000..a2d57bec --- /dev/null +++ b/rest_client_zrok/account/regenerate_account_token_responses.go @@ -0,0 +1,303 @@ +// Code generated by go-swagger; DO NOT EDIT. + +package account + +// This file was generated by the swagger tool. +// Editing this file might prove futile when you re-run the swagger generate command + +import ( + "context" + "fmt" + "io" + + "github.com/go-openapi/runtime" + "github.com/go-openapi/strfmt" + "github.com/go-openapi/swag" +) + +// RegenerateAccountTokenReader is a Reader for the RegenerateAccountToken structure. +type RegenerateAccountTokenReader struct { + formats strfmt.Registry +} + +// ReadResponse reads a server response into the received o. +func (o *RegenerateAccountTokenReader) ReadResponse(response runtime.ClientResponse, consumer runtime.Consumer) (interface{}, error) { + switch response.Code() { + case 200: + result := NewRegenerateAccountTokenOK() + if err := result.readResponse(response, consumer, o.formats); err != nil { + return nil, err + } + return result, nil + case 404: + result := NewRegenerateAccountTokenNotFound() + if err := result.readResponse(response, consumer, o.formats); err != nil { + return nil, err + } + return nil, result + case 500: + result := NewRegenerateAccountTokenInternalServerError() + if err := result.readResponse(response, consumer, o.formats); err != nil { + return nil, err + } + return nil, result + default: + return nil, runtime.NewAPIError("[POST /regenerateAccountToken] regenerateAccountToken", response, response.Code()) + } +} + +// NewRegenerateAccountTokenOK creates a RegenerateAccountTokenOK with default headers values +func NewRegenerateAccountTokenOK() *RegenerateAccountTokenOK { + return &RegenerateAccountTokenOK{} +} + +/* +RegenerateAccountTokenOK describes a response with status code 200, with default header values. + +regenerate account token +*/ +type RegenerateAccountTokenOK struct { + Payload *RegenerateAccountTokenOKBody +} + +// IsSuccess returns true when this regenerate account token o k response has a 2xx status code +func (o *RegenerateAccountTokenOK) IsSuccess() bool { + return true +} + +// IsRedirect returns true when this regenerate account token o k response has a 3xx status code +func (o *RegenerateAccountTokenOK) IsRedirect() bool { + return false +} + +// IsClientError returns true when this regenerate account token o k response has a 4xx status code +func (o *RegenerateAccountTokenOK) IsClientError() bool { + return false +} + +// IsServerError returns true when this regenerate account token o k response has a 5xx status code +func (o *RegenerateAccountTokenOK) IsServerError() bool { + return false +} + +// IsCode returns true when this regenerate account token o k response a status code equal to that given +func (o *RegenerateAccountTokenOK) IsCode(code int) bool { + return code == 200 +} + +// Code gets the status code for the regenerate account token o k response +func (o *RegenerateAccountTokenOK) Code() int { + return 200 +} + +func (o *RegenerateAccountTokenOK) Error() string { + return fmt.Sprintf("[POST /regenerateAccountToken][%d] regenerateAccountTokenOK %+v", 200, o.Payload) +} + +func (o *RegenerateAccountTokenOK) String() string { + return fmt.Sprintf("[POST /regenerateAccountToken][%d] regenerateAccountTokenOK %+v", 200, o.Payload) +} + +func (o *RegenerateAccountTokenOK) GetPayload() *RegenerateAccountTokenOKBody { + return o.Payload +} + +func (o *RegenerateAccountTokenOK) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { + + o.Payload = new(RegenerateAccountTokenOKBody) + + // response payload + if err := consumer.Consume(response.Body(), o.Payload); err != nil && err != io.EOF { + return err + } + + return nil +} + +// NewRegenerateAccountTokenNotFound creates a RegenerateAccountTokenNotFound with default headers values +func NewRegenerateAccountTokenNotFound() *RegenerateAccountTokenNotFound { + return &RegenerateAccountTokenNotFound{} +} + +/* +RegenerateAccountTokenNotFound describes a response with status code 404, with default header values. + +account not found +*/ +type RegenerateAccountTokenNotFound struct { +} + +// IsSuccess returns true when this regenerate account token not found response has a 2xx status code +func (o *RegenerateAccountTokenNotFound) IsSuccess() bool { + return false +} + +// IsRedirect returns true when this regenerate account token not found response has a 3xx status code +func (o *RegenerateAccountTokenNotFound) IsRedirect() bool { + return false +} + +// IsClientError returns true when this regenerate account token not found response has a 4xx status code +func (o *RegenerateAccountTokenNotFound) IsClientError() bool { + return true +} + +// IsServerError returns true when this regenerate account token not found response has a 5xx status code +func (o *RegenerateAccountTokenNotFound) IsServerError() bool { + return false +} + +// IsCode returns true when this regenerate account token not found response a status code equal to that given +func (o *RegenerateAccountTokenNotFound) IsCode(code int) bool { + return code == 404 +} + +// Code gets the status code for the regenerate account token not found response +func (o *RegenerateAccountTokenNotFound) Code() int { + return 404 +} + +func (o *RegenerateAccountTokenNotFound) Error() string { + return fmt.Sprintf("[POST /regenerateAccountToken][%d] regenerateAccountTokenNotFound ", 404) +} + +func (o *RegenerateAccountTokenNotFound) String() string { + return fmt.Sprintf("[POST /regenerateAccountToken][%d] regenerateAccountTokenNotFound ", 404) +} + +func (o *RegenerateAccountTokenNotFound) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { + + return nil +} + +// NewRegenerateAccountTokenInternalServerError creates a RegenerateAccountTokenInternalServerError with default headers values +func NewRegenerateAccountTokenInternalServerError() *RegenerateAccountTokenInternalServerError { + return &RegenerateAccountTokenInternalServerError{} +} + +/* +RegenerateAccountTokenInternalServerError describes a response with status code 500, with default header values. + +internal server error +*/ +type RegenerateAccountTokenInternalServerError struct { +} + +// IsSuccess returns true when this regenerate account token internal server error response has a 2xx status code +func (o *RegenerateAccountTokenInternalServerError) IsSuccess() bool { + return false +} + +// IsRedirect returns true when this regenerate account token internal server error response has a 3xx status code +func (o *RegenerateAccountTokenInternalServerError) IsRedirect() bool { + return false +} + +// IsClientError returns true when this regenerate account token internal server error response has a 4xx status code +func (o *RegenerateAccountTokenInternalServerError) IsClientError() bool { + return false +} + +// IsServerError returns true when this regenerate account token internal server error response has a 5xx status code +func (o *RegenerateAccountTokenInternalServerError) IsServerError() bool { + return true +} + +// IsCode returns true when this regenerate account token internal server error response a status code equal to that given +func (o *RegenerateAccountTokenInternalServerError) IsCode(code int) bool { + return code == 500 +} + +// Code gets the status code for the regenerate account token internal server error response +func (o *RegenerateAccountTokenInternalServerError) Code() int { + return 500 +} + +func (o *RegenerateAccountTokenInternalServerError) Error() string { + return fmt.Sprintf("[POST /regenerateAccountToken][%d] regenerateAccountTokenInternalServerError ", 500) +} + +func (o *RegenerateAccountTokenInternalServerError) String() string { + return fmt.Sprintf("[POST /regenerateAccountToken][%d] regenerateAccountTokenInternalServerError ", 500) +} + +func (o *RegenerateAccountTokenInternalServerError) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { + + return nil +} + +/* +RegenerateAccountTokenBody regenerate account token body +swagger:model RegenerateAccountTokenBody +*/ +type RegenerateAccountTokenBody struct { + + // email address + EmailAddress string `json:"emailAddress,omitempty"` +} + +// Validate validates this regenerate account token body +func (o *RegenerateAccountTokenBody) Validate(formats strfmt.Registry) error { + return nil +} + +// ContextValidate validates this regenerate account token body based on context it is used +func (o *RegenerateAccountTokenBody) ContextValidate(ctx context.Context, formats strfmt.Registry) error { + return nil +} + +// MarshalBinary interface implementation +func (o *RegenerateAccountTokenBody) MarshalBinary() ([]byte, error) { + if o == nil { + return nil, nil + } + return swag.WriteJSON(o) +} + +// UnmarshalBinary interface implementation +func (o *RegenerateAccountTokenBody) UnmarshalBinary(b []byte) error { + var res RegenerateAccountTokenBody + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *o = res + return nil +} + +/* +RegenerateAccountTokenOKBody regenerate account token o k body +swagger:model RegenerateAccountTokenOKBody +*/ +type RegenerateAccountTokenOKBody struct { + + // account token + AccountToken string `json:"accountToken,omitempty"` +} + +// Validate validates this regenerate account token o k body +func (o *RegenerateAccountTokenOKBody) Validate(formats strfmt.Registry) error { + return nil +} + +// ContextValidate validates this regenerate account token o k body based on context it is used +func (o *RegenerateAccountTokenOKBody) ContextValidate(ctx context.Context, formats strfmt.Registry) error { + return nil +} + +// MarshalBinary interface implementation +func (o *RegenerateAccountTokenOKBody) MarshalBinary() ([]byte, error) { + if o == nil { + return nil, nil + } + return swag.WriteJSON(o) +} + +// UnmarshalBinary interface implementation +func (o *RegenerateAccountTokenOKBody) UnmarshalBinary(b []byte) error { + var res RegenerateAccountTokenOKBody + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *o = res + return nil +} diff --git a/rest_client_zrok/account/regenerate_token_parameters.go b/rest_client_zrok/account/regenerate_token_parameters.go deleted file mode 100644 index ab85f082..00000000 --- a/rest_client_zrok/account/regenerate_token_parameters.go +++ /dev/null @@ -1,146 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -package account - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - "net/http" - "time" - - "github.com/go-openapi/errors" - "github.com/go-openapi/runtime" - cr "github.com/go-openapi/runtime/client" - "github.com/go-openapi/strfmt" -) - -// NewRegenerateTokenParams creates a new RegenerateTokenParams object, -// with the default timeout for this client. -// -// Default values are not hydrated, since defaults are normally applied by the API server side. -// -// To enforce default values in parameter, use SetDefaults or WithDefaults. -func NewRegenerateTokenParams() *RegenerateTokenParams { - return &RegenerateTokenParams{ - timeout: cr.DefaultTimeout, - } -} - -// NewRegenerateTokenParamsWithTimeout creates a new RegenerateTokenParams object -// with the ability to set a timeout on a request. -func NewRegenerateTokenParamsWithTimeout(timeout time.Duration) *RegenerateTokenParams { - return &RegenerateTokenParams{ - timeout: timeout, - } -} - -// NewRegenerateTokenParamsWithContext creates a new RegenerateTokenParams object -// with the ability to set a context for a request. -func NewRegenerateTokenParamsWithContext(ctx context.Context) *RegenerateTokenParams { - return &RegenerateTokenParams{ - Context: ctx, - } -} - -// NewRegenerateTokenParamsWithHTTPClient creates a new RegenerateTokenParams object -// with the ability to set a custom HTTPClient for a request. -func NewRegenerateTokenParamsWithHTTPClient(client *http.Client) *RegenerateTokenParams { - return &RegenerateTokenParams{ - HTTPClient: client, - } -} - -/* -RegenerateTokenParams contains all the parameters to send to the API endpoint - - for the regenerate token operation. - - Typically these are written to a http.Request. -*/ -type RegenerateTokenParams struct { - - // Body. - Body RegenerateTokenBody - - timeout time.Duration - Context context.Context - HTTPClient *http.Client -} - -// WithDefaults hydrates default values in the regenerate token params (not the query body). -// -// All values with no default are reset to their zero value. -func (o *RegenerateTokenParams) WithDefaults() *RegenerateTokenParams { - o.SetDefaults() - return o -} - -// SetDefaults hydrates default values in the regenerate token params (not the query body). -// -// All values with no default are reset to their zero value. -func (o *RegenerateTokenParams) SetDefaults() { - // no default values defined for this parameter -} - -// WithTimeout adds the timeout to the regenerate token params -func (o *RegenerateTokenParams) WithTimeout(timeout time.Duration) *RegenerateTokenParams { - o.SetTimeout(timeout) - return o -} - -// SetTimeout adds the timeout to the regenerate token params -func (o *RegenerateTokenParams) SetTimeout(timeout time.Duration) { - o.timeout = timeout -} - -// WithContext adds the context to the regenerate token params -func (o *RegenerateTokenParams) WithContext(ctx context.Context) *RegenerateTokenParams { - o.SetContext(ctx) - return o -} - -// SetContext adds the context to the regenerate token params -func (o *RegenerateTokenParams) SetContext(ctx context.Context) { - o.Context = ctx -} - -// WithHTTPClient adds the HTTPClient to the regenerate token params -func (o *RegenerateTokenParams) WithHTTPClient(client *http.Client) *RegenerateTokenParams { - o.SetHTTPClient(client) - return o -} - -// SetHTTPClient adds the HTTPClient to the regenerate token params -func (o *RegenerateTokenParams) SetHTTPClient(client *http.Client) { - o.HTTPClient = client -} - -// WithBody adds the body to the regenerate token params -func (o *RegenerateTokenParams) WithBody(body RegenerateTokenBody) *RegenerateTokenParams { - o.SetBody(body) - return o -} - -// SetBody adds the body to the regenerate token params -func (o *RegenerateTokenParams) SetBody(body RegenerateTokenBody) { - o.Body = body -} - -// WriteToRequest writes these params to a swagger request -func (o *RegenerateTokenParams) WriteToRequest(r runtime.ClientRequest, reg strfmt.Registry) error { - - if err := r.SetTimeout(o.timeout); err != nil { - return err - } - var res []error - if err := r.SetBodyParam(o.Body); err != nil { - return err - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} diff --git a/rest_client_zrok/account/regenerate_token_responses.go b/rest_client_zrok/account/regenerate_token_responses.go deleted file mode 100644 index 645483d8..00000000 --- a/rest_client_zrok/account/regenerate_token_responses.go +++ /dev/null @@ -1,303 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -package account - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - "fmt" - "io" - - "github.com/go-openapi/runtime" - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// RegenerateTokenReader is a Reader for the RegenerateToken structure. -type RegenerateTokenReader struct { - formats strfmt.Registry -} - -// ReadResponse reads a server response into the received o. -func (o *RegenerateTokenReader) ReadResponse(response runtime.ClientResponse, consumer runtime.Consumer) (interface{}, error) { - switch response.Code() { - case 200: - result := NewRegenerateTokenOK() - if err := result.readResponse(response, consumer, o.formats); err != nil { - return nil, err - } - return result, nil - case 404: - result := NewRegenerateTokenNotFound() - if err := result.readResponse(response, consumer, o.formats); err != nil { - return nil, err - } - return nil, result - case 500: - result := NewRegenerateTokenInternalServerError() - if err := result.readResponse(response, consumer, o.formats); err != nil { - return nil, err - } - return nil, result - default: - return nil, runtime.NewAPIError("[POST /regenerateToken] regenerateToken", response, response.Code()) - } -} - -// NewRegenerateTokenOK creates a RegenerateTokenOK with default headers values -func NewRegenerateTokenOK() *RegenerateTokenOK { - return &RegenerateTokenOK{} -} - -/* -RegenerateTokenOK describes a response with status code 200, with default header values. - -regenerate account token -*/ -type RegenerateTokenOK struct { - Payload *RegenerateTokenOKBody -} - -// IsSuccess returns true when this regenerate token o k response has a 2xx status code -func (o *RegenerateTokenOK) IsSuccess() bool { - return true -} - -// IsRedirect returns true when this regenerate token o k response has a 3xx status code -func (o *RegenerateTokenOK) IsRedirect() bool { - return false -} - -// IsClientError returns true when this regenerate token o k response has a 4xx status code -func (o *RegenerateTokenOK) IsClientError() bool { - return false -} - -// IsServerError returns true when this regenerate token o k response has a 5xx status code -func (o *RegenerateTokenOK) IsServerError() bool { - return false -} - -// IsCode returns true when this regenerate token o k response a status code equal to that given -func (o *RegenerateTokenOK) IsCode(code int) bool { - return code == 200 -} - -// Code gets the status code for the regenerate token o k response -func (o *RegenerateTokenOK) Code() int { - return 200 -} - -func (o *RegenerateTokenOK) Error() string { - return fmt.Sprintf("[POST /regenerateToken][%d] regenerateTokenOK %+v", 200, o.Payload) -} - -func (o *RegenerateTokenOK) String() string { - return fmt.Sprintf("[POST /regenerateToken][%d] regenerateTokenOK %+v", 200, o.Payload) -} - -func (o *RegenerateTokenOK) GetPayload() *RegenerateTokenOKBody { - return o.Payload -} - -func (o *RegenerateTokenOK) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { - - o.Payload = new(RegenerateTokenOKBody) - - // response payload - if err := consumer.Consume(response.Body(), o.Payload); err != nil && err != io.EOF { - return err - } - - return nil -} - -// NewRegenerateTokenNotFound creates a RegenerateTokenNotFound with default headers values -func NewRegenerateTokenNotFound() *RegenerateTokenNotFound { - return &RegenerateTokenNotFound{} -} - -/* -RegenerateTokenNotFound describes a response with status code 404, with default header values. - -account not found -*/ -type RegenerateTokenNotFound struct { -} - -// IsSuccess returns true when this regenerate token not found response has a 2xx status code -func (o *RegenerateTokenNotFound) IsSuccess() bool { - return false -} - -// IsRedirect returns true when this regenerate token not found response has a 3xx status code -func (o *RegenerateTokenNotFound) IsRedirect() bool { - return false -} - -// IsClientError returns true when this regenerate token not found response has a 4xx status code -func (o *RegenerateTokenNotFound) IsClientError() bool { - return true -} - -// IsServerError returns true when this regenerate token not found response has a 5xx status code -func (o *RegenerateTokenNotFound) IsServerError() bool { - return false -} - -// IsCode returns true when this regenerate token not found response a status code equal to that given -func (o *RegenerateTokenNotFound) IsCode(code int) bool { - return code == 404 -} - -// Code gets the status code for the regenerate token not found response -func (o *RegenerateTokenNotFound) Code() int { - return 404 -} - -func (o *RegenerateTokenNotFound) Error() string { - return fmt.Sprintf("[POST /regenerateToken][%d] regenerateTokenNotFound ", 404) -} - -func (o *RegenerateTokenNotFound) String() string { - return fmt.Sprintf("[POST /regenerateToken][%d] regenerateTokenNotFound ", 404) -} - -func (o *RegenerateTokenNotFound) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { - - return nil -} - -// NewRegenerateTokenInternalServerError creates a RegenerateTokenInternalServerError with default headers values -func NewRegenerateTokenInternalServerError() *RegenerateTokenInternalServerError { - return &RegenerateTokenInternalServerError{} -} - -/* -RegenerateTokenInternalServerError describes a response with status code 500, with default header values. - -internal server error -*/ -type RegenerateTokenInternalServerError struct { -} - -// IsSuccess returns true when this regenerate token internal server error response has a 2xx status code -func (o *RegenerateTokenInternalServerError) IsSuccess() bool { - return false -} - -// IsRedirect returns true when this regenerate token internal server error response has a 3xx status code -func (o *RegenerateTokenInternalServerError) IsRedirect() bool { - return false -} - -// IsClientError returns true when this regenerate token internal server error response has a 4xx status code -func (o *RegenerateTokenInternalServerError) IsClientError() bool { - return false -} - -// IsServerError returns true when this regenerate token internal server error response has a 5xx status code -func (o *RegenerateTokenInternalServerError) IsServerError() bool { - return true -} - -// IsCode returns true when this regenerate token internal server error response a status code equal to that given -func (o *RegenerateTokenInternalServerError) IsCode(code int) bool { - return code == 500 -} - -// Code gets the status code for the regenerate token internal server error response -func (o *RegenerateTokenInternalServerError) Code() int { - return 500 -} - -func (o *RegenerateTokenInternalServerError) Error() string { - return fmt.Sprintf("[POST /regenerateToken][%d] regenerateTokenInternalServerError ", 500) -} - -func (o *RegenerateTokenInternalServerError) String() string { - return fmt.Sprintf("[POST /regenerateToken][%d] regenerateTokenInternalServerError ", 500) -} - -func (o *RegenerateTokenInternalServerError) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { - - return nil -} - -/* -RegenerateTokenBody regenerate token body -swagger:model RegenerateTokenBody -*/ -type RegenerateTokenBody struct { - - // email address - EmailAddress string `json:"emailAddress,omitempty"` -} - -// Validate validates this regenerate token body -func (o *RegenerateTokenBody) Validate(formats strfmt.Registry) error { - return nil -} - -// ContextValidate validates this regenerate token body based on context it is used -func (o *RegenerateTokenBody) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (o *RegenerateTokenBody) MarshalBinary() ([]byte, error) { - if o == nil { - return nil, nil - } - return swag.WriteJSON(o) -} - -// UnmarshalBinary interface implementation -func (o *RegenerateTokenBody) UnmarshalBinary(b []byte) error { - var res RegenerateTokenBody - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *o = res - return nil -} - -/* -RegenerateTokenOKBody regenerate token o k body -swagger:model RegenerateTokenOKBody -*/ -type RegenerateTokenOKBody struct { - - // token - Token string `json:"token,omitempty"` -} - -// Validate validates this regenerate token o k body -func (o *RegenerateTokenOKBody) Validate(formats strfmt.Registry) error { - return nil -} - -// ContextValidate validates this regenerate token o k body based on context it is used -func (o *RegenerateTokenOKBody) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (o *RegenerateTokenOKBody) MarshalBinary() ([]byte, error) { - if o == nil { - return nil, nil - } - return swag.WriteJSON(o) -} - -// UnmarshalBinary interface implementation -func (o *RegenerateTokenOKBody) UnmarshalBinary(b []byte) error { - var res RegenerateTokenOKBody - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *o = res - return nil -} diff --git a/rest_client_zrok/account/register_parameters.go b/rest_client_zrok/account/register_parameters.go index ac50479a..a369c2cd 100644 --- a/rest_client_zrok/account/register_parameters.go +++ b/rest_client_zrok/account/register_parameters.go @@ -14,8 +14,6 @@ import ( "github.com/go-openapi/runtime" cr "github.com/go-openapi/runtime/client" "github.com/go-openapi/strfmt" - - "github.com/openziti/zrok/rest_model_zrok" ) // NewRegisterParams creates a new RegisterParams object, @@ -64,7 +62,7 @@ RegisterParams contains all the parameters to send to the API endpoint type RegisterParams struct { // Body. - Body *rest_model_zrok.RegisterRequest + Body RegisterBody timeout time.Duration Context context.Context @@ -120,13 +118,13 @@ func (o *RegisterParams) SetHTTPClient(client *http.Client) { } // WithBody adds the body to the register params -func (o *RegisterParams) WithBody(body *rest_model_zrok.RegisterRequest) *RegisterParams { +func (o *RegisterParams) WithBody(body RegisterBody) *RegisterParams { o.SetBody(body) return o } // SetBody adds the body to the register params -func (o *RegisterParams) SetBody(body *rest_model_zrok.RegisterRequest) { +func (o *RegisterParams) SetBody(body RegisterBody) { o.Body = body } @@ -137,10 +135,8 @@ func (o *RegisterParams) WriteToRequest(r runtime.ClientRequest, reg strfmt.Regi return err } var res []error - if o.Body != nil { - if err := r.SetBodyParam(o.Body); err != nil { - return err - } + if err := r.SetBodyParam(o.Body); err != nil { + return err } if len(res) > 0 { diff --git a/rest_client_zrok/account/register_responses.go b/rest_client_zrok/account/register_responses.go index 2c510334..e283669f 100644 --- a/rest_client_zrok/account/register_responses.go +++ b/rest_client_zrok/account/register_responses.go @@ -6,11 +6,13 @@ package account // Editing this file might prove futile when you re-run the swagger generate command import ( + "context" "fmt" "io" "github.com/go-openapi/runtime" "github.com/go-openapi/strfmt" + "github.com/go-openapi/swag" "github.com/openziti/zrok/rest_model_zrok" ) @@ -63,7 +65,7 @@ RegisterOK describes a response with status code 200, with default header values account created */ type RegisterOK struct { - Payload *rest_model_zrok.RegisterResponse + Payload *RegisterOKBody } // IsSuccess returns true when this register o k response has a 2xx status code @@ -104,13 +106,13 @@ func (o *RegisterOK) String() string { return fmt.Sprintf("[POST /register][%d] registerOK %+v", 200, o.Payload) } -func (o *RegisterOK) GetPayload() *rest_model_zrok.RegisterResponse { +func (o *RegisterOK) GetPayload() *RegisterOKBody { return o.Payload } func (o *RegisterOK) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { - o.Payload = new(rest_model_zrok.RegisterResponse) + o.Payload = new(RegisterOKBody) // response payload if err := consumer.Consume(response.Body(), o.Payload); err != nil && err != io.EOF { @@ -297,3 +299,82 @@ func (o *RegisterInternalServerError) readResponse(response runtime.ClientRespon return nil } + +/* +RegisterBody register body +swagger:model RegisterBody +*/ +type RegisterBody struct { + + // password + Password string `json:"password,omitempty"` + + // register token + RegisterToken string `json:"registerToken,omitempty"` +} + +// Validate validates this register body +func (o *RegisterBody) Validate(formats strfmt.Registry) error { + return nil +} + +// ContextValidate validates this register body based on context it is used +func (o *RegisterBody) ContextValidate(ctx context.Context, formats strfmt.Registry) error { + return nil +} + +// MarshalBinary interface implementation +func (o *RegisterBody) MarshalBinary() ([]byte, error) { + if o == nil { + return nil, nil + } + return swag.WriteJSON(o) +} + +// UnmarshalBinary interface implementation +func (o *RegisterBody) UnmarshalBinary(b []byte) error { + var res RegisterBody + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *o = res + return nil +} + +/* +RegisterOKBody register o k body +swagger:model RegisterOKBody +*/ +type RegisterOKBody struct { + + // account token + AccountToken string `json:"accountToken,omitempty"` +} + +// Validate validates this register o k body +func (o *RegisterOKBody) Validate(formats strfmt.Registry) error { + return nil +} + +// ContextValidate validates this register o k body based on context it is used +func (o *RegisterOKBody) ContextValidate(ctx context.Context, formats strfmt.Registry) error { + return nil +} + +// MarshalBinary interface implementation +func (o *RegisterOKBody) MarshalBinary() ([]byte, error) { + if o == nil { + return nil, nil + } + return swag.WriteJSON(o) +} + +// UnmarshalBinary interface implementation +func (o *RegisterOKBody) UnmarshalBinary(b []byte) error { + var res RegisterOKBody + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *o = res + return nil +} diff --git a/rest_client_zrok/account/reset_password_parameters.go b/rest_client_zrok/account/reset_password_parameters.go index 7df57d20..ba2d1216 100644 --- a/rest_client_zrok/account/reset_password_parameters.go +++ b/rest_client_zrok/account/reset_password_parameters.go @@ -14,8 +14,6 @@ import ( "github.com/go-openapi/runtime" cr "github.com/go-openapi/runtime/client" "github.com/go-openapi/strfmt" - - "github.com/openziti/zrok/rest_model_zrok" ) // NewResetPasswordParams creates a new ResetPasswordParams object, @@ -64,7 +62,7 @@ ResetPasswordParams contains all the parameters to send to the API endpoint type ResetPasswordParams struct { // Body. - Body *rest_model_zrok.ResetPasswordRequest + Body ResetPasswordBody timeout time.Duration Context context.Context @@ -120,13 +118,13 @@ func (o *ResetPasswordParams) SetHTTPClient(client *http.Client) { } // WithBody adds the body to the reset password params -func (o *ResetPasswordParams) WithBody(body *rest_model_zrok.ResetPasswordRequest) *ResetPasswordParams { +func (o *ResetPasswordParams) WithBody(body ResetPasswordBody) *ResetPasswordParams { o.SetBody(body) return o } // SetBody adds the body to the reset password params -func (o *ResetPasswordParams) SetBody(body *rest_model_zrok.ResetPasswordRequest) { +func (o *ResetPasswordParams) SetBody(body ResetPasswordBody) { o.Body = body } @@ -137,10 +135,8 @@ func (o *ResetPasswordParams) WriteToRequest(r runtime.ClientRequest, reg strfmt return err } var res []error - if o.Body != nil { - if err := r.SetBodyParam(o.Body); err != nil { - return err - } + if err := r.SetBodyParam(o.Body); err != nil { + return err } if len(res) > 0 { diff --git a/rest_client_zrok/account/reset_password_request_responses.go b/rest_client_zrok/account/reset_password_request_responses.go index 7e05c525..ac021614 100644 --- a/rest_client_zrok/account/reset_password_request_responses.go +++ b/rest_client_zrok/account/reset_password_request_responses.go @@ -53,7 +53,7 @@ func NewResetPasswordRequestCreated() *ResetPasswordRequestCreated { /* ResetPasswordRequestCreated describes a response with status code 201, with default header values. -forgot password request created +reset password request created */ type ResetPasswordRequestCreated struct { } @@ -109,7 +109,7 @@ func NewResetPasswordRequestBadRequest() *ResetPasswordRequestBadRequest { /* ResetPasswordRequestBadRequest describes a response with status code 400, with default header values. -forgot password request not created +reset password request not created */ type ResetPasswordRequestBadRequest struct { } diff --git a/rest_client_zrok/account/reset_password_responses.go b/rest_client_zrok/account/reset_password_responses.go index 01c83c7b..7b095fdf 100644 --- a/rest_client_zrok/account/reset_password_responses.go +++ b/rest_client_zrok/account/reset_password_responses.go @@ -6,11 +6,13 @@ package account // Editing this file might prove futile when you re-run the swagger generate command import ( + "context" "fmt" "io" "github.com/go-openapi/runtime" "github.com/go-openapi/strfmt" + "github.com/go-openapi/swag" "github.com/openziti/zrok/rest_model_zrok" ) @@ -285,3 +287,44 @@ func (o *ResetPasswordInternalServerError) readResponse(response runtime.ClientR return nil } + +/* +ResetPasswordBody reset password body +swagger:model ResetPasswordBody +*/ +type ResetPasswordBody struct { + + // password + Password string `json:"password,omitempty"` + + // reset token + ResetToken string `json:"resetToken,omitempty"` +} + +// Validate validates this reset password body +func (o *ResetPasswordBody) Validate(formats strfmt.Registry) error { + return nil +} + +// ContextValidate validates this reset password body based on context it is used +func (o *ResetPasswordBody) ContextValidate(ctx context.Context, formats strfmt.Registry) error { + return nil +} + +// MarshalBinary interface implementation +func (o *ResetPasswordBody) MarshalBinary() ([]byte, error) { + if o == nil { + return nil, nil + } + return swag.WriteJSON(o) +} + +// UnmarshalBinary interface implementation +func (o *ResetPasswordBody) UnmarshalBinary(b []byte) error { + var res ResetPasswordBody + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *o = res + return nil +} diff --git a/rest_client_zrok/account/verify_parameters.go b/rest_client_zrok/account/verify_parameters.go index ffe041b2..831ad673 100644 --- a/rest_client_zrok/account/verify_parameters.go +++ b/rest_client_zrok/account/verify_parameters.go @@ -14,8 +14,6 @@ import ( "github.com/go-openapi/runtime" cr "github.com/go-openapi/runtime/client" "github.com/go-openapi/strfmt" - - "github.com/openziti/zrok/rest_model_zrok" ) // NewVerifyParams creates a new VerifyParams object, @@ -64,7 +62,7 @@ VerifyParams contains all the parameters to send to the API endpoint type VerifyParams struct { // Body. - Body *rest_model_zrok.VerifyRequest + Body VerifyBody timeout time.Duration Context context.Context @@ -120,13 +118,13 @@ func (o *VerifyParams) SetHTTPClient(client *http.Client) { } // WithBody adds the body to the verify params -func (o *VerifyParams) WithBody(body *rest_model_zrok.VerifyRequest) *VerifyParams { +func (o *VerifyParams) WithBody(body VerifyBody) *VerifyParams { o.SetBody(body) return o } // SetBody adds the body to the verify params -func (o *VerifyParams) SetBody(body *rest_model_zrok.VerifyRequest) { +func (o *VerifyParams) SetBody(body VerifyBody) { o.Body = body } @@ -137,10 +135,8 @@ func (o *VerifyParams) WriteToRequest(r runtime.ClientRequest, reg strfmt.Regist return err } var res []error - if o.Body != nil { - if err := r.SetBodyParam(o.Body); err != nil { - return err - } + if err := r.SetBodyParam(o.Body); err != nil { + return err } if len(res) > 0 { diff --git a/rest_client_zrok/account/verify_responses.go b/rest_client_zrok/account/verify_responses.go index ee26b595..13051959 100644 --- a/rest_client_zrok/account/verify_responses.go +++ b/rest_client_zrok/account/verify_responses.go @@ -6,13 +6,13 @@ package account // Editing this file might prove futile when you re-run the swagger generate command import ( + "context" "fmt" "io" "github.com/go-openapi/runtime" "github.com/go-openapi/strfmt" - - "github.com/openziti/zrok/rest_model_zrok" + "github.com/go-openapi/swag" ) // VerifyReader is a Reader for the Verify structure. @@ -54,10 +54,10 @@ func NewVerifyOK() *VerifyOK { /* VerifyOK describes a response with status code 200, with default header values. -token ready +registration token ready */ type VerifyOK struct { - Payload *rest_model_zrok.VerifyResponse + Payload *VerifyOKBody } // IsSuccess returns true when this verify o k response has a 2xx status code @@ -98,13 +98,13 @@ func (o *VerifyOK) String() string { return fmt.Sprintf("[POST /verify][%d] verifyOK %+v", 200, o.Payload) } -func (o *VerifyOK) GetPayload() *rest_model_zrok.VerifyResponse { +func (o *VerifyOK) GetPayload() *VerifyOKBody { return o.Payload } func (o *VerifyOK) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { - o.Payload = new(rest_model_zrok.VerifyResponse) + o.Payload = new(VerifyOKBody) // response payload if err := consumer.Consume(response.Body(), o.Payload); err != nil && err != io.EOF { @@ -122,7 +122,7 @@ func NewVerifyNotFound() *VerifyNotFound { /* VerifyNotFound describes a response with status code 404, with default header values. -token not found +registration token not found */ type VerifyNotFound struct { } @@ -225,3 +225,79 @@ func (o *VerifyInternalServerError) readResponse(response runtime.ClientResponse return nil } + +/* +VerifyBody verify body +swagger:model VerifyBody +*/ +type VerifyBody struct { + + // register token + RegisterToken string `json:"registerToken,omitempty"` +} + +// Validate validates this verify body +func (o *VerifyBody) Validate(formats strfmt.Registry) error { + return nil +} + +// ContextValidate validates this verify body based on context it is used +func (o *VerifyBody) ContextValidate(ctx context.Context, formats strfmt.Registry) error { + return nil +} + +// MarshalBinary interface implementation +func (o *VerifyBody) MarshalBinary() ([]byte, error) { + if o == nil { + return nil, nil + } + return swag.WriteJSON(o) +} + +// UnmarshalBinary interface implementation +func (o *VerifyBody) UnmarshalBinary(b []byte) error { + var res VerifyBody + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *o = res + return nil +} + +/* +VerifyOKBody verify o k body +swagger:model VerifyOKBody +*/ +type VerifyOKBody struct { + + // email + Email string `json:"email,omitempty"` +} + +// Validate validates this verify o k body +func (o *VerifyOKBody) Validate(formats strfmt.Registry) error { + return nil +} + +// ContextValidate validates this verify o k body based on context it is used +func (o *VerifyOKBody) ContextValidate(ctx context.Context, formats strfmt.Registry) error { + return nil +} + +// MarshalBinary interface implementation +func (o *VerifyOKBody) MarshalBinary() ([]byte, error) { + if o == nil { + return nil, nil + } + return swag.WriteJSON(o) +} + +// UnmarshalBinary interface implementation +func (o *VerifyOKBody) UnmarshalBinary(b []byte) error { + var res VerifyOKBody + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *o = res + return nil +} diff --git a/rest_client_zrok/admin/add_organization_member_responses.go b/rest_client_zrok/admin/add_organization_member_responses.go index 60866458..da8500fa 100644 --- a/rest_client_zrok/admin/add_organization_member_responses.go +++ b/rest_client_zrok/admin/add_organization_member_responses.go @@ -287,8 +287,8 @@ type AddOrganizationMemberBody struct { // email Email string `json:"email,omitempty"` - // token - Token string `json:"token,omitempty"` + // organization token + OrganizationToken string `json:"organizationToken,omitempty"` } // Validate validates this add organization member body diff --git a/rest_client_zrok/admin/create_account_responses.go b/rest_client_zrok/admin/create_account_responses.go index 2e5a4020..9f0f4f39 100644 --- a/rest_client_zrok/admin/create_account_responses.go +++ b/rest_client_zrok/admin/create_account_responses.go @@ -273,8 +273,8 @@ swagger:model CreateAccountCreatedBody */ type CreateAccountCreatedBody struct { - // token - Token string `json:"token,omitempty"` + // account token + AccountToken string `json:"accountToken,omitempty"` } // Validate validates this create account created body diff --git a/rest_client_zrok/admin/create_frontend_parameters.go b/rest_client_zrok/admin/create_frontend_parameters.go index d533642a..639e70b6 100644 --- a/rest_client_zrok/admin/create_frontend_parameters.go +++ b/rest_client_zrok/admin/create_frontend_parameters.go @@ -14,8 +14,6 @@ import ( "github.com/go-openapi/runtime" cr "github.com/go-openapi/runtime/client" "github.com/go-openapi/strfmt" - - "github.com/openziti/zrok/rest_model_zrok" ) // NewCreateFrontendParams creates a new CreateFrontendParams object, @@ -64,7 +62,7 @@ CreateFrontendParams contains all the parameters to send to the API endpoint type CreateFrontendParams struct { // Body. - Body *rest_model_zrok.CreateFrontendRequest + Body CreateFrontendBody timeout time.Duration Context context.Context @@ -120,13 +118,13 @@ func (o *CreateFrontendParams) SetHTTPClient(client *http.Client) { } // WithBody adds the body to the create frontend params -func (o *CreateFrontendParams) WithBody(body *rest_model_zrok.CreateFrontendRequest) *CreateFrontendParams { +func (o *CreateFrontendParams) WithBody(body CreateFrontendBody) *CreateFrontendParams { o.SetBody(body) return o } // SetBody adds the body to the create frontend params -func (o *CreateFrontendParams) SetBody(body *rest_model_zrok.CreateFrontendRequest) { +func (o *CreateFrontendParams) SetBody(body CreateFrontendBody) { o.Body = body } @@ -137,10 +135,8 @@ func (o *CreateFrontendParams) WriteToRequest(r runtime.ClientRequest, reg strfm return err } var res []error - if o.Body != nil { - if err := r.SetBodyParam(o.Body); err != nil { - return err - } + if err := r.SetBodyParam(o.Body); err != nil { + return err } if len(res) > 0 { diff --git a/rest_client_zrok/admin/create_frontend_responses.go b/rest_client_zrok/admin/create_frontend_responses.go index 69423f99..367d6b5c 100644 --- a/rest_client_zrok/admin/create_frontend_responses.go +++ b/rest_client_zrok/admin/create_frontend_responses.go @@ -6,13 +6,16 @@ package admin // Editing this file might prove futile when you re-run the swagger generate command import ( + "context" + "encoding/json" "fmt" "io" + "github.com/go-openapi/errors" "github.com/go-openapi/runtime" "github.com/go-openapi/strfmt" - - "github.com/openziti/zrok/rest_model_zrok" + "github.com/go-openapi/swag" + "github.com/go-openapi/validate" ) // CreateFrontendReader is a Reader for the CreateFrontend structure. @@ -69,7 +72,7 @@ CreateFrontendCreated describes a response with status code 201, with default he frontend created */ type CreateFrontendCreated struct { - Payload *rest_model_zrok.CreateFrontendResponse + Payload *CreateFrontendCreatedBody } // IsSuccess returns true when this create frontend created response has a 2xx status code @@ -110,13 +113,13 @@ func (o *CreateFrontendCreated) String() string { return fmt.Sprintf("[POST /frontend][%d] createFrontendCreated %+v", 201, o.Payload) } -func (o *CreateFrontendCreated) GetPayload() *rest_model_zrok.CreateFrontendResponse { +func (o *CreateFrontendCreated) GetPayload() *CreateFrontendCreatedBody { return o.Payload } func (o *CreateFrontendCreated) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { - o.Payload = new(rest_model_zrok.CreateFrontendResponse) + o.Payload = new(CreateFrontendCreatedBody) // response payload if err := consumer.Consume(response.Body(), o.Payload); err != nil && err != io.EOF { @@ -349,3 +352,140 @@ func (o *CreateFrontendInternalServerError) readResponse(response runtime.Client return nil } + +/* +CreateFrontendBody create frontend body +swagger:model CreateFrontendBody +*/ +type CreateFrontendBody struct { + + // permission mode + // Enum: [open closed] + PermissionMode string `json:"permissionMode,omitempty"` + + // public name + PublicName string `json:"public_name,omitempty"` + + // url template + URLTemplate string `json:"url_template,omitempty"` + + // z Id + ZID string `json:"zId,omitempty"` +} + +// Validate validates this create frontend body +func (o *CreateFrontendBody) Validate(formats strfmt.Registry) error { + var res []error + + if err := o.validatePermissionMode(formats); err != nil { + res = append(res, err) + } + + if len(res) > 0 { + return errors.CompositeValidationError(res...) + } + return nil +} + +var createFrontendBodyTypePermissionModePropEnum []interface{} + +func init() { + var res []string + if err := json.Unmarshal([]byte(`["open","closed"]`), &res); err != nil { + panic(err) + } + for _, v := range res { + createFrontendBodyTypePermissionModePropEnum = append(createFrontendBodyTypePermissionModePropEnum, v) + } +} + +const ( + + // CreateFrontendBodyPermissionModeOpen captures enum value "open" + CreateFrontendBodyPermissionModeOpen string = "open" + + // CreateFrontendBodyPermissionModeClosed captures enum value "closed" + CreateFrontendBodyPermissionModeClosed string = "closed" +) + +// prop value enum +func (o *CreateFrontendBody) validatePermissionModeEnum(path, location string, value string) error { + if err := validate.EnumCase(path, location, value, createFrontendBodyTypePermissionModePropEnum, true); err != nil { + return err + } + return nil +} + +func (o *CreateFrontendBody) validatePermissionMode(formats strfmt.Registry) error { + if swag.IsZero(o.PermissionMode) { // not required + return nil + } + + // value enum + if err := o.validatePermissionModeEnum("body"+"."+"permissionMode", "body", o.PermissionMode); err != nil { + return err + } + + return nil +} + +// ContextValidate validates this create frontend body based on context it is used +func (o *CreateFrontendBody) ContextValidate(ctx context.Context, formats strfmt.Registry) error { + return nil +} + +// MarshalBinary interface implementation +func (o *CreateFrontendBody) MarshalBinary() ([]byte, error) { + if o == nil { + return nil, nil + } + return swag.WriteJSON(o) +} + +// UnmarshalBinary interface implementation +func (o *CreateFrontendBody) UnmarshalBinary(b []byte) error { + var res CreateFrontendBody + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *o = res + return nil +} + +/* +CreateFrontendCreatedBody create frontend created body +swagger:model CreateFrontendCreatedBody +*/ +type CreateFrontendCreatedBody struct { + + // frontend token + FrontendToken string `json:"frontendToken,omitempty"` +} + +// Validate validates this create frontend created body +func (o *CreateFrontendCreatedBody) Validate(formats strfmt.Registry) error { + return nil +} + +// ContextValidate validates this create frontend created body based on context it is used +func (o *CreateFrontendCreatedBody) ContextValidate(ctx context.Context, formats strfmt.Registry) error { + return nil +} + +// MarshalBinary interface implementation +func (o *CreateFrontendCreatedBody) MarshalBinary() ([]byte, error) { + if o == nil { + return nil, nil + } + return swag.WriteJSON(o) +} + +// UnmarshalBinary interface implementation +func (o *CreateFrontendCreatedBody) UnmarshalBinary(b []byte) error { + var res CreateFrontendCreatedBody + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *o = res + return nil +} diff --git a/rest_client_zrok/admin/create_organization_responses.go b/rest_client_zrok/admin/create_organization_responses.go index 2459593d..b31dffa6 100644 --- a/rest_client_zrok/admin/create_organization_responses.go +++ b/rest_client_zrok/admin/create_organization_responses.go @@ -270,8 +270,8 @@ swagger:model CreateOrganizationCreatedBody */ type CreateOrganizationCreatedBody struct { - // token - Token string `json:"token,omitempty"` + // organization token + OrganizationToken string `json:"organizationToken,omitempty"` } // Validate validates this create organization created body diff --git a/rest_client_zrok/admin/delete_frontend_parameters.go b/rest_client_zrok/admin/delete_frontend_parameters.go index 0f078161..458ba7ae 100644 --- a/rest_client_zrok/admin/delete_frontend_parameters.go +++ b/rest_client_zrok/admin/delete_frontend_parameters.go @@ -14,8 +14,6 @@ import ( "github.com/go-openapi/runtime" cr "github.com/go-openapi/runtime/client" "github.com/go-openapi/strfmt" - - "github.com/openziti/zrok/rest_model_zrok" ) // NewDeleteFrontendParams creates a new DeleteFrontendParams object, @@ -64,7 +62,7 @@ DeleteFrontendParams contains all the parameters to send to the API endpoint type DeleteFrontendParams struct { // Body. - Body *rest_model_zrok.DeleteFrontendRequest + Body DeleteFrontendBody timeout time.Duration Context context.Context @@ -120,13 +118,13 @@ func (o *DeleteFrontendParams) SetHTTPClient(client *http.Client) { } // WithBody adds the body to the delete frontend params -func (o *DeleteFrontendParams) WithBody(body *rest_model_zrok.DeleteFrontendRequest) *DeleteFrontendParams { +func (o *DeleteFrontendParams) WithBody(body DeleteFrontendBody) *DeleteFrontendParams { o.SetBody(body) return o } // SetBody adds the body to the delete frontend params -func (o *DeleteFrontendParams) SetBody(body *rest_model_zrok.DeleteFrontendRequest) { +func (o *DeleteFrontendParams) SetBody(body DeleteFrontendBody) { o.Body = body } @@ -137,10 +135,8 @@ func (o *DeleteFrontendParams) WriteToRequest(r runtime.ClientRequest, reg strfm return err } var res []error - if o.Body != nil { - if err := r.SetBodyParam(o.Body); err != nil { - return err - } + if err := r.SetBodyParam(o.Body); err != nil { + return err } if len(res) > 0 { diff --git a/rest_client_zrok/admin/delete_frontend_responses.go b/rest_client_zrok/admin/delete_frontend_responses.go index 4c37fb23..235c2c19 100644 --- a/rest_client_zrok/admin/delete_frontend_responses.go +++ b/rest_client_zrok/admin/delete_frontend_responses.go @@ -6,10 +6,12 @@ package admin // Editing this file might prove futile when you re-run the swagger generate command import ( + "context" "fmt" "github.com/go-openapi/runtime" "github.com/go-openapi/strfmt" + "github.com/go-openapi/swag" ) // DeleteFrontendReader is a Reader for the DeleteFrontend structure. @@ -272,3 +274,41 @@ func (o *DeleteFrontendInternalServerError) readResponse(response runtime.Client return nil } + +/* +DeleteFrontendBody delete frontend body +swagger:model DeleteFrontendBody +*/ +type DeleteFrontendBody struct { + + // frontend token + FrontendToken string `json:"frontendToken,omitempty"` +} + +// Validate validates this delete frontend body +func (o *DeleteFrontendBody) Validate(formats strfmt.Registry) error { + return nil +} + +// ContextValidate validates this delete frontend body based on context it is used +func (o *DeleteFrontendBody) ContextValidate(ctx context.Context, formats strfmt.Registry) error { + return nil +} + +// MarshalBinary interface implementation +func (o *DeleteFrontendBody) MarshalBinary() ([]byte, error) { + if o == nil { + return nil, nil + } + return swag.WriteJSON(o) +} + +// UnmarshalBinary interface implementation +func (o *DeleteFrontendBody) UnmarshalBinary(b []byte) error { + var res DeleteFrontendBody + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *o = res + return nil +} diff --git a/rest_client_zrok/admin/delete_organization_responses.go b/rest_client_zrok/admin/delete_organization_responses.go index 2eab36fd..7dbf9987 100644 --- a/rest_client_zrok/admin/delete_organization_responses.go +++ b/rest_client_zrok/admin/delete_organization_responses.go @@ -281,8 +281,8 @@ swagger:model DeleteOrganizationBody */ type DeleteOrganizationBody struct { - // token - Token string `json:"token,omitempty"` + // organization token + OrganizationToken string `json:"organizationToken,omitempty"` } // Validate validates this delete organization body diff --git a/rest_client_zrok/admin/invite_token_generate_parameters.go b/rest_client_zrok/admin/invite_token_generate_parameters.go index cd4fa56c..8609b4fc 100644 --- a/rest_client_zrok/admin/invite_token_generate_parameters.go +++ b/rest_client_zrok/admin/invite_token_generate_parameters.go @@ -14,8 +14,6 @@ import ( "github.com/go-openapi/runtime" cr "github.com/go-openapi/runtime/client" "github.com/go-openapi/strfmt" - - "github.com/openziti/zrok/rest_model_zrok" ) // NewInviteTokenGenerateParams creates a new InviteTokenGenerateParams object, @@ -64,7 +62,7 @@ InviteTokenGenerateParams contains all the parameters to send to the API endpoin type InviteTokenGenerateParams struct { // Body. - Body *rest_model_zrok.InviteTokenGenerateRequest + Body InviteTokenGenerateBody timeout time.Duration Context context.Context @@ -120,13 +118,13 @@ func (o *InviteTokenGenerateParams) SetHTTPClient(client *http.Client) { } // WithBody adds the body to the invite token generate params -func (o *InviteTokenGenerateParams) WithBody(body *rest_model_zrok.InviteTokenGenerateRequest) *InviteTokenGenerateParams { +func (o *InviteTokenGenerateParams) WithBody(body InviteTokenGenerateBody) *InviteTokenGenerateParams { o.SetBody(body) return o } // SetBody adds the body to the invite token generate params -func (o *InviteTokenGenerateParams) SetBody(body *rest_model_zrok.InviteTokenGenerateRequest) { +func (o *InviteTokenGenerateParams) SetBody(body InviteTokenGenerateBody) { o.Body = body } @@ -137,10 +135,8 @@ func (o *InviteTokenGenerateParams) WriteToRequest(r runtime.ClientRequest, reg return err } var res []error - if o.Body != nil { - if err := r.SetBodyParam(o.Body); err != nil { - return err - } + if err := r.SetBodyParam(o.Body); err != nil { + return err } if len(res) > 0 { diff --git a/rest_client_zrok/admin/invite_token_generate_responses.go b/rest_client_zrok/admin/invite_token_generate_responses.go index c2c61e65..1279f0a4 100644 --- a/rest_client_zrok/admin/invite_token_generate_responses.go +++ b/rest_client_zrok/admin/invite_token_generate_responses.go @@ -6,10 +6,12 @@ package admin // Editing this file might prove futile when you re-run the swagger generate command import ( + "context" "fmt" "github.com/go-openapi/runtime" "github.com/go-openapi/strfmt" + "github.com/go-openapi/swag" ) // InviteTokenGenerateReader is a Reader for the InviteTokenGenerate structure. @@ -57,7 +59,7 @@ func NewInviteTokenGenerateCreated() *InviteTokenGenerateCreated { /* InviteTokenGenerateCreated describes a response with status code 201, with default header values. -invitation tokens created +invite tokens created */ type InviteTokenGenerateCreated struct { } @@ -113,7 +115,7 @@ func NewInviteTokenGenerateBadRequest() *InviteTokenGenerateBadRequest { /* InviteTokenGenerateBadRequest describes a response with status code 400, with default header values. -invitation tokens not created +invite tokens not created */ type InviteTokenGenerateBadRequest struct { } @@ -272,3 +274,41 @@ func (o *InviteTokenGenerateInternalServerError) readResponse(response runtime.C return nil } + +/* +InviteTokenGenerateBody invite token generate body +swagger:model InviteTokenGenerateBody +*/ +type InviteTokenGenerateBody struct { + + // invite tokens + InviteTokens []string `json:"inviteTokens"` +} + +// Validate validates this invite token generate body +func (o *InviteTokenGenerateBody) Validate(formats strfmt.Registry) error { + return nil +} + +// ContextValidate validates this invite token generate body based on context it is used +func (o *InviteTokenGenerateBody) ContextValidate(ctx context.Context, formats strfmt.Registry) error { + return nil +} + +// MarshalBinary interface implementation +func (o *InviteTokenGenerateBody) MarshalBinary() ([]byte, error) { + if o == nil { + return nil, nil + } + return swag.WriteJSON(o) +} + +// UnmarshalBinary interface implementation +func (o *InviteTokenGenerateBody) UnmarshalBinary(b []byte) error { + var res InviteTokenGenerateBody + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *o = res + return nil +} diff --git a/rest_client_zrok/admin/list_frontends_responses.go b/rest_client_zrok/admin/list_frontends_responses.go index e03e7d17..d351c898 100644 --- a/rest_client_zrok/admin/list_frontends_responses.go +++ b/rest_client_zrok/admin/list_frontends_responses.go @@ -6,13 +6,13 @@ package admin // Editing this file might prove futile when you re-run the swagger generate command import ( + "context" "fmt" "io" "github.com/go-openapi/runtime" "github.com/go-openapi/strfmt" - - "github.com/openziti/zrok/rest_model_zrok" + "github.com/go-openapi/swag" ) // ListFrontendsReader is a Reader for the ListFrontends structure. @@ -57,7 +57,7 @@ ListFrontendsOK describes a response with status code 200, with default header v ok */ type ListFrontendsOK struct { - Payload rest_model_zrok.PublicFrontendList + Payload []*ListFrontendsOKBodyItems0 } // IsSuccess returns true when this list frontends o k response has a 2xx status code @@ -98,7 +98,7 @@ func (o *ListFrontendsOK) String() string { return fmt.Sprintf("[GET /frontends][%d] listFrontendsOK %+v", 200, o.Payload) } -func (o *ListFrontendsOK) GetPayload() rest_model_zrok.PublicFrontendList { +func (o *ListFrontendsOK) GetPayload() []*ListFrontendsOKBodyItems0 { return o.Payload } @@ -223,3 +223,56 @@ func (o *ListFrontendsInternalServerError) readResponse(response runtime.ClientR return nil } + +/* +ListFrontendsOKBodyItems0 list frontends o k body items0 +swagger:model ListFrontendsOKBodyItems0 +*/ +type ListFrontendsOKBodyItems0 struct { + + // created at + CreatedAt int64 `json:"createdAt,omitempty"` + + // frontend token + FrontendToken string `json:"frontendToken,omitempty"` + + // public name + PublicName string `json:"publicName,omitempty"` + + // updated at + UpdatedAt int64 `json:"updatedAt,omitempty"` + + // url template + URLTemplate string `json:"urlTemplate,omitempty"` + + // z Id + ZID string `json:"zId,omitempty"` +} + +// Validate validates this list frontends o k body items0 +func (o *ListFrontendsOKBodyItems0) Validate(formats strfmt.Registry) error { + return nil +} + +// ContextValidate validates this list frontends o k body items0 based on context it is used +func (o *ListFrontendsOKBodyItems0) ContextValidate(ctx context.Context, formats strfmt.Registry) error { + return nil +} + +// MarshalBinary interface implementation +func (o *ListFrontendsOKBodyItems0) MarshalBinary() ([]byte, error) { + if o == nil { + return nil, nil + } + return swag.WriteJSON(o) +} + +// UnmarshalBinary interface implementation +func (o *ListFrontendsOKBodyItems0) UnmarshalBinary(b []byte) error { + var res ListFrontendsOKBodyItems0 + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *o = res + return nil +} diff --git a/rest_client_zrok/admin/list_organization_members_responses.go b/rest_client_zrok/admin/list_organization_members_responses.go index d22940e5..dfc0a42c 100644 --- a/rest_client_zrok/admin/list_organization_members_responses.go +++ b/rest_client_zrok/admin/list_organization_members_responses.go @@ -296,8 +296,8 @@ swagger:model ListOrganizationMembersBody */ type ListOrganizationMembersBody struct { - // token - Token string `json:"token,omitempty"` + // organization token + OrganizationToken string `json:"organizationToken,omitempty"` } // Validate validates this list organization members body diff --git a/rest_client_zrok/admin/list_organizations_responses.go b/rest_client_zrok/admin/list_organizations_responses.go index 2adbc8cc..01055621 100644 --- a/rest_client_zrok/admin/list_organizations_responses.go +++ b/rest_client_zrok/admin/list_organizations_responses.go @@ -344,8 +344,8 @@ type ListOrganizationsOKBodyOrganizationsItems0 struct { // description Description string `json:"description,omitempty"` - // token - Token string `json:"token,omitempty"` + // organization token + OrganizationToken string `json:"organizationToken,omitempty"` } // Validate validates this list organizations o k body organizations items0 diff --git a/rest_client_zrok/admin/remove_organization_member_responses.go b/rest_client_zrok/admin/remove_organization_member_responses.go index 1e66a9db..115b20b8 100644 --- a/rest_client_zrok/admin/remove_organization_member_responses.go +++ b/rest_client_zrok/admin/remove_organization_member_responses.go @@ -284,8 +284,8 @@ type RemoveOrganizationMemberBody struct { // email Email string `json:"email,omitempty"` - // token - Token string `json:"token,omitempty"` + // organization token + OrganizationToken string `json:"organizationToken,omitempty"` } // Validate validates this remove organization member body diff --git a/rest_client_zrok/admin/update_frontend_parameters.go b/rest_client_zrok/admin/update_frontend_parameters.go index 0cfc5ba9..c19a52a1 100644 --- a/rest_client_zrok/admin/update_frontend_parameters.go +++ b/rest_client_zrok/admin/update_frontend_parameters.go @@ -14,8 +14,6 @@ import ( "github.com/go-openapi/runtime" cr "github.com/go-openapi/runtime/client" "github.com/go-openapi/strfmt" - - "github.com/openziti/zrok/rest_model_zrok" ) // NewUpdateFrontendParams creates a new UpdateFrontendParams object, @@ -64,7 +62,7 @@ UpdateFrontendParams contains all the parameters to send to the API endpoint type UpdateFrontendParams struct { // Body. - Body *rest_model_zrok.UpdateFrontendRequest + Body UpdateFrontendBody timeout time.Duration Context context.Context @@ -120,13 +118,13 @@ func (o *UpdateFrontendParams) SetHTTPClient(client *http.Client) { } // WithBody adds the body to the update frontend params -func (o *UpdateFrontendParams) WithBody(body *rest_model_zrok.UpdateFrontendRequest) *UpdateFrontendParams { +func (o *UpdateFrontendParams) WithBody(body UpdateFrontendBody) *UpdateFrontendParams { o.SetBody(body) return o } // SetBody adds the body to the update frontend params -func (o *UpdateFrontendParams) SetBody(body *rest_model_zrok.UpdateFrontendRequest) { +func (o *UpdateFrontendParams) SetBody(body UpdateFrontendBody) { o.Body = body } @@ -137,10 +135,8 @@ func (o *UpdateFrontendParams) WriteToRequest(r runtime.ClientRequest, reg strfm return err } var res []error - if o.Body != nil { - if err := r.SetBodyParam(o.Body); err != nil { - return err - } + if err := r.SetBodyParam(o.Body); err != nil { + return err } if len(res) > 0 { diff --git a/rest_client_zrok/admin/update_frontend_responses.go b/rest_client_zrok/admin/update_frontend_responses.go index f1c633be..943e37b8 100644 --- a/rest_client_zrok/admin/update_frontend_responses.go +++ b/rest_client_zrok/admin/update_frontend_responses.go @@ -6,10 +6,12 @@ package admin // Editing this file might prove futile when you re-run the swagger generate command import ( + "context" "fmt" "github.com/go-openapi/runtime" "github.com/go-openapi/strfmt" + "github.com/go-openapi/swag" ) // UpdateFrontendReader is a Reader for the UpdateFrontend structure. @@ -272,3 +274,47 @@ func (o *UpdateFrontendInternalServerError) readResponse(response runtime.Client return nil } + +/* +UpdateFrontendBody update frontend body +swagger:model UpdateFrontendBody +*/ +type UpdateFrontendBody struct { + + // frontend token + FrontendToken string `json:"frontendToken,omitempty"` + + // public name + PublicName string `json:"publicName,omitempty"` + + // url template + URLTemplate string `json:"urlTemplate,omitempty"` +} + +// Validate validates this update frontend body +func (o *UpdateFrontendBody) Validate(formats strfmt.Registry) error { + return nil +} + +// ContextValidate validates this update frontend body based on context it is used +func (o *UpdateFrontendBody) ContextValidate(ctx context.Context, formats strfmt.Registry) error { + return nil +} + +// MarshalBinary interface implementation +func (o *UpdateFrontendBody) MarshalBinary() ([]byte, error) { + if o == nil { + return nil, nil + } + return swag.WriteJSON(o) +} + +// UnmarshalBinary interface implementation +func (o *UpdateFrontendBody) UnmarshalBinary(b []byte) error { + var res UpdateFrontendBody + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *o = res + return nil +} diff --git a/rest_client_zrok/environment/disable_parameters.go b/rest_client_zrok/environment/disable_parameters.go index 31818ef9..afaaaddc 100644 --- a/rest_client_zrok/environment/disable_parameters.go +++ b/rest_client_zrok/environment/disable_parameters.go @@ -14,8 +14,6 @@ import ( "github.com/go-openapi/runtime" cr "github.com/go-openapi/runtime/client" "github.com/go-openapi/strfmt" - - "github.com/openziti/zrok/rest_model_zrok" ) // NewDisableParams creates a new DisableParams object, @@ -64,7 +62,7 @@ DisableParams contains all the parameters to send to the API endpoint type DisableParams struct { // Body. - Body *rest_model_zrok.DisableRequest + Body DisableBody timeout time.Duration Context context.Context @@ -120,13 +118,13 @@ func (o *DisableParams) SetHTTPClient(client *http.Client) { } // WithBody adds the body to the disable params -func (o *DisableParams) WithBody(body *rest_model_zrok.DisableRequest) *DisableParams { +func (o *DisableParams) WithBody(body DisableBody) *DisableParams { o.SetBody(body) return o } // SetBody adds the body to the disable params -func (o *DisableParams) SetBody(body *rest_model_zrok.DisableRequest) { +func (o *DisableParams) SetBody(body DisableBody) { o.Body = body } @@ -137,10 +135,8 @@ func (o *DisableParams) WriteToRequest(r runtime.ClientRequest, reg strfmt.Regis return err } var res []error - if o.Body != nil { - if err := r.SetBodyParam(o.Body); err != nil { - return err - } + if err := r.SetBodyParam(o.Body); err != nil { + return err } if len(res) > 0 { diff --git a/rest_client_zrok/environment/disable_responses.go b/rest_client_zrok/environment/disable_responses.go index 60fb2fa9..e31ae99c 100644 --- a/rest_client_zrok/environment/disable_responses.go +++ b/rest_client_zrok/environment/disable_responses.go @@ -6,10 +6,12 @@ package environment // Editing this file might prove futile when you re-run the swagger generate command import ( + "context" "fmt" "github.com/go-openapi/runtime" "github.com/go-openapi/strfmt" + "github.com/go-openapi/swag" ) // DisableReader is a Reader for the Disable structure. @@ -210,3 +212,41 @@ func (o *DisableInternalServerError) readResponse(response runtime.ClientRespons return nil } + +/* +DisableBody disable body +swagger:model DisableBody +*/ +type DisableBody struct { + + // identity + Identity string `json:"identity,omitempty"` +} + +// Validate validates this disable body +func (o *DisableBody) Validate(formats strfmt.Registry) error { + return nil +} + +// ContextValidate validates this disable body based on context it is used +func (o *DisableBody) ContextValidate(ctx context.Context, formats strfmt.Registry) error { + return nil +} + +// MarshalBinary interface implementation +func (o *DisableBody) MarshalBinary() ([]byte, error) { + if o == nil { + return nil, nil + } + return swag.WriteJSON(o) +} + +// UnmarshalBinary interface implementation +func (o *DisableBody) UnmarshalBinary(b []byte) error { + var res DisableBody + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *o = res + return nil +} diff --git a/rest_client_zrok/environment/enable_parameters.go b/rest_client_zrok/environment/enable_parameters.go index 26f8622f..65a1c5d0 100644 --- a/rest_client_zrok/environment/enable_parameters.go +++ b/rest_client_zrok/environment/enable_parameters.go @@ -14,8 +14,6 @@ import ( "github.com/go-openapi/runtime" cr "github.com/go-openapi/runtime/client" "github.com/go-openapi/strfmt" - - "github.com/openziti/zrok/rest_model_zrok" ) // NewEnableParams creates a new EnableParams object, @@ -64,7 +62,7 @@ EnableParams contains all the parameters to send to the API endpoint type EnableParams struct { // Body. - Body *rest_model_zrok.EnableRequest + Body EnableBody timeout time.Duration Context context.Context @@ -120,13 +118,13 @@ func (o *EnableParams) SetHTTPClient(client *http.Client) { } // WithBody adds the body to the enable params -func (o *EnableParams) WithBody(body *rest_model_zrok.EnableRequest) *EnableParams { +func (o *EnableParams) WithBody(body EnableBody) *EnableParams { o.SetBody(body) return o } // SetBody adds the body to the enable params -func (o *EnableParams) SetBody(body *rest_model_zrok.EnableRequest) { +func (o *EnableParams) SetBody(body EnableBody) { o.Body = body } @@ -137,10 +135,8 @@ func (o *EnableParams) WriteToRequest(r runtime.ClientRequest, reg strfmt.Regist return err } var res []error - if o.Body != nil { - if err := r.SetBodyParam(o.Body); err != nil { - return err - } + if err := r.SetBodyParam(o.Body); err != nil { + return err } if len(res) > 0 { diff --git a/rest_client_zrok/environment/enable_responses.go b/rest_client_zrok/environment/enable_responses.go index a79daa5a..e846e122 100644 --- a/rest_client_zrok/environment/enable_responses.go +++ b/rest_client_zrok/environment/enable_responses.go @@ -6,13 +6,13 @@ package environment // Editing this file might prove futile when you re-run the swagger generate command import ( + "context" "fmt" "io" "github.com/go-openapi/runtime" "github.com/go-openapi/strfmt" - - "github.com/openziti/zrok/rest_model_zrok" + "github.com/go-openapi/swag" ) // EnableReader is a Reader for the Enable structure. @@ -63,7 +63,7 @@ EnableCreated describes a response with status code 201, with default header val environment enabled */ type EnableCreated struct { - Payload *rest_model_zrok.EnableResponse + Payload *EnableCreatedBody } // IsSuccess returns true when this enable created response has a 2xx status code @@ -104,13 +104,13 @@ func (o *EnableCreated) String() string { return fmt.Sprintf("[POST /enable][%d] enableCreated %+v", 201, o.Payload) } -func (o *EnableCreated) GetPayload() *rest_model_zrok.EnableResponse { +func (o *EnableCreated) GetPayload() *EnableCreatedBody { return o.Payload } func (o *EnableCreated) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { - o.Payload = new(rest_model_zrok.EnableResponse) + o.Payload = new(EnableCreatedBody) // response payload if err := consumer.Consume(response.Body(), o.Payload); err != nil && err != io.EOF { @@ -287,3 +287,85 @@ func (o *EnableInternalServerError) readResponse(response runtime.ClientResponse return nil } + +/* +EnableBody enable body +swagger:model EnableBody +*/ +type EnableBody struct { + + // description + Description string `json:"description,omitempty"` + + // host + Host string `json:"host,omitempty"` +} + +// Validate validates this enable body +func (o *EnableBody) Validate(formats strfmt.Registry) error { + return nil +} + +// ContextValidate validates this enable body based on context it is used +func (o *EnableBody) ContextValidate(ctx context.Context, formats strfmt.Registry) error { + return nil +} + +// MarshalBinary interface implementation +func (o *EnableBody) MarshalBinary() ([]byte, error) { + if o == nil { + return nil, nil + } + return swag.WriteJSON(o) +} + +// UnmarshalBinary interface implementation +func (o *EnableBody) UnmarshalBinary(b []byte) error { + var res EnableBody + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *o = res + return nil +} + +/* +EnableCreatedBody enable created body +swagger:model EnableCreatedBody +*/ +type EnableCreatedBody struct { + + // cfg + Cfg string `json:"cfg,omitempty"` + + // identity + Identity string `json:"identity,omitempty"` +} + +// Validate validates this enable created body +func (o *EnableCreatedBody) Validate(formats strfmt.Registry) error { + return nil +} + +// ContextValidate validates this enable created body based on context it is used +func (o *EnableCreatedBody) ContextValidate(ctx context.Context, formats strfmt.Registry) error { + return nil +} + +// MarshalBinary interface implementation +func (o *EnableCreatedBody) MarshalBinary() ([]byte, error) { + if o == nil { + return nil, nil + } + return swag.WriteJSON(o) +} + +// UnmarshalBinary interface implementation +func (o *EnableCreatedBody) UnmarshalBinary(b []byte) error { + var res EnableCreatedBody + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *o = res + return nil +} diff --git a/rest_client_zrok/metadata/client_version_check_parameters.go b/rest_client_zrok/metadata/client_version_check_parameters.go new file mode 100644 index 00000000..93beae46 --- /dev/null +++ b/rest_client_zrok/metadata/client_version_check_parameters.go @@ -0,0 +1,146 @@ +// Code generated by go-swagger; DO NOT EDIT. + +package metadata + +// This file was generated by the swagger tool. +// Editing this file might prove futile when you re-run the swagger generate command + +import ( + "context" + "net/http" + "time" + + "github.com/go-openapi/errors" + "github.com/go-openapi/runtime" + cr "github.com/go-openapi/runtime/client" + "github.com/go-openapi/strfmt" +) + +// NewClientVersionCheckParams creates a new ClientVersionCheckParams object, +// with the default timeout for this client. +// +// Default values are not hydrated, since defaults are normally applied by the API server side. +// +// To enforce default values in parameter, use SetDefaults or WithDefaults. +func NewClientVersionCheckParams() *ClientVersionCheckParams { + return &ClientVersionCheckParams{ + timeout: cr.DefaultTimeout, + } +} + +// NewClientVersionCheckParamsWithTimeout creates a new ClientVersionCheckParams object +// with the ability to set a timeout on a request. +func NewClientVersionCheckParamsWithTimeout(timeout time.Duration) *ClientVersionCheckParams { + return &ClientVersionCheckParams{ + timeout: timeout, + } +} + +// NewClientVersionCheckParamsWithContext creates a new ClientVersionCheckParams object +// with the ability to set a context for a request. +func NewClientVersionCheckParamsWithContext(ctx context.Context) *ClientVersionCheckParams { + return &ClientVersionCheckParams{ + Context: ctx, + } +} + +// NewClientVersionCheckParamsWithHTTPClient creates a new ClientVersionCheckParams object +// with the ability to set a custom HTTPClient for a request. +func NewClientVersionCheckParamsWithHTTPClient(client *http.Client) *ClientVersionCheckParams { + return &ClientVersionCheckParams{ + HTTPClient: client, + } +} + +/* +ClientVersionCheckParams contains all the parameters to send to the API endpoint + + for the client version check operation. + + Typically these are written to a http.Request. +*/ +type ClientVersionCheckParams struct { + + // Body. + Body ClientVersionCheckBody + + timeout time.Duration + Context context.Context + HTTPClient *http.Client +} + +// WithDefaults hydrates default values in the client version check params (not the query body). +// +// All values with no default are reset to their zero value. +func (o *ClientVersionCheckParams) WithDefaults() *ClientVersionCheckParams { + o.SetDefaults() + return o +} + +// SetDefaults hydrates default values in the client version check params (not the query body). +// +// All values with no default are reset to their zero value. +func (o *ClientVersionCheckParams) SetDefaults() { + // no default values defined for this parameter +} + +// WithTimeout adds the timeout to the client version check params +func (o *ClientVersionCheckParams) WithTimeout(timeout time.Duration) *ClientVersionCheckParams { + o.SetTimeout(timeout) + return o +} + +// SetTimeout adds the timeout to the client version check params +func (o *ClientVersionCheckParams) SetTimeout(timeout time.Duration) { + o.timeout = timeout +} + +// WithContext adds the context to the client version check params +func (o *ClientVersionCheckParams) WithContext(ctx context.Context) *ClientVersionCheckParams { + o.SetContext(ctx) + return o +} + +// SetContext adds the context to the client version check params +func (o *ClientVersionCheckParams) SetContext(ctx context.Context) { + o.Context = ctx +} + +// WithHTTPClient adds the HTTPClient to the client version check params +func (o *ClientVersionCheckParams) WithHTTPClient(client *http.Client) *ClientVersionCheckParams { + o.SetHTTPClient(client) + return o +} + +// SetHTTPClient adds the HTTPClient to the client version check params +func (o *ClientVersionCheckParams) SetHTTPClient(client *http.Client) { + o.HTTPClient = client +} + +// WithBody adds the body to the client version check params +func (o *ClientVersionCheckParams) WithBody(body ClientVersionCheckBody) *ClientVersionCheckParams { + o.SetBody(body) + return o +} + +// SetBody adds the body to the client version check params +func (o *ClientVersionCheckParams) SetBody(body ClientVersionCheckBody) { + o.Body = body +} + +// WriteToRequest writes these params to a swagger request +func (o *ClientVersionCheckParams) WriteToRequest(r runtime.ClientRequest, reg strfmt.Registry) error { + + if err := r.SetTimeout(o.timeout); err != nil { + return err + } + var res []error + if err := r.SetBodyParam(o.Body); err != nil { + return err + } + + if len(res) > 0 { + return errors.CompositeValidationError(res...) + } + return nil +} diff --git a/rest_client_zrok/metadata/client_version_check_responses.go b/rest_client_zrok/metadata/client_version_check_responses.go new file mode 100644 index 00000000..d43d81eb --- /dev/null +++ b/rest_client_zrok/metadata/client_version_check_responses.go @@ -0,0 +1,201 @@ +// Code generated by go-swagger; DO NOT EDIT. + +package metadata + +// This file was generated by the swagger tool. +// Editing this file might prove futile when you re-run the swagger generate command + +import ( + "context" + "fmt" + "io" + + "github.com/go-openapi/runtime" + "github.com/go-openapi/strfmt" + "github.com/go-openapi/swag" +) + +// ClientVersionCheckReader is a Reader for the ClientVersionCheck structure. +type ClientVersionCheckReader struct { + formats strfmt.Registry +} + +// ReadResponse reads a server response into the received o. +func (o *ClientVersionCheckReader) ReadResponse(response runtime.ClientResponse, consumer runtime.Consumer) (interface{}, error) { + switch response.Code() { + case 200: + result := NewClientVersionCheckOK() + if err := result.readResponse(response, consumer, o.formats); err != nil { + return nil, err + } + return result, nil + case 400: + result := NewClientVersionCheckBadRequest() + if err := result.readResponse(response, consumer, o.formats); err != nil { + return nil, err + } + return nil, result + default: + return nil, runtime.NewAPIError("[POST /version] clientVersionCheck", response, response.Code()) + } +} + +// NewClientVersionCheckOK creates a ClientVersionCheckOK with default headers values +func NewClientVersionCheckOK() *ClientVersionCheckOK { + return &ClientVersionCheckOK{} +} + +/* +ClientVersionCheckOK describes a response with status code 200, with default header values. + +compatible +*/ +type ClientVersionCheckOK struct { +} + +// IsSuccess returns true when this client version check o k response has a 2xx status code +func (o *ClientVersionCheckOK) IsSuccess() bool { + return true +} + +// IsRedirect returns true when this client version check o k response has a 3xx status code +func (o *ClientVersionCheckOK) IsRedirect() bool { + return false +} + +// IsClientError returns true when this client version check o k response has a 4xx status code +func (o *ClientVersionCheckOK) IsClientError() bool { + return false +} + +// IsServerError returns true when this client version check o k response has a 5xx status code +func (o *ClientVersionCheckOK) IsServerError() bool { + return false +} + +// IsCode returns true when this client version check o k response a status code equal to that given +func (o *ClientVersionCheckOK) IsCode(code int) bool { + return code == 200 +} + +// Code gets the status code for the client version check o k response +func (o *ClientVersionCheckOK) Code() int { + return 200 +} + +func (o *ClientVersionCheckOK) Error() string { + return fmt.Sprintf("[POST /version][%d] clientVersionCheckOK ", 200) +} + +func (o *ClientVersionCheckOK) String() string { + return fmt.Sprintf("[POST /version][%d] clientVersionCheckOK ", 200) +} + +func (o *ClientVersionCheckOK) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { + + return nil +} + +// NewClientVersionCheckBadRequest creates a ClientVersionCheckBadRequest with default headers values +func NewClientVersionCheckBadRequest() *ClientVersionCheckBadRequest { + return &ClientVersionCheckBadRequest{} +} + +/* +ClientVersionCheckBadRequest describes a response with status code 400, with default header values. + +not compatible +*/ +type ClientVersionCheckBadRequest struct { + Payload string +} + +// IsSuccess returns true when this client version check bad request response has a 2xx status code +func (o *ClientVersionCheckBadRequest) IsSuccess() bool { + return false +} + +// IsRedirect returns true when this client version check bad request response has a 3xx status code +func (o *ClientVersionCheckBadRequest) IsRedirect() bool { + return false +} + +// IsClientError returns true when this client version check bad request response has a 4xx status code +func (o *ClientVersionCheckBadRequest) IsClientError() bool { + return true +} + +// IsServerError returns true when this client version check bad request response has a 5xx status code +func (o *ClientVersionCheckBadRequest) IsServerError() bool { + return false +} + +// IsCode returns true when this client version check bad request response a status code equal to that given +func (o *ClientVersionCheckBadRequest) IsCode(code int) bool { + return code == 400 +} + +// Code gets the status code for the client version check bad request response +func (o *ClientVersionCheckBadRequest) Code() int { + return 400 +} + +func (o *ClientVersionCheckBadRequest) Error() string { + return fmt.Sprintf("[POST /version][%d] clientVersionCheckBadRequest %+v", 400, o.Payload) +} + +func (o *ClientVersionCheckBadRequest) String() string { + return fmt.Sprintf("[POST /version][%d] clientVersionCheckBadRequest %+v", 400, o.Payload) +} + +func (o *ClientVersionCheckBadRequest) GetPayload() string { + return o.Payload +} + +func (o *ClientVersionCheckBadRequest) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { + + // response payload + if err := consumer.Consume(response.Body(), &o.Payload); err != nil && err != io.EOF { + return err + } + + return nil +} + +/* +ClientVersionCheckBody client version check body +swagger:model ClientVersionCheckBody +*/ +type ClientVersionCheckBody struct { + + // client version + ClientVersion string `json:"clientVersion,omitempty"` +} + +// Validate validates this client version check body +func (o *ClientVersionCheckBody) Validate(formats strfmt.Registry) error { + return nil +} + +// ContextValidate validates this client version check body based on context it is used +func (o *ClientVersionCheckBody) ContextValidate(ctx context.Context, formats strfmt.Registry) error { + return nil +} + +// MarshalBinary interface implementation +func (o *ClientVersionCheckBody) MarshalBinary() ([]byte, error) { + if o == nil { + return nil, nil + } + return swag.WriteJSON(o) +} + +// UnmarshalBinary interface implementation +func (o *ClientVersionCheckBody) UnmarshalBinary(b []byte) error { + var res ClientVersionCheckBody + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *o = res + return nil +} diff --git a/rest_client_zrok/metadata/get_frontend_detail_parameters.go b/rest_client_zrok/metadata/get_frontend_detail_parameters.go index 4ce868af..b713cc3c 100644 --- a/rest_client_zrok/metadata/get_frontend_detail_parameters.go +++ b/rest_client_zrok/metadata/get_frontend_detail_parameters.go @@ -62,8 +62,8 @@ GetFrontendDetailParams contains all the parameters to send to the API endpoint */ type GetFrontendDetailParams struct { - // FeID. - FeID int64 + // FrontendID. + FrontendID int64 timeout time.Duration Context context.Context @@ -118,15 +118,15 @@ func (o *GetFrontendDetailParams) SetHTTPClient(client *http.Client) { o.HTTPClient = client } -// WithFeID adds the feID to the get frontend detail params -func (o *GetFrontendDetailParams) WithFeID(feID int64) *GetFrontendDetailParams { - o.SetFeID(feID) +// WithFrontendID adds the frontendID to the get frontend detail params +func (o *GetFrontendDetailParams) WithFrontendID(frontendID int64) *GetFrontendDetailParams { + o.SetFrontendID(frontendID) return o } -// SetFeID adds the feId to the get frontend detail params -func (o *GetFrontendDetailParams) SetFeID(feID int64) { - o.FeID = feID +// SetFrontendID adds the frontendId to the get frontend detail params +func (o *GetFrontendDetailParams) SetFrontendID(frontendID int64) { + o.FrontendID = frontendID } // WriteToRequest writes these params to a swagger request @@ -137,8 +137,8 @@ func (o *GetFrontendDetailParams) WriteToRequest(r runtime.ClientRequest, reg st } var res []error - // path param feId - if err := r.SetPathParam("feId", swag.FormatInt64(o.FeID)); err != nil { + // path param frontendId + if err := r.SetPathParam("frontendId", swag.FormatInt64(o.FrontendID)); err != nil { return err } diff --git a/rest_client_zrok/metadata/get_frontend_detail_responses.go b/rest_client_zrok/metadata/get_frontend_detail_responses.go index 14020476..70d44977 100644 --- a/rest_client_zrok/metadata/get_frontend_detail_responses.go +++ b/rest_client_zrok/metadata/get_frontend_detail_responses.go @@ -48,7 +48,7 @@ func (o *GetFrontendDetailReader) ReadResponse(response runtime.ClientResponse, } return nil, result default: - return nil, runtime.NewAPIError("[GET /detail/frontend/{feId}] getFrontendDetail", response, response.Code()) + return nil, runtime.NewAPIError("[GET /detail/frontend/{frontendId}] getFrontendDetail", response, response.Code()) } } @@ -97,11 +97,11 @@ func (o *GetFrontendDetailOK) Code() int { } func (o *GetFrontendDetailOK) Error() string { - return fmt.Sprintf("[GET /detail/frontend/{feId}][%d] getFrontendDetailOK %+v", 200, o.Payload) + return fmt.Sprintf("[GET /detail/frontend/{frontendId}][%d] getFrontendDetailOK %+v", 200, o.Payload) } func (o *GetFrontendDetailOK) String() string { - return fmt.Sprintf("[GET /detail/frontend/{feId}][%d] getFrontendDetailOK %+v", 200, o.Payload) + return fmt.Sprintf("[GET /detail/frontend/{frontendId}][%d] getFrontendDetailOK %+v", 200, o.Payload) } func (o *GetFrontendDetailOK) GetPayload() *rest_model_zrok.Frontend { @@ -164,11 +164,11 @@ func (o *GetFrontendDetailUnauthorized) Code() int { } func (o *GetFrontendDetailUnauthorized) Error() string { - return fmt.Sprintf("[GET /detail/frontend/{feId}][%d] getFrontendDetailUnauthorized ", 401) + return fmt.Sprintf("[GET /detail/frontend/{frontendId}][%d] getFrontendDetailUnauthorized ", 401) } func (o *GetFrontendDetailUnauthorized) String() string { - return fmt.Sprintf("[GET /detail/frontend/{feId}][%d] getFrontendDetailUnauthorized ", 401) + return fmt.Sprintf("[GET /detail/frontend/{frontendId}][%d] getFrontendDetailUnauthorized ", 401) } func (o *GetFrontendDetailUnauthorized) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { @@ -220,11 +220,11 @@ func (o *GetFrontendDetailNotFound) Code() int { } func (o *GetFrontendDetailNotFound) Error() string { - return fmt.Sprintf("[GET /detail/frontend/{feId}][%d] getFrontendDetailNotFound ", 404) + return fmt.Sprintf("[GET /detail/frontend/{frontendId}][%d] getFrontendDetailNotFound ", 404) } func (o *GetFrontendDetailNotFound) String() string { - return fmt.Sprintf("[GET /detail/frontend/{feId}][%d] getFrontendDetailNotFound ", 404) + return fmt.Sprintf("[GET /detail/frontend/{frontendId}][%d] getFrontendDetailNotFound ", 404) } func (o *GetFrontendDetailNotFound) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { @@ -276,11 +276,11 @@ func (o *GetFrontendDetailInternalServerError) Code() int { } func (o *GetFrontendDetailInternalServerError) Error() string { - return fmt.Sprintf("[GET /detail/frontend/{feId}][%d] getFrontendDetailInternalServerError ", 500) + return fmt.Sprintf("[GET /detail/frontend/{frontendId}][%d] getFrontendDetailInternalServerError ", 500) } func (o *GetFrontendDetailInternalServerError) String() string { - return fmt.Sprintf("[GET /detail/frontend/{feId}][%d] getFrontendDetailInternalServerError ", 500) + return fmt.Sprintf("[GET /detail/frontend/{frontendId}][%d] getFrontendDetailInternalServerError ", 500) } func (o *GetFrontendDetailInternalServerError) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { diff --git a/rest_client_zrok/metadata/get_share_detail_parameters.go b/rest_client_zrok/metadata/get_share_detail_parameters.go index 6920c02d..8d23e72a 100644 --- a/rest_client_zrok/metadata/get_share_detail_parameters.go +++ b/rest_client_zrok/metadata/get_share_detail_parameters.go @@ -61,8 +61,8 @@ GetShareDetailParams contains all the parameters to send to the API endpoint */ type GetShareDetailParams struct { - // ShrToken. - ShrToken string + // ShareToken. + ShareToken string timeout time.Duration Context context.Context @@ -117,15 +117,15 @@ func (o *GetShareDetailParams) SetHTTPClient(client *http.Client) { o.HTTPClient = client } -// WithShrToken adds the shrToken to the get share detail params -func (o *GetShareDetailParams) WithShrToken(shrToken string) *GetShareDetailParams { - o.SetShrToken(shrToken) +// WithShareToken adds the shareToken to the get share detail params +func (o *GetShareDetailParams) WithShareToken(shareToken string) *GetShareDetailParams { + o.SetShareToken(shareToken) return o } -// SetShrToken adds the shrToken to the get share detail params -func (o *GetShareDetailParams) SetShrToken(shrToken string) { - o.ShrToken = shrToken +// SetShareToken adds the shareToken to the get share detail params +func (o *GetShareDetailParams) SetShareToken(shareToken string) { + o.ShareToken = shareToken } // WriteToRequest writes these params to a swagger request @@ -136,8 +136,8 @@ func (o *GetShareDetailParams) WriteToRequest(r runtime.ClientRequest, reg strfm } var res []error - // path param shrToken - if err := r.SetPathParam("shrToken", o.ShrToken); err != nil { + // path param shareToken + if err := r.SetPathParam("shareToken", o.ShareToken); err != nil { return err } diff --git a/rest_client_zrok/metadata/get_share_detail_responses.go b/rest_client_zrok/metadata/get_share_detail_responses.go index 420efde5..f319df42 100644 --- a/rest_client_zrok/metadata/get_share_detail_responses.go +++ b/rest_client_zrok/metadata/get_share_detail_responses.go @@ -48,7 +48,7 @@ func (o *GetShareDetailReader) ReadResponse(response runtime.ClientResponse, con } return nil, result default: - return nil, runtime.NewAPIError("[GET /detail/share/{shrToken}] getShareDetail", response, response.Code()) + return nil, runtime.NewAPIError("[GET /detail/share/{shareToken}] getShareDetail", response, response.Code()) } } @@ -97,11 +97,11 @@ func (o *GetShareDetailOK) Code() int { } func (o *GetShareDetailOK) Error() string { - return fmt.Sprintf("[GET /detail/share/{shrToken}][%d] getShareDetailOK %+v", 200, o.Payload) + return fmt.Sprintf("[GET /detail/share/{shareToken}][%d] getShareDetailOK %+v", 200, o.Payload) } func (o *GetShareDetailOK) String() string { - return fmt.Sprintf("[GET /detail/share/{shrToken}][%d] getShareDetailOK %+v", 200, o.Payload) + return fmt.Sprintf("[GET /detail/share/{shareToken}][%d] getShareDetailOK %+v", 200, o.Payload) } func (o *GetShareDetailOK) GetPayload() *rest_model_zrok.Share { @@ -164,11 +164,11 @@ func (o *GetShareDetailUnauthorized) Code() int { } func (o *GetShareDetailUnauthorized) Error() string { - return fmt.Sprintf("[GET /detail/share/{shrToken}][%d] getShareDetailUnauthorized ", 401) + return fmt.Sprintf("[GET /detail/share/{shareToken}][%d] getShareDetailUnauthorized ", 401) } func (o *GetShareDetailUnauthorized) String() string { - return fmt.Sprintf("[GET /detail/share/{shrToken}][%d] getShareDetailUnauthorized ", 401) + return fmt.Sprintf("[GET /detail/share/{shareToken}][%d] getShareDetailUnauthorized ", 401) } func (o *GetShareDetailUnauthorized) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { @@ -220,11 +220,11 @@ func (o *GetShareDetailNotFound) Code() int { } func (o *GetShareDetailNotFound) Error() string { - return fmt.Sprintf("[GET /detail/share/{shrToken}][%d] getShareDetailNotFound ", 404) + return fmt.Sprintf("[GET /detail/share/{shareToken}][%d] getShareDetailNotFound ", 404) } func (o *GetShareDetailNotFound) String() string { - return fmt.Sprintf("[GET /detail/share/{shrToken}][%d] getShareDetailNotFound ", 404) + return fmt.Sprintf("[GET /detail/share/{shareToken}][%d] getShareDetailNotFound ", 404) } func (o *GetShareDetailNotFound) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { @@ -276,11 +276,11 @@ func (o *GetShareDetailInternalServerError) Code() int { } func (o *GetShareDetailInternalServerError) Error() string { - return fmt.Sprintf("[GET /detail/share/{shrToken}][%d] getShareDetailInternalServerError ", 500) + return fmt.Sprintf("[GET /detail/share/{shareToken}][%d] getShareDetailInternalServerError ", 500) } func (o *GetShareDetailInternalServerError) String() string { - return fmt.Sprintf("[GET /detail/share/{shrToken}][%d] getShareDetailInternalServerError ", 500) + return fmt.Sprintf("[GET /detail/share/{shareToken}][%d] getShareDetailInternalServerError ", 500) } func (o *GetShareDetailInternalServerError) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { diff --git a/rest_client_zrok/metadata/get_share_metrics_parameters.go b/rest_client_zrok/metadata/get_share_metrics_parameters.go index 96f5ac62..23526af1 100644 --- a/rest_client_zrok/metadata/get_share_metrics_parameters.go +++ b/rest_client_zrok/metadata/get_share_metrics_parameters.go @@ -64,8 +64,8 @@ type GetShareMetricsParams struct { // Duration. Duration *string - // ShrToken. - ShrToken string + // ShareToken. + ShareToken string timeout time.Duration Context context.Context @@ -131,15 +131,15 @@ func (o *GetShareMetricsParams) SetDuration(duration *string) { o.Duration = duration } -// WithShrToken adds the shrToken to the get share metrics params -func (o *GetShareMetricsParams) WithShrToken(shrToken string) *GetShareMetricsParams { - o.SetShrToken(shrToken) +// WithShareToken adds the shareToken to the get share metrics params +func (o *GetShareMetricsParams) WithShareToken(shareToken string) *GetShareMetricsParams { + o.SetShareToken(shareToken) return o } -// SetShrToken adds the shrToken to the get share metrics params -func (o *GetShareMetricsParams) SetShrToken(shrToken string) { - o.ShrToken = shrToken +// SetShareToken adds the shareToken to the get share metrics params +func (o *GetShareMetricsParams) SetShareToken(shareToken string) { + o.ShareToken = shareToken } // WriteToRequest writes these params to a swagger request @@ -167,8 +167,8 @@ func (o *GetShareMetricsParams) WriteToRequest(r runtime.ClientRequest, reg strf } } - // path param shrToken - if err := r.SetPathParam("shrToken", o.ShrToken); err != nil { + // path param shareToken + if err := r.SetPathParam("shareToken", o.ShareToken); err != nil { return err } diff --git a/rest_client_zrok/metadata/get_share_metrics_responses.go b/rest_client_zrok/metadata/get_share_metrics_responses.go index 1a189a63..242760ef 100644 --- a/rest_client_zrok/metadata/get_share_metrics_responses.go +++ b/rest_client_zrok/metadata/get_share_metrics_responses.go @@ -48,7 +48,7 @@ func (o *GetShareMetricsReader) ReadResponse(response runtime.ClientResponse, co } return nil, result default: - return nil, runtime.NewAPIError("[GET /metrics/share/{shrToken}] getShareMetrics", response, response.Code()) + return nil, runtime.NewAPIError("[GET /metrics/share/{shareToken}] getShareMetrics", response, response.Code()) } } @@ -97,11 +97,11 @@ func (o *GetShareMetricsOK) Code() int { } func (o *GetShareMetricsOK) Error() string { - return fmt.Sprintf("[GET /metrics/share/{shrToken}][%d] getShareMetricsOK %+v", 200, o.Payload) + return fmt.Sprintf("[GET /metrics/share/{shareToken}][%d] getShareMetricsOK %+v", 200, o.Payload) } func (o *GetShareMetricsOK) String() string { - return fmt.Sprintf("[GET /metrics/share/{shrToken}][%d] getShareMetricsOK %+v", 200, o.Payload) + return fmt.Sprintf("[GET /metrics/share/{shareToken}][%d] getShareMetricsOK %+v", 200, o.Payload) } func (o *GetShareMetricsOK) GetPayload() *rest_model_zrok.Metrics { @@ -164,11 +164,11 @@ func (o *GetShareMetricsBadRequest) Code() int { } func (o *GetShareMetricsBadRequest) Error() string { - return fmt.Sprintf("[GET /metrics/share/{shrToken}][%d] getShareMetricsBadRequest ", 400) + return fmt.Sprintf("[GET /metrics/share/{shareToken}][%d] getShareMetricsBadRequest ", 400) } func (o *GetShareMetricsBadRequest) String() string { - return fmt.Sprintf("[GET /metrics/share/{shrToken}][%d] getShareMetricsBadRequest ", 400) + return fmt.Sprintf("[GET /metrics/share/{shareToken}][%d] getShareMetricsBadRequest ", 400) } func (o *GetShareMetricsBadRequest) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { @@ -220,11 +220,11 @@ func (o *GetShareMetricsUnauthorized) Code() int { } func (o *GetShareMetricsUnauthorized) Error() string { - return fmt.Sprintf("[GET /metrics/share/{shrToken}][%d] getShareMetricsUnauthorized ", 401) + return fmt.Sprintf("[GET /metrics/share/{shareToken}][%d] getShareMetricsUnauthorized ", 401) } func (o *GetShareMetricsUnauthorized) String() string { - return fmt.Sprintf("[GET /metrics/share/{shrToken}][%d] getShareMetricsUnauthorized ", 401) + return fmt.Sprintf("[GET /metrics/share/{shareToken}][%d] getShareMetricsUnauthorized ", 401) } func (o *GetShareMetricsUnauthorized) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { @@ -276,11 +276,11 @@ func (o *GetShareMetricsInternalServerError) Code() int { } func (o *GetShareMetricsInternalServerError) Error() string { - return fmt.Sprintf("[GET /metrics/share/{shrToken}][%d] getShareMetricsInternalServerError ", 500) + return fmt.Sprintf("[GET /metrics/share/{shareToken}][%d] getShareMetricsInternalServerError ", 500) } func (o *GetShareMetricsInternalServerError) String() string { - return fmt.Sprintf("[GET /metrics/share/{shrToken}][%d] getShareMetricsInternalServerError ", 500) + return fmt.Sprintf("[GET /metrics/share/{shareToken}][%d] getShareMetricsInternalServerError ", 500) } func (o *GetShareMetricsInternalServerError) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { diff --git a/rest_client_zrok/metadata/get_sparklines_parameters.go b/rest_client_zrok/metadata/get_sparklines_parameters.go new file mode 100644 index 00000000..562c1ef6 --- /dev/null +++ b/rest_client_zrok/metadata/get_sparklines_parameters.go @@ -0,0 +1,146 @@ +// Code generated by go-swagger; DO NOT EDIT. + +package metadata + +// This file was generated by the swagger tool. +// Editing this file might prove futile when you re-run the swagger generate command + +import ( + "context" + "net/http" + "time" + + "github.com/go-openapi/errors" + "github.com/go-openapi/runtime" + cr "github.com/go-openapi/runtime/client" + "github.com/go-openapi/strfmt" +) + +// NewGetSparklinesParams creates a new GetSparklinesParams object, +// with the default timeout for this client. +// +// Default values are not hydrated, since defaults are normally applied by the API server side. +// +// To enforce default values in parameter, use SetDefaults or WithDefaults. +func NewGetSparklinesParams() *GetSparklinesParams { + return &GetSparklinesParams{ + timeout: cr.DefaultTimeout, + } +} + +// NewGetSparklinesParamsWithTimeout creates a new GetSparklinesParams object +// with the ability to set a timeout on a request. +func NewGetSparklinesParamsWithTimeout(timeout time.Duration) *GetSparklinesParams { + return &GetSparklinesParams{ + timeout: timeout, + } +} + +// NewGetSparklinesParamsWithContext creates a new GetSparklinesParams object +// with the ability to set a context for a request. +func NewGetSparklinesParamsWithContext(ctx context.Context) *GetSparklinesParams { + return &GetSparklinesParams{ + Context: ctx, + } +} + +// NewGetSparklinesParamsWithHTTPClient creates a new GetSparklinesParams object +// with the ability to set a custom HTTPClient for a request. +func NewGetSparklinesParamsWithHTTPClient(client *http.Client) *GetSparklinesParams { + return &GetSparklinesParams{ + HTTPClient: client, + } +} + +/* +GetSparklinesParams contains all the parameters to send to the API endpoint + + for the get sparklines operation. + + Typically these are written to a http.Request. +*/ +type GetSparklinesParams struct { + + // Body. + Body GetSparklinesBody + + timeout time.Duration + Context context.Context + HTTPClient *http.Client +} + +// WithDefaults hydrates default values in the get sparklines params (not the query body). +// +// All values with no default are reset to their zero value. +func (o *GetSparklinesParams) WithDefaults() *GetSparklinesParams { + o.SetDefaults() + return o +} + +// SetDefaults hydrates default values in the get sparklines params (not the query body). +// +// All values with no default are reset to their zero value. +func (o *GetSparklinesParams) SetDefaults() { + // no default values defined for this parameter +} + +// WithTimeout adds the timeout to the get sparklines params +func (o *GetSparklinesParams) WithTimeout(timeout time.Duration) *GetSparklinesParams { + o.SetTimeout(timeout) + return o +} + +// SetTimeout adds the timeout to the get sparklines params +func (o *GetSparklinesParams) SetTimeout(timeout time.Duration) { + o.timeout = timeout +} + +// WithContext adds the context to the get sparklines params +func (o *GetSparklinesParams) WithContext(ctx context.Context) *GetSparklinesParams { + o.SetContext(ctx) + return o +} + +// SetContext adds the context to the get sparklines params +func (o *GetSparklinesParams) SetContext(ctx context.Context) { + o.Context = ctx +} + +// WithHTTPClient adds the HTTPClient to the get sparklines params +func (o *GetSparklinesParams) WithHTTPClient(client *http.Client) *GetSparklinesParams { + o.SetHTTPClient(client) + return o +} + +// SetHTTPClient adds the HTTPClient to the get sparklines params +func (o *GetSparklinesParams) SetHTTPClient(client *http.Client) { + o.HTTPClient = client +} + +// WithBody adds the body to the get sparklines params +func (o *GetSparklinesParams) WithBody(body GetSparklinesBody) *GetSparklinesParams { + o.SetBody(body) + return o +} + +// SetBody adds the body to the get sparklines params +func (o *GetSparklinesParams) SetBody(body GetSparklinesBody) { + o.Body = body +} + +// WriteToRequest writes these params to a swagger request +func (o *GetSparklinesParams) WriteToRequest(r runtime.ClientRequest, reg strfmt.Registry) error { + + if err := r.SetTimeout(o.timeout); err != nil { + return err + } + var res []error + if err := r.SetBodyParam(o.Body); err != nil { + return err + } + + if len(res) > 0 { + return errors.CompositeValidationError(res...) + } + return nil +} diff --git a/rest_client_zrok/metadata/get_sparklines_responses.go b/rest_client_zrok/metadata/get_sparklines_responses.go new file mode 100644 index 00000000..65747107 --- /dev/null +++ b/rest_client_zrok/metadata/get_sparklines_responses.go @@ -0,0 +1,382 @@ +// Code generated by go-swagger; DO NOT EDIT. + +package metadata + +// This file was generated by the swagger tool. +// Editing this file might prove futile when you re-run the swagger generate command + +import ( + "context" + "fmt" + "io" + "strconv" + + "github.com/go-openapi/errors" + "github.com/go-openapi/runtime" + "github.com/go-openapi/strfmt" + "github.com/go-openapi/swag" + + "github.com/openziti/zrok/rest_model_zrok" +) + +// GetSparklinesReader is a Reader for the GetSparklines structure. +type GetSparklinesReader struct { + formats strfmt.Registry +} + +// ReadResponse reads a server response into the received o. +func (o *GetSparklinesReader) ReadResponse(response runtime.ClientResponse, consumer runtime.Consumer) (interface{}, error) { + switch response.Code() { + case 200: + result := NewGetSparklinesOK() + if err := result.readResponse(response, consumer, o.formats); err != nil { + return nil, err + } + return result, nil + case 401: + result := NewGetSparklinesUnauthorized() + if err := result.readResponse(response, consumer, o.formats); err != nil { + return nil, err + } + return nil, result + case 500: + result := NewGetSparklinesInternalServerError() + if err := result.readResponse(response, consumer, o.formats); err != nil { + return nil, err + } + return nil, result + default: + return nil, runtime.NewAPIError("[POST /sparklines] getSparklines", response, response.Code()) + } +} + +// NewGetSparklinesOK creates a GetSparklinesOK with default headers values +func NewGetSparklinesOK() *GetSparklinesOK { + return &GetSparklinesOK{} +} + +/* +GetSparklinesOK describes a response with status code 200, with default header values. + +sparklines data +*/ +type GetSparklinesOK struct { + Payload *GetSparklinesOKBody +} + +// IsSuccess returns true when this get sparklines o k response has a 2xx status code +func (o *GetSparklinesOK) IsSuccess() bool { + return true +} + +// IsRedirect returns true when this get sparklines o k response has a 3xx status code +func (o *GetSparklinesOK) IsRedirect() bool { + return false +} + +// IsClientError returns true when this get sparklines o k response has a 4xx status code +func (o *GetSparklinesOK) IsClientError() bool { + return false +} + +// IsServerError returns true when this get sparklines o k response has a 5xx status code +func (o *GetSparklinesOK) IsServerError() bool { + return false +} + +// IsCode returns true when this get sparklines o k response a status code equal to that given +func (o *GetSparklinesOK) IsCode(code int) bool { + return code == 200 +} + +// Code gets the status code for the get sparklines o k response +func (o *GetSparklinesOK) Code() int { + return 200 +} + +func (o *GetSparklinesOK) Error() string { + return fmt.Sprintf("[POST /sparklines][%d] getSparklinesOK %+v", 200, o.Payload) +} + +func (o *GetSparklinesOK) String() string { + return fmt.Sprintf("[POST /sparklines][%d] getSparklinesOK %+v", 200, o.Payload) +} + +func (o *GetSparklinesOK) GetPayload() *GetSparklinesOKBody { + return o.Payload +} + +func (o *GetSparklinesOK) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { + + o.Payload = new(GetSparklinesOKBody) + + // response payload + if err := consumer.Consume(response.Body(), o.Payload); err != nil && err != io.EOF { + return err + } + + return nil +} + +// NewGetSparklinesUnauthorized creates a GetSparklinesUnauthorized with default headers values +func NewGetSparklinesUnauthorized() *GetSparklinesUnauthorized { + return &GetSparklinesUnauthorized{} +} + +/* +GetSparklinesUnauthorized describes a response with status code 401, with default header values. + +unauthorized +*/ +type GetSparklinesUnauthorized struct { +} + +// IsSuccess returns true when this get sparklines unauthorized response has a 2xx status code +func (o *GetSparklinesUnauthorized) IsSuccess() bool { + return false +} + +// IsRedirect returns true when this get sparklines unauthorized response has a 3xx status code +func (o *GetSparklinesUnauthorized) IsRedirect() bool { + return false +} + +// IsClientError returns true when this get sparklines unauthorized response has a 4xx status code +func (o *GetSparklinesUnauthorized) IsClientError() bool { + return true +} + +// IsServerError returns true when this get sparklines unauthorized response has a 5xx status code +func (o *GetSparklinesUnauthorized) IsServerError() bool { + return false +} + +// IsCode returns true when this get sparklines unauthorized response a status code equal to that given +func (o *GetSparklinesUnauthorized) IsCode(code int) bool { + return code == 401 +} + +// Code gets the status code for the get sparklines unauthorized response +func (o *GetSparklinesUnauthorized) Code() int { + return 401 +} + +func (o *GetSparklinesUnauthorized) Error() string { + return fmt.Sprintf("[POST /sparklines][%d] getSparklinesUnauthorized ", 401) +} + +func (o *GetSparklinesUnauthorized) String() string { + return fmt.Sprintf("[POST /sparklines][%d] getSparklinesUnauthorized ", 401) +} + +func (o *GetSparklinesUnauthorized) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { + + return nil +} + +// NewGetSparklinesInternalServerError creates a GetSparklinesInternalServerError with default headers values +func NewGetSparklinesInternalServerError() *GetSparklinesInternalServerError { + return &GetSparklinesInternalServerError{} +} + +/* +GetSparklinesInternalServerError describes a response with status code 500, with default header values. + +internal server error +*/ +type GetSparklinesInternalServerError struct { +} + +// IsSuccess returns true when this get sparklines internal server error response has a 2xx status code +func (o *GetSparklinesInternalServerError) IsSuccess() bool { + return false +} + +// IsRedirect returns true when this get sparklines internal server error response has a 3xx status code +func (o *GetSparklinesInternalServerError) IsRedirect() bool { + return false +} + +// IsClientError returns true when this get sparklines internal server error response has a 4xx status code +func (o *GetSparklinesInternalServerError) IsClientError() bool { + return false +} + +// IsServerError returns true when this get sparklines internal server error response has a 5xx status code +func (o *GetSparklinesInternalServerError) IsServerError() bool { + return true +} + +// IsCode returns true when this get sparklines internal server error response a status code equal to that given +func (o *GetSparklinesInternalServerError) IsCode(code int) bool { + return code == 500 +} + +// Code gets the status code for the get sparklines internal server error response +func (o *GetSparklinesInternalServerError) Code() int { + return 500 +} + +func (o *GetSparklinesInternalServerError) Error() string { + return fmt.Sprintf("[POST /sparklines][%d] getSparklinesInternalServerError ", 500) +} + +func (o *GetSparklinesInternalServerError) String() string { + return fmt.Sprintf("[POST /sparklines][%d] getSparklinesInternalServerError ", 500) +} + +func (o *GetSparklinesInternalServerError) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { + + return nil +} + +/* +GetSparklinesBody get sparklines body +swagger:model GetSparklinesBody +*/ +type GetSparklinesBody struct { + + // account + Account bool `json:"account,omitempty"` + + // environments + Environments []string `json:"environments"` + + // shares + Shares []string `json:"shares"` +} + +// Validate validates this get sparklines body +func (o *GetSparklinesBody) Validate(formats strfmt.Registry) error { + return nil +} + +// ContextValidate validates this get sparklines body based on context it is used +func (o *GetSparklinesBody) ContextValidate(ctx context.Context, formats strfmt.Registry) error { + return nil +} + +// MarshalBinary interface implementation +func (o *GetSparklinesBody) MarshalBinary() ([]byte, error) { + if o == nil { + return nil, nil + } + return swag.WriteJSON(o) +} + +// UnmarshalBinary interface implementation +func (o *GetSparklinesBody) UnmarshalBinary(b []byte) error { + var res GetSparklinesBody + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *o = res + return nil +} + +/* +GetSparklinesOKBody get sparklines o k body +swagger:model GetSparklinesOKBody +*/ +type GetSparklinesOKBody struct { + + // sparklines + Sparklines []*rest_model_zrok.Metrics `json:"sparklines"` +} + +// Validate validates this get sparklines o k body +func (o *GetSparklinesOKBody) Validate(formats strfmt.Registry) error { + var res []error + + if err := o.validateSparklines(formats); err != nil { + res = append(res, err) + } + + if len(res) > 0 { + return errors.CompositeValidationError(res...) + } + return nil +} + +func (o *GetSparklinesOKBody) validateSparklines(formats strfmt.Registry) error { + if swag.IsZero(o.Sparklines) { // not required + return nil + } + + for i := 0; i < len(o.Sparklines); i++ { + if swag.IsZero(o.Sparklines[i]) { // not required + continue + } + + if o.Sparklines[i] != nil { + if err := o.Sparklines[i].Validate(formats); err != nil { + if ve, ok := err.(*errors.Validation); ok { + return ve.ValidateName("getSparklinesOK" + "." + "sparklines" + "." + strconv.Itoa(i)) + } else if ce, ok := err.(*errors.CompositeError); ok { + return ce.ValidateName("getSparklinesOK" + "." + "sparklines" + "." + strconv.Itoa(i)) + } + return err + } + } + + } + + return nil +} + +// ContextValidate validate this get sparklines o k body based on the context it is used +func (o *GetSparklinesOKBody) ContextValidate(ctx context.Context, formats strfmt.Registry) error { + var res []error + + if err := o.contextValidateSparklines(ctx, formats); err != nil { + res = append(res, err) + } + + if len(res) > 0 { + return errors.CompositeValidationError(res...) + } + return nil +} + +func (o *GetSparklinesOKBody) contextValidateSparklines(ctx context.Context, formats strfmt.Registry) error { + + for i := 0; i < len(o.Sparklines); i++ { + + if o.Sparklines[i] != nil { + + if swag.IsZero(o.Sparklines[i]) { // not required + return nil + } + + if err := o.Sparklines[i].ContextValidate(ctx, formats); err != nil { + if ve, ok := err.(*errors.Validation); ok { + return ve.ValidateName("getSparklinesOK" + "." + "sparklines" + "." + strconv.Itoa(i)) + } else if ce, ok := err.(*errors.CompositeError); ok { + return ce.ValidateName("getSparklinesOK" + "." + "sparklines" + "." + strconv.Itoa(i)) + } + return err + } + } + + } + + return nil +} + +// MarshalBinary interface implementation +func (o *GetSparklinesOKBody) MarshalBinary() ([]byte, error) { + if o == nil { + return nil, nil + } + return swag.WriteJSON(o) +} + +// UnmarshalBinary interface implementation +func (o *GetSparklinesOKBody) UnmarshalBinary(b []byte) error { + var res GetSparklinesOKBody + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *o = res + return nil +} diff --git a/rest_client_zrok/metadata/list_members_parameters.go b/rest_client_zrok/metadata/list_members_parameters.go deleted file mode 100644 index 18d3ab5a..00000000 --- a/rest_client_zrok/metadata/list_members_parameters.go +++ /dev/null @@ -1,148 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -package metadata - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - "net/http" - "time" - - "github.com/go-openapi/errors" - "github.com/go-openapi/runtime" - cr "github.com/go-openapi/runtime/client" - "github.com/go-openapi/strfmt" -) - -// NewListMembersParams creates a new ListMembersParams object, -// with the default timeout for this client. -// -// Default values are not hydrated, since defaults are normally applied by the API server side. -// -// To enforce default values in parameter, use SetDefaults or WithDefaults. -func NewListMembersParams() *ListMembersParams { - return &ListMembersParams{ - timeout: cr.DefaultTimeout, - } -} - -// NewListMembersParamsWithTimeout creates a new ListMembersParams object -// with the ability to set a timeout on a request. -func NewListMembersParamsWithTimeout(timeout time.Duration) *ListMembersParams { - return &ListMembersParams{ - timeout: timeout, - } -} - -// NewListMembersParamsWithContext creates a new ListMembersParams object -// with the ability to set a context for a request. -func NewListMembersParamsWithContext(ctx context.Context) *ListMembersParams { - return &ListMembersParams{ - Context: ctx, - } -} - -// NewListMembersParamsWithHTTPClient creates a new ListMembersParams object -// with the ability to set a custom HTTPClient for a request. -func NewListMembersParamsWithHTTPClient(client *http.Client) *ListMembersParams { - return &ListMembersParams{ - HTTPClient: client, - } -} - -/* -ListMembersParams contains all the parameters to send to the API endpoint - - for the list members operation. - - Typically these are written to a http.Request. -*/ -type ListMembersParams struct { - - // OrganizationToken. - OrganizationToken string - - timeout time.Duration - Context context.Context - HTTPClient *http.Client -} - -// WithDefaults hydrates default values in the list members params (not the query body). -// -// All values with no default are reset to their zero value. -func (o *ListMembersParams) WithDefaults() *ListMembersParams { - o.SetDefaults() - return o -} - -// SetDefaults hydrates default values in the list members params (not the query body). -// -// All values with no default are reset to their zero value. -func (o *ListMembersParams) SetDefaults() { - // no default values defined for this parameter -} - -// WithTimeout adds the timeout to the list members params -func (o *ListMembersParams) WithTimeout(timeout time.Duration) *ListMembersParams { - o.SetTimeout(timeout) - return o -} - -// SetTimeout adds the timeout to the list members params -func (o *ListMembersParams) SetTimeout(timeout time.Duration) { - o.timeout = timeout -} - -// WithContext adds the context to the list members params -func (o *ListMembersParams) WithContext(ctx context.Context) *ListMembersParams { - o.SetContext(ctx) - return o -} - -// SetContext adds the context to the list members params -func (o *ListMembersParams) SetContext(ctx context.Context) { - o.Context = ctx -} - -// WithHTTPClient adds the HTTPClient to the list members params -func (o *ListMembersParams) WithHTTPClient(client *http.Client) *ListMembersParams { - o.SetHTTPClient(client) - return o -} - -// SetHTTPClient adds the HTTPClient to the list members params -func (o *ListMembersParams) SetHTTPClient(client *http.Client) { - o.HTTPClient = client -} - -// WithOrganizationToken adds the organizationToken to the list members params -func (o *ListMembersParams) WithOrganizationToken(organizationToken string) *ListMembersParams { - o.SetOrganizationToken(organizationToken) - return o -} - -// SetOrganizationToken adds the organizationToken to the list members params -func (o *ListMembersParams) SetOrganizationToken(organizationToken string) { - o.OrganizationToken = organizationToken -} - -// WriteToRequest writes these params to a swagger request -func (o *ListMembersParams) WriteToRequest(r runtime.ClientRequest, reg strfmt.Registry) error { - - if err := r.SetTimeout(o.timeout); err != nil { - return err - } - var res []error - - // path param organizationToken - if err := r.SetPathParam("organizationToken", o.OrganizationToken); err != nil { - return err - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} diff --git a/rest_client_zrok/metadata/list_members_responses.go b/rest_client_zrok/metadata/list_members_responses.go deleted file mode 100644 index 0086f112..00000000 --- a/rest_client_zrok/metadata/list_members_responses.go +++ /dev/null @@ -1,377 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -package metadata - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - "fmt" - "io" - "strconv" - - "github.com/go-openapi/errors" - "github.com/go-openapi/runtime" - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// ListMembersReader is a Reader for the ListMembers structure. -type ListMembersReader struct { - formats strfmt.Registry -} - -// ReadResponse reads a server response into the received o. -func (o *ListMembersReader) ReadResponse(response runtime.ClientResponse, consumer runtime.Consumer) (interface{}, error) { - switch response.Code() { - case 200: - result := NewListMembersOK() - if err := result.readResponse(response, consumer, o.formats); err != nil { - return nil, err - } - return result, nil - case 404: - result := NewListMembersNotFound() - if err := result.readResponse(response, consumer, o.formats); err != nil { - return nil, err - } - return nil, result - case 500: - result := NewListMembersInternalServerError() - if err := result.readResponse(response, consumer, o.formats); err != nil { - return nil, err - } - return nil, result - default: - return nil, runtime.NewAPIError("[GET /members/{organizationToken}] listMembers", response, response.Code()) - } -} - -// NewListMembersOK creates a ListMembersOK with default headers values -func NewListMembersOK() *ListMembersOK { - return &ListMembersOK{} -} - -/* -ListMembersOK describes a response with status code 200, with default header values. - -ok -*/ -type ListMembersOK struct { - Payload *ListMembersOKBody -} - -// IsSuccess returns true when this list members o k response has a 2xx status code -func (o *ListMembersOK) IsSuccess() bool { - return true -} - -// IsRedirect returns true when this list members o k response has a 3xx status code -func (o *ListMembersOK) IsRedirect() bool { - return false -} - -// IsClientError returns true when this list members o k response has a 4xx status code -func (o *ListMembersOK) IsClientError() bool { - return false -} - -// IsServerError returns true when this list members o k response has a 5xx status code -func (o *ListMembersOK) IsServerError() bool { - return false -} - -// IsCode returns true when this list members o k response a status code equal to that given -func (o *ListMembersOK) IsCode(code int) bool { - return code == 200 -} - -// Code gets the status code for the list members o k response -func (o *ListMembersOK) Code() int { - return 200 -} - -func (o *ListMembersOK) Error() string { - return fmt.Sprintf("[GET /members/{organizationToken}][%d] listMembersOK %+v", 200, o.Payload) -} - -func (o *ListMembersOK) String() string { - return fmt.Sprintf("[GET /members/{organizationToken}][%d] listMembersOK %+v", 200, o.Payload) -} - -func (o *ListMembersOK) GetPayload() *ListMembersOKBody { - return o.Payload -} - -func (o *ListMembersOK) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { - - o.Payload = new(ListMembersOKBody) - - // response payload - if err := consumer.Consume(response.Body(), o.Payload); err != nil && err != io.EOF { - return err - } - - return nil -} - -// NewListMembersNotFound creates a ListMembersNotFound with default headers values -func NewListMembersNotFound() *ListMembersNotFound { - return &ListMembersNotFound{} -} - -/* -ListMembersNotFound describes a response with status code 404, with default header values. - -not found -*/ -type ListMembersNotFound struct { -} - -// IsSuccess returns true when this list members not found response has a 2xx status code -func (o *ListMembersNotFound) IsSuccess() bool { - return false -} - -// IsRedirect returns true when this list members not found response has a 3xx status code -func (o *ListMembersNotFound) IsRedirect() bool { - return false -} - -// IsClientError returns true when this list members not found response has a 4xx status code -func (o *ListMembersNotFound) IsClientError() bool { - return true -} - -// IsServerError returns true when this list members not found response has a 5xx status code -func (o *ListMembersNotFound) IsServerError() bool { - return false -} - -// IsCode returns true when this list members not found response a status code equal to that given -func (o *ListMembersNotFound) IsCode(code int) bool { - return code == 404 -} - -// Code gets the status code for the list members not found response -func (o *ListMembersNotFound) Code() int { - return 404 -} - -func (o *ListMembersNotFound) Error() string { - return fmt.Sprintf("[GET /members/{organizationToken}][%d] listMembersNotFound ", 404) -} - -func (o *ListMembersNotFound) String() string { - return fmt.Sprintf("[GET /members/{organizationToken}][%d] listMembersNotFound ", 404) -} - -func (o *ListMembersNotFound) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { - - return nil -} - -// NewListMembersInternalServerError creates a ListMembersInternalServerError with default headers values -func NewListMembersInternalServerError() *ListMembersInternalServerError { - return &ListMembersInternalServerError{} -} - -/* -ListMembersInternalServerError describes a response with status code 500, with default header values. - -internal server error -*/ -type ListMembersInternalServerError struct { -} - -// IsSuccess returns true when this list members internal server error response has a 2xx status code -func (o *ListMembersInternalServerError) IsSuccess() bool { - return false -} - -// IsRedirect returns true when this list members internal server error response has a 3xx status code -func (o *ListMembersInternalServerError) IsRedirect() bool { - return false -} - -// IsClientError returns true when this list members internal server error response has a 4xx status code -func (o *ListMembersInternalServerError) IsClientError() bool { - return false -} - -// IsServerError returns true when this list members internal server error response has a 5xx status code -func (o *ListMembersInternalServerError) IsServerError() bool { - return true -} - -// IsCode returns true when this list members internal server error response a status code equal to that given -func (o *ListMembersInternalServerError) IsCode(code int) bool { - return code == 500 -} - -// Code gets the status code for the list members internal server error response -func (o *ListMembersInternalServerError) Code() int { - return 500 -} - -func (o *ListMembersInternalServerError) Error() string { - return fmt.Sprintf("[GET /members/{organizationToken}][%d] listMembersInternalServerError ", 500) -} - -func (o *ListMembersInternalServerError) String() string { - return fmt.Sprintf("[GET /members/{organizationToken}][%d] listMembersInternalServerError ", 500) -} - -func (o *ListMembersInternalServerError) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { - - return nil -} - -/* -ListMembersOKBody list members o k body -swagger:model ListMembersOKBody -*/ -type ListMembersOKBody struct { - - // members - Members []*ListMembersOKBodyMembersItems0 `json:"members"` -} - -// Validate validates this list members o k body -func (o *ListMembersOKBody) Validate(formats strfmt.Registry) error { - var res []error - - if err := o.validateMembers(formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (o *ListMembersOKBody) validateMembers(formats strfmt.Registry) error { - if swag.IsZero(o.Members) { // not required - return nil - } - - for i := 0; i < len(o.Members); i++ { - if swag.IsZero(o.Members[i]) { // not required - continue - } - - if o.Members[i] != nil { - if err := o.Members[i].Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("listMembersOK" + "." + "members" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("listMembersOK" + "." + "members" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -// ContextValidate validate this list members o k body based on the context it is used -func (o *ListMembersOKBody) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - var res []error - - if err := o.contextValidateMembers(ctx, formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (o *ListMembersOKBody) contextValidateMembers(ctx context.Context, formats strfmt.Registry) error { - - for i := 0; i < len(o.Members); i++ { - - if o.Members[i] != nil { - - if swag.IsZero(o.Members[i]) { // not required - return nil - } - - if err := o.Members[i].ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("listMembersOK" + "." + "members" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("listMembersOK" + "." + "members" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -// MarshalBinary interface implementation -func (o *ListMembersOKBody) MarshalBinary() ([]byte, error) { - if o == nil { - return nil, nil - } - return swag.WriteJSON(o) -} - -// UnmarshalBinary interface implementation -func (o *ListMembersOKBody) UnmarshalBinary(b []byte) error { - var res ListMembersOKBody - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *o = res - return nil -} - -/* -ListMembersOKBodyMembersItems0 list members o k body members items0 -swagger:model ListMembersOKBodyMembersItems0 -*/ -type ListMembersOKBodyMembersItems0 struct { - - // admin - Admin bool `json:"admin,omitempty"` - - // email - Email string `json:"email,omitempty"` -} - -// Validate validates this list members o k body members items0 -func (o *ListMembersOKBodyMembersItems0) Validate(formats strfmt.Registry) error { - return nil -} - -// ContextValidate validates this list members o k body members items0 based on context it is used -func (o *ListMembersOKBodyMembersItems0) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (o *ListMembersOKBodyMembersItems0) MarshalBinary() ([]byte, error) { - if o == nil { - return nil, nil - } - return swag.WriteJSON(o) -} - -// UnmarshalBinary interface implementation -func (o *ListMembersOKBodyMembersItems0) UnmarshalBinary(b []byte) error { - var res ListMembersOKBodyMembersItems0 - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *o = res - return nil -} diff --git a/rest_client_zrok/metadata/list_memberships_responses.go b/rest_client_zrok/metadata/list_memberships_responses.go index c79b2d1c..2ea41233 100644 --- a/rest_client_zrok/metadata/list_memberships_responses.go +++ b/rest_client_zrok/metadata/list_memberships_responses.go @@ -285,8 +285,8 @@ type ListMembershipsOKBodyMembershipsItems0 struct { // description Description string `json:"description,omitempty"` - // token - Token string `json:"token,omitempty"` + // organization token + OrganizationToken string `json:"organizationToken,omitempty"` } // Validate validates this list memberships o k body memberships items0 diff --git a/rest_client_zrok/metadata/metadata_client.go b/rest_client_zrok/metadata/metadata_client.go index 9e69c04e..33d0633a 100644 --- a/rest_client_zrok/metadata/metadata_client.go +++ b/rest_client_zrok/metadata/metadata_client.go @@ -30,6 +30,8 @@ type ClientOption func(*runtime.ClientOperation) // ClientService is the interface for Client methods type ClientService interface { + ClientVersionCheck(params *ClientVersionCheckParams, opts ...ClientOption) (*ClientVersionCheckOK, error) + Configuration(params *ConfigurationParams, opts ...ClientOption) (*ConfigurationOK, error) GetAccountDetail(params *GetAccountDetailParams, authInfo runtime.ClientAuthInfoWriter, opts ...ClientOption) (*GetAccountDetailOK, error) @@ -46,6 +48,8 @@ type ClientService interface { GetShareMetrics(params *GetShareMetricsParams, authInfo runtime.ClientAuthInfoWriter, opts ...ClientOption) (*GetShareMetricsOK, error) + GetSparklines(params *GetSparklinesParams, authInfo runtime.ClientAuthInfoWriter, opts ...ClientOption) (*GetSparklinesOK, error) + ListMemberships(params *ListMembershipsParams, authInfo runtime.ClientAuthInfoWriter, opts ...ClientOption) (*ListMembershipsOK, error) ListOrgMembers(params *ListOrgMembersParams, authInfo runtime.ClientAuthInfoWriter, opts ...ClientOption) (*ListOrgMembersOK, error) @@ -59,6 +63,44 @@ type ClientService interface { SetTransport(transport runtime.ClientTransport) } +/* +ClientVersionCheck client version check API +*/ +func (a *Client) ClientVersionCheck(params *ClientVersionCheckParams, opts ...ClientOption) (*ClientVersionCheckOK, error) { + // TODO: Validate the params before sending + if params == nil { + params = NewClientVersionCheckParams() + } + op := &runtime.ClientOperation{ + ID: "clientVersionCheck", + Method: "POST", + PathPattern: "/version", + ProducesMediaTypes: []string{"application/zrok.v1+json"}, + ConsumesMediaTypes: []string{"application/zrok.v1+json"}, + Schemes: []string{"http"}, + Params: params, + Reader: &ClientVersionCheckReader{formats: a.formats}, + Context: params.Context, + Client: params.HTTPClient, + } + for _, opt := range opts { + opt(op) + } + + result, err := a.transport.Submit(op) + if err != nil { + return nil, err + } + success, ok := result.(*ClientVersionCheckOK) + if ok { + return success, nil + } + // unexpected success response + // safeguard: normally, absent a default response, unknown success responses return an error above: so this is a codegen issue + msg := fmt.Sprintf("unexpected success response for clientVersionCheck: API contract not enforced by server. Client expected to get an error, but got: %T", result) + panic(msg) +} + /* Configuration configuration API */ @@ -264,7 +306,7 @@ func (a *Client) GetFrontendDetail(params *GetFrontendDetailParams, authInfo run op := &runtime.ClientOperation{ ID: "getFrontendDetail", Method: "GET", - PathPattern: "/detail/frontend/{feId}", + PathPattern: "/detail/frontend/{frontendId}", ProducesMediaTypes: []string{"application/zrok.v1+json"}, ConsumesMediaTypes: []string{"application/zrok.v1+json"}, Schemes: []string{"http"}, @@ -303,7 +345,7 @@ func (a *Client) GetShareDetail(params *GetShareDetailParams, authInfo runtime.C op := &runtime.ClientOperation{ ID: "getShareDetail", Method: "GET", - PathPattern: "/detail/share/{shrToken}", + PathPattern: "/detail/share/{shareToken}", ProducesMediaTypes: []string{"application/zrok.v1+json"}, ConsumesMediaTypes: []string{"application/zrok.v1+json"}, Schemes: []string{"http"}, @@ -342,7 +384,7 @@ func (a *Client) GetShareMetrics(params *GetShareMetricsParams, authInfo runtime op := &runtime.ClientOperation{ ID: "getShareMetrics", Method: "GET", - PathPattern: "/metrics/share/{shrToken}", + PathPattern: "/metrics/share/{shareToken}", ProducesMediaTypes: []string{"application/zrok.v1+json"}, ConsumesMediaTypes: []string{"application/zrok.v1+json"}, Schemes: []string{"http"}, @@ -370,6 +412,45 @@ func (a *Client) GetShareMetrics(params *GetShareMetricsParams, authInfo runtime panic(msg) } +/* +GetSparklines get sparklines API +*/ +func (a *Client) GetSparklines(params *GetSparklinesParams, authInfo runtime.ClientAuthInfoWriter, opts ...ClientOption) (*GetSparklinesOK, error) { + // TODO: Validate the params before sending + if params == nil { + params = NewGetSparklinesParams() + } + op := &runtime.ClientOperation{ + ID: "getSparklines", + Method: "POST", + PathPattern: "/sparklines", + ProducesMediaTypes: []string{"application/zrok.v1+json"}, + ConsumesMediaTypes: []string{"application/zrok.v1+json"}, + Schemes: []string{"http"}, + Params: params, + Reader: &GetSparklinesReader{formats: a.formats}, + AuthInfo: authInfo, + Context: params.Context, + Client: params.HTTPClient, + } + for _, opt := range opts { + opt(op) + } + + result, err := a.transport.Submit(op) + if err != nil { + return nil, err + } + success, ok := result.(*GetSparklinesOK) + if ok { + return success, nil + } + // unexpected success response + // safeguard: normally, absent a default response, unknown success responses return an error above: so this is a codegen issue + msg := fmt.Sprintf("unexpected success response for getSparklines: API contract not enforced by server. Client expected to get an error, but got: %T", result) + panic(msg) +} + /* ListMemberships list memberships API */ diff --git a/rest_client_zrok/metadata/version_responses.go b/rest_client_zrok/metadata/version_responses.go index 97a23fb1..de978ab5 100644 --- a/rest_client_zrok/metadata/version_responses.go +++ b/rest_client_zrok/metadata/version_responses.go @@ -42,7 +42,7 @@ func NewVersionOK() *VersionOK { /* VersionOK describes a response with status code 200, with default header values. -current server version +legacy upgrade required */ type VersionOK struct { Payload rest_model_zrok.Version diff --git a/rest_client_zrok/metrics/get_account_metrics_parameters.go b/rest_client_zrok/metrics/get_account_metrics_parameters.go deleted file mode 100644 index b06d0b6d..00000000 --- a/rest_client_zrok/metrics/get_account_metrics_parameters.go +++ /dev/null @@ -1,161 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -package metrics - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - "net/http" - "time" - - "github.com/go-openapi/errors" - "github.com/go-openapi/runtime" - cr "github.com/go-openapi/runtime/client" - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// NewGetAccountMetricsParams creates a new GetAccountMetricsParams object, -// with the default timeout for this client. -// -// Default values are not hydrated, since defaults are normally applied by the API server side. -// -// To enforce default values in parameter, use SetDefaults or WithDefaults. -func NewGetAccountMetricsParams() *GetAccountMetricsParams { - return &GetAccountMetricsParams{ - timeout: cr.DefaultTimeout, - } -} - -// NewGetAccountMetricsParamsWithTimeout creates a new GetAccountMetricsParams object -// with the ability to set a timeout on a request. -func NewGetAccountMetricsParamsWithTimeout(timeout time.Duration) *GetAccountMetricsParams { - return &GetAccountMetricsParams{ - timeout: timeout, - } -} - -// NewGetAccountMetricsParamsWithContext creates a new GetAccountMetricsParams object -// with the ability to set a context for a request. -func NewGetAccountMetricsParamsWithContext(ctx context.Context) *GetAccountMetricsParams { - return &GetAccountMetricsParams{ - Context: ctx, - } -} - -// NewGetAccountMetricsParamsWithHTTPClient creates a new GetAccountMetricsParams object -// with the ability to set a custom HTTPClient for a request. -func NewGetAccountMetricsParamsWithHTTPClient(client *http.Client) *GetAccountMetricsParams { - return &GetAccountMetricsParams{ - HTTPClient: client, - } -} - -/* -GetAccountMetricsParams contains all the parameters to send to the API endpoint - - for the get account metrics operation. - - Typically these are written to a http.Request. -*/ -type GetAccountMetricsParams struct { - - // Duration. - Duration *float64 - - timeout time.Duration - Context context.Context - HTTPClient *http.Client -} - -// WithDefaults hydrates default values in the get account metrics params (not the query body). -// -// All values with no default are reset to their zero value. -func (o *GetAccountMetricsParams) WithDefaults() *GetAccountMetricsParams { - o.SetDefaults() - return o -} - -// SetDefaults hydrates default values in the get account metrics params (not the query body). -// -// All values with no default are reset to their zero value. -func (o *GetAccountMetricsParams) SetDefaults() { - // no default values defined for this parameter -} - -// WithTimeout adds the timeout to the get account metrics params -func (o *GetAccountMetricsParams) WithTimeout(timeout time.Duration) *GetAccountMetricsParams { - o.SetTimeout(timeout) - return o -} - -// SetTimeout adds the timeout to the get account metrics params -func (o *GetAccountMetricsParams) SetTimeout(timeout time.Duration) { - o.timeout = timeout -} - -// WithContext adds the context to the get account metrics params -func (o *GetAccountMetricsParams) WithContext(ctx context.Context) *GetAccountMetricsParams { - o.SetContext(ctx) - return o -} - -// SetContext adds the context to the get account metrics params -func (o *GetAccountMetricsParams) SetContext(ctx context.Context) { - o.Context = ctx -} - -// WithHTTPClient adds the HTTPClient to the get account metrics params -func (o *GetAccountMetricsParams) WithHTTPClient(client *http.Client) *GetAccountMetricsParams { - o.SetHTTPClient(client) - return o -} - -// SetHTTPClient adds the HTTPClient to the get account metrics params -func (o *GetAccountMetricsParams) SetHTTPClient(client *http.Client) { - o.HTTPClient = client -} - -// WithDuration adds the duration to the get account metrics params -func (o *GetAccountMetricsParams) WithDuration(duration *float64) *GetAccountMetricsParams { - o.SetDuration(duration) - return o -} - -// SetDuration adds the duration to the get account metrics params -func (o *GetAccountMetricsParams) SetDuration(duration *float64) { - o.Duration = duration -} - -// WriteToRequest writes these params to a swagger request -func (o *GetAccountMetricsParams) WriteToRequest(r runtime.ClientRequest, reg strfmt.Registry) error { - - if err := r.SetTimeout(o.timeout); err != nil { - return err - } - var res []error - - if o.Duration != nil { - - // query param duration - var qrDuration float64 - - if o.Duration != nil { - qrDuration = *o.Duration - } - qDuration := swag.FormatFloat64(qrDuration) - if qDuration != "" { - - if err := r.SetQueryParam("duration", qDuration); err != nil { - return err - } - } - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} diff --git a/rest_client_zrok/metrics/get_account_metrics_responses.go b/rest_client_zrok/metrics/get_account_metrics_responses.go deleted file mode 100644 index 4768551f..00000000 --- a/rest_client_zrok/metrics/get_account_metrics_responses.go +++ /dev/null @@ -1,98 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -package metrics - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "fmt" - "io" - - "github.com/go-openapi/runtime" - "github.com/go-openapi/strfmt" - - "github.com/openziti/zrok/rest_model_zrok" -) - -// GetAccountMetricsReader is a Reader for the GetAccountMetrics structure. -type GetAccountMetricsReader struct { - formats strfmt.Registry -} - -// ReadResponse reads a server response into the received o. -func (o *GetAccountMetricsReader) ReadResponse(response runtime.ClientResponse, consumer runtime.Consumer) (interface{}, error) { - switch response.Code() { - case 200: - result := NewGetAccountMetricsOK() - if err := result.readResponse(response, consumer, o.formats); err != nil { - return nil, err - } - return result, nil - default: - return nil, runtime.NewAPIError("response status code does not match any response statuses defined for this endpoint in the swagger spec", response, response.Code()) - } -} - -// NewGetAccountMetricsOK creates a GetAccountMetricsOK with default headers values -func NewGetAccountMetricsOK() *GetAccountMetricsOK { - return &GetAccountMetricsOK{} -} - -/* -GetAccountMetricsOK describes a response with status code 200, with default header values. - -account metrics -*/ -type GetAccountMetricsOK struct { - Payload *rest_model_zrok.Metrics -} - -// IsSuccess returns true when this get account metrics o k response has a 2xx status code -func (o *GetAccountMetricsOK) IsSuccess() bool { - return true -} - -// IsRedirect returns true when this get account metrics o k response has a 3xx status code -func (o *GetAccountMetricsOK) IsRedirect() bool { - return false -} - -// IsClientError returns true when this get account metrics o k response has a 4xx status code -func (o *GetAccountMetricsOK) IsClientError() bool { - return false -} - -// IsServerError returns true when this get account metrics o k response has a 5xx status code -func (o *GetAccountMetricsOK) IsServerError() bool { - return false -} - -// IsCode returns true when this get account metrics o k response a status code equal to that given -func (o *GetAccountMetricsOK) IsCode(code int) bool { - return code == 200 -} - -func (o *GetAccountMetricsOK) Error() string { - return fmt.Sprintf("[GET /metrics/account][%d] getAccountMetricsOK %+v", 200, o.Payload) -} - -func (o *GetAccountMetricsOK) String() string { - return fmt.Sprintf("[GET /metrics/account][%d] getAccountMetricsOK %+v", 200, o.Payload) -} - -func (o *GetAccountMetricsOK) GetPayload() *rest_model_zrok.Metrics { - return o.Payload -} - -func (o *GetAccountMetricsOK) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { - - o.Payload = new(rest_model_zrok.Metrics) - - // response payload - if err := consumer.Consume(response.Body(), o.Payload); err != nil && err != io.EOF { - return err - } - - return nil -} diff --git a/rest_client_zrok/metrics/get_environment_metrics_parameters.go b/rest_client_zrok/metrics/get_environment_metrics_parameters.go deleted file mode 100644 index 796adaae..00000000 --- a/rest_client_zrok/metrics/get_environment_metrics_parameters.go +++ /dev/null @@ -1,180 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -package metrics - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - "net/http" - "time" - - "github.com/go-openapi/errors" - "github.com/go-openapi/runtime" - cr "github.com/go-openapi/runtime/client" - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// NewGetEnvironmentMetricsParams creates a new GetEnvironmentMetricsParams object, -// with the default timeout for this client. -// -// Default values are not hydrated, since defaults are normally applied by the API server side. -// -// To enforce default values in parameter, use SetDefaults or WithDefaults. -func NewGetEnvironmentMetricsParams() *GetEnvironmentMetricsParams { - return &GetEnvironmentMetricsParams{ - timeout: cr.DefaultTimeout, - } -} - -// NewGetEnvironmentMetricsParamsWithTimeout creates a new GetEnvironmentMetricsParams object -// with the ability to set a timeout on a request. -func NewGetEnvironmentMetricsParamsWithTimeout(timeout time.Duration) *GetEnvironmentMetricsParams { - return &GetEnvironmentMetricsParams{ - timeout: timeout, - } -} - -// NewGetEnvironmentMetricsParamsWithContext creates a new GetEnvironmentMetricsParams object -// with the ability to set a context for a request. -func NewGetEnvironmentMetricsParamsWithContext(ctx context.Context) *GetEnvironmentMetricsParams { - return &GetEnvironmentMetricsParams{ - Context: ctx, - } -} - -// NewGetEnvironmentMetricsParamsWithHTTPClient creates a new GetEnvironmentMetricsParams object -// with the ability to set a custom HTTPClient for a request. -func NewGetEnvironmentMetricsParamsWithHTTPClient(client *http.Client) *GetEnvironmentMetricsParams { - return &GetEnvironmentMetricsParams{ - HTTPClient: client, - } -} - -/* -GetEnvironmentMetricsParams contains all the parameters to send to the API endpoint - - for the get environment metrics operation. - - Typically these are written to a http.Request. -*/ -type GetEnvironmentMetricsParams struct { - - // Duration. - Duration *float64 - - // EnvID. - EnvID string - - timeout time.Duration - Context context.Context - HTTPClient *http.Client -} - -// WithDefaults hydrates default values in the get environment metrics params (not the query body). -// -// All values with no default are reset to their zero value. -func (o *GetEnvironmentMetricsParams) WithDefaults() *GetEnvironmentMetricsParams { - o.SetDefaults() - return o -} - -// SetDefaults hydrates default values in the get environment metrics params (not the query body). -// -// All values with no default are reset to their zero value. -func (o *GetEnvironmentMetricsParams) SetDefaults() { - // no default values defined for this parameter -} - -// WithTimeout adds the timeout to the get environment metrics params -func (o *GetEnvironmentMetricsParams) WithTimeout(timeout time.Duration) *GetEnvironmentMetricsParams { - o.SetTimeout(timeout) - return o -} - -// SetTimeout adds the timeout to the get environment metrics params -func (o *GetEnvironmentMetricsParams) SetTimeout(timeout time.Duration) { - o.timeout = timeout -} - -// WithContext adds the context to the get environment metrics params -func (o *GetEnvironmentMetricsParams) WithContext(ctx context.Context) *GetEnvironmentMetricsParams { - o.SetContext(ctx) - return o -} - -// SetContext adds the context to the get environment metrics params -func (o *GetEnvironmentMetricsParams) SetContext(ctx context.Context) { - o.Context = ctx -} - -// WithHTTPClient adds the HTTPClient to the get environment metrics params -func (o *GetEnvironmentMetricsParams) WithHTTPClient(client *http.Client) *GetEnvironmentMetricsParams { - o.SetHTTPClient(client) - return o -} - -// SetHTTPClient adds the HTTPClient to the get environment metrics params -func (o *GetEnvironmentMetricsParams) SetHTTPClient(client *http.Client) { - o.HTTPClient = client -} - -// WithDuration adds the duration to the get environment metrics params -func (o *GetEnvironmentMetricsParams) WithDuration(duration *float64) *GetEnvironmentMetricsParams { - o.SetDuration(duration) - return o -} - -// SetDuration adds the duration to the get environment metrics params -func (o *GetEnvironmentMetricsParams) SetDuration(duration *float64) { - o.Duration = duration -} - -// WithEnvID adds the envID to the get environment metrics params -func (o *GetEnvironmentMetricsParams) WithEnvID(envID string) *GetEnvironmentMetricsParams { - o.SetEnvID(envID) - return o -} - -// SetEnvID adds the envId to the get environment metrics params -func (o *GetEnvironmentMetricsParams) SetEnvID(envID string) { - o.EnvID = envID -} - -// WriteToRequest writes these params to a swagger request -func (o *GetEnvironmentMetricsParams) WriteToRequest(r runtime.ClientRequest, reg strfmt.Registry) error { - - if err := r.SetTimeout(o.timeout); err != nil { - return err - } - var res []error - - if o.Duration != nil { - - // query param duration - var qrDuration float64 - - if o.Duration != nil { - qrDuration = *o.Duration - } - qDuration := swag.FormatFloat64(qrDuration) - if qDuration != "" { - - if err := r.SetQueryParam("duration", qDuration); err != nil { - return err - } - } - } - - // path param envId - if err := r.SetPathParam("envId", o.EnvID); err != nil { - return err - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} diff --git a/rest_client_zrok/metrics/get_environment_metrics_responses.go b/rest_client_zrok/metrics/get_environment_metrics_responses.go deleted file mode 100644 index 9f555e8b..00000000 --- a/rest_client_zrok/metrics/get_environment_metrics_responses.go +++ /dev/null @@ -1,155 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -package metrics - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "fmt" - "io" - - "github.com/go-openapi/runtime" - "github.com/go-openapi/strfmt" - - "github.com/openziti/zrok/rest_model_zrok" -) - -// GetEnvironmentMetricsReader is a Reader for the GetEnvironmentMetrics structure. -type GetEnvironmentMetricsReader struct { - formats strfmt.Registry -} - -// ReadResponse reads a server response into the received o. -func (o *GetEnvironmentMetricsReader) ReadResponse(response runtime.ClientResponse, consumer runtime.Consumer) (interface{}, error) { - switch response.Code() { - case 200: - result := NewGetEnvironmentMetricsOK() - if err := result.readResponse(response, consumer, o.formats); err != nil { - return nil, err - } - return result, nil - case 401: - result := NewGetEnvironmentMetricsUnauthorized() - if err := result.readResponse(response, consumer, o.formats); err != nil { - return nil, err - } - return nil, result - default: - return nil, runtime.NewAPIError("response status code does not match any response statuses defined for this endpoint in the swagger spec", response, response.Code()) - } -} - -// NewGetEnvironmentMetricsOK creates a GetEnvironmentMetricsOK with default headers values -func NewGetEnvironmentMetricsOK() *GetEnvironmentMetricsOK { - return &GetEnvironmentMetricsOK{} -} - -/* -GetEnvironmentMetricsOK describes a response with status code 200, with default header values. - -environment metrics -*/ -type GetEnvironmentMetricsOK struct { - Payload *rest_model_zrok.Metrics -} - -// IsSuccess returns true when this get environment metrics o k response has a 2xx status code -func (o *GetEnvironmentMetricsOK) IsSuccess() bool { - return true -} - -// IsRedirect returns true when this get environment metrics o k response has a 3xx status code -func (o *GetEnvironmentMetricsOK) IsRedirect() bool { - return false -} - -// IsClientError returns true when this get environment metrics o k response has a 4xx status code -func (o *GetEnvironmentMetricsOK) IsClientError() bool { - return false -} - -// IsServerError returns true when this get environment metrics o k response has a 5xx status code -func (o *GetEnvironmentMetricsOK) IsServerError() bool { - return false -} - -// IsCode returns true when this get environment metrics o k response a status code equal to that given -func (o *GetEnvironmentMetricsOK) IsCode(code int) bool { - return code == 200 -} - -func (o *GetEnvironmentMetricsOK) Error() string { - return fmt.Sprintf("[GET /metrics/environment/{envId}][%d] getEnvironmentMetricsOK %+v", 200, o.Payload) -} - -func (o *GetEnvironmentMetricsOK) String() string { - return fmt.Sprintf("[GET /metrics/environment/{envId}][%d] getEnvironmentMetricsOK %+v", 200, o.Payload) -} - -func (o *GetEnvironmentMetricsOK) GetPayload() *rest_model_zrok.Metrics { - return o.Payload -} - -func (o *GetEnvironmentMetricsOK) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { - - o.Payload = new(rest_model_zrok.Metrics) - - // response payload - if err := consumer.Consume(response.Body(), o.Payload); err != nil && err != io.EOF { - return err - } - - return nil -} - -// NewGetEnvironmentMetricsUnauthorized creates a GetEnvironmentMetricsUnauthorized with default headers values -func NewGetEnvironmentMetricsUnauthorized() *GetEnvironmentMetricsUnauthorized { - return &GetEnvironmentMetricsUnauthorized{} -} - -/* -GetEnvironmentMetricsUnauthorized describes a response with status code 401, with default header values. - -unauthorized -*/ -type GetEnvironmentMetricsUnauthorized struct { -} - -// IsSuccess returns true when this get environment metrics unauthorized response has a 2xx status code -func (o *GetEnvironmentMetricsUnauthorized) IsSuccess() bool { - return false -} - -// IsRedirect returns true when this get environment metrics unauthorized response has a 3xx status code -func (o *GetEnvironmentMetricsUnauthorized) IsRedirect() bool { - return false -} - -// IsClientError returns true when this get environment metrics unauthorized response has a 4xx status code -func (o *GetEnvironmentMetricsUnauthorized) IsClientError() bool { - return true -} - -// IsServerError returns true when this get environment metrics unauthorized response has a 5xx status code -func (o *GetEnvironmentMetricsUnauthorized) IsServerError() bool { - return false -} - -// IsCode returns true when this get environment metrics unauthorized response a status code equal to that given -func (o *GetEnvironmentMetricsUnauthorized) IsCode(code int) bool { - return code == 401 -} - -func (o *GetEnvironmentMetricsUnauthorized) Error() string { - return fmt.Sprintf("[GET /metrics/environment/{envId}][%d] getEnvironmentMetricsUnauthorized ", 401) -} - -func (o *GetEnvironmentMetricsUnauthorized) String() string { - return fmt.Sprintf("[GET /metrics/environment/{envId}][%d] getEnvironmentMetricsUnauthorized ", 401) -} - -func (o *GetEnvironmentMetricsUnauthorized) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { - - return nil -} diff --git a/rest_client_zrok/metrics/get_share_metrics_parameters.go b/rest_client_zrok/metrics/get_share_metrics_parameters.go deleted file mode 100644 index 359c3c47..00000000 --- a/rest_client_zrok/metrics/get_share_metrics_parameters.go +++ /dev/null @@ -1,180 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -package metrics - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - "net/http" - "time" - - "github.com/go-openapi/errors" - "github.com/go-openapi/runtime" - cr "github.com/go-openapi/runtime/client" - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// NewGetShareMetricsParams creates a new GetShareMetricsParams object, -// with the default timeout for this client. -// -// Default values are not hydrated, since defaults are normally applied by the API server side. -// -// To enforce default values in parameter, use SetDefaults or WithDefaults. -func NewGetShareMetricsParams() *GetShareMetricsParams { - return &GetShareMetricsParams{ - timeout: cr.DefaultTimeout, - } -} - -// NewGetShareMetricsParamsWithTimeout creates a new GetShareMetricsParams object -// with the ability to set a timeout on a request. -func NewGetShareMetricsParamsWithTimeout(timeout time.Duration) *GetShareMetricsParams { - return &GetShareMetricsParams{ - timeout: timeout, - } -} - -// NewGetShareMetricsParamsWithContext creates a new GetShareMetricsParams object -// with the ability to set a context for a request. -func NewGetShareMetricsParamsWithContext(ctx context.Context) *GetShareMetricsParams { - return &GetShareMetricsParams{ - Context: ctx, - } -} - -// NewGetShareMetricsParamsWithHTTPClient creates a new GetShareMetricsParams object -// with the ability to set a custom HTTPClient for a request. -func NewGetShareMetricsParamsWithHTTPClient(client *http.Client) *GetShareMetricsParams { - return &GetShareMetricsParams{ - HTTPClient: client, - } -} - -/* -GetShareMetricsParams contains all the parameters to send to the API endpoint - - for the get share metrics operation. - - Typically these are written to a http.Request. -*/ -type GetShareMetricsParams struct { - - // Duration. - Duration *float64 - - // ShrToken. - ShrToken string - - timeout time.Duration - Context context.Context - HTTPClient *http.Client -} - -// WithDefaults hydrates default values in the get share metrics params (not the query body). -// -// All values with no default are reset to their zero value. -func (o *GetShareMetricsParams) WithDefaults() *GetShareMetricsParams { - o.SetDefaults() - return o -} - -// SetDefaults hydrates default values in the get share metrics params (not the query body). -// -// All values with no default are reset to their zero value. -func (o *GetShareMetricsParams) SetDefaults() { - // no default values defined for this parameter -} - -// WithTimeout adds the timeout to the get share metrics params -func (o *GetShareMetricsParams) WithTimeout(timeout time.Duration) *GetShareMetricsParams { - o.SetTimeout(timeout) - return o -} - -// SetTimeout adds the timeout to the get share metrics params -func (o *GetShareMetricsParams) SetTimeout(timeout time.Duration) { - o.timeout = timeout -} - -// WithContext adds the context to the get share metrics params -func (o *GetShareMetricsParams) WithContext(ctx context.Context) *GetShareMetricsParams { - o.SetContext(ctx) - return o -} - -// SetContext adds the context to the get share metrics params -func (o *GetShareMetricsParams) SetContext(ctx context.Context) { - o.Context = ctx -} - -// WithHTTPClient adds the HTTPClient to the get share metrics params -func (o *GetShareMetricsParams) WithHTTPClient(client *http.Client) *GetShareMetricsParams { - o.SetHTTPClient(client) - return o -} - -// SetHTTPClient adds the HTTPClient to the get share metrics params -func (o *GetShareMetricsParams) SetHTTPClient(client *http.Client) { - o.HTTPClient = client -} - -// WithDuration adds the duration to the get share metrics params -func (o *GetShareMetricsParams) WithDuration(duration *float64) *GetShareMetricsParams { - o.SetDuration(duration) - return o -} - -// SetDuration adds the duration to the get share metrics params -func (o *GetShareMetricsParams) SetDuration(duration *float64) { - o.Duration = duration -} - -// WithShrToken adds the shrToken to the get share metrics params -func (o *GetShareMetricsParams) WithShrToken(shrToken string) *GetShareMetricsParams { - o.SetShrToken(shrToken) - return o -} - -// SetShrToken adds the shrToken to the get share metrics params -func (o *GetShareMetricsParams) SetShrToken(shrToken string) { - o.ShrToken = shrToken -} - -// WriteToRequest writes these params to a swagger request -func (o *GetShareMetricsParams) WriteToRequest(r runtime.ClientRequest, reg strfmt.Registry) error { - - if err := r.SetTimeout(o.timeout); err != nil { - return err - } - var res []error - - if o.Duration != nil { - - // query param duration - var qrDuration float64 - - if o.Duration != nil { - qrDuration = *o.Duration - } - qDuration := swag.FormatFloat64(qrDuration) - if qDuration != "" { - - if err := r.SetQueryParam("duration", qDuration); err != nil { - return err - } - } - } - - // path param shrToken - if err := r.SetPathParam("shrToken", o.ShrToken); err != nil { - return err - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} diff --git a/rest_client_zrok/metrics/get_share_metrics_responses.go b/rest_client_zrok/metrics/get_share_metrics_responses.go deleted file mode 100644 index 9f99df33..00000000 --- a/rest_client_zrok/metrics/get_share_metrics_responses.go +++ /dev/null @@ -1,155 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -package metrics - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "fmt" - "io" - - "github.com/go-openapi/runtime" - "github.com/go-openapi/strfmt" - - "github.com/openziti/zrok/rest_model_zrok" -) - -// GetShareMetricsReader is a Reader for the GetShareMetrics structure. -type GetShareMetricsReader struct { - formats strfmt.Registry -} - -// ReadResponse reads a server response into the received o. -func (o *GetShareMetricsReader) ReadResponse(response runtime.ClientResponse, consumer runtime.Consumer) (interface{}, error) { - switch response.Code() { - case 200: - result := NewGetShareMetricsOK() - if err := result.readResponse(response, consumer, o.formats); err != nil { - return nil, err - } - return result, nil - case 401: - result := NewGetShareMetricsUnauthorized() - if err := result.readResponse(response, consumer, o.formats); err != nil { - return nil, err - } - return nil, result - default: - return nil, runtime.NewAPIError("response status code does not match any response statuses defined for this endpoint in the swagger spec", response, response.Code()) - } -} - -// NewGetShareMetricsOK creates a GetShareMetricsOK with default headers values -func NewGetShareMetricsOK() *GetShareMetricsOK { - return &GetShareMetricsOK{} -} - -/* -GetShareMetricsOK describes a response with status code 200, with default header values. - -share metrics -*/ -type GetShareMetricsOK struct { - Payload *rest_model_zrok.Metrics -} - -// IsSuccess returns true when this get share metrics o k response has a 2xx status code -func (o *GetShareMetricsOK) IsSuccess() bool { - return true -} - -// IsRedirect returns true when this get share metrics o k response has a 3xx status code -func (o *GetShareMetricsOK) IsRedirect() bool { - return false -} - -// IsClientError returns true when this get share metrics o k response has a 4xx status code -func (o *GetShareMetricsOK) IsClientError() bool { - return false -} - -// IsServerError returns true when this get share metrics o k response has a 5xx status code -func (o *GetShareMetricsOK) IsServerError() bool { - return false -} - -// IsCode returns true when this get share metrics o k response a status code equal to that given -func (o *GetShareMetricsOK) IsCode(code int) bool { - return code == 200 -} - -func (o *GetShareMetricsOK) Error() string { - return fmt.Sprintf("[GET /metrics/share/{shrToken}][%d] getShareMetricsOK %+v", 200, o.Payload) -} - -func (o *GetShareMetricsOK) String() string { - return fmt.Sprintf("[GET /metrics/share/{shrToken}][%d] getShareMetricsOK %+v", 200, o.Payload) -} - -func (o *GetShareMetricsOK) GetPayload() *rest_model_zrok.Metrics { - return o.Payload -} - -func (o *GetShareMetricsOK) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { - - o.Payload = new(rest_model_zrok.Metrics) - - // response payload - if err := consumer.Consume(response.Body(), o.Payload); err != nil && err != io.EOF { - return err - } - - return nil -} - -// NewGetShareMetricsUnauthorized creates a GetShareMetricsUnauthorized with default headers values -func NewGetShareMetricsUnauthorized() *GetShareMetricsUnauthorized { - return &GetShareMetricsUnauthorized{} -} - -/* -GetShareMetricsUnauthorized describes a response with status code 401, with default header values. - -unauthorized -*/ -type GetShareMetricsUnauthorized struct { -} - -// IsSuccess returns true when this get share metrics unauthorized response has a 2xx status code -func (o *GetShareMetricsUnauthorized) IsSuccess() bool { - return false -} - -// IsRedirect returns true when this get share metrics unauthorized response has a 3xx status code -func (o *GetShareMetricsUnauthorized) IsRedirect() bool { - return false -} - -// IsClientError returns true when this get share metrics unauthorized response has a 4xx status code -func (o *GetShareMetricsUnauthorized) IsClientError() bool { - return true -} - -// IsServerError returns true when this get share metrics unauthorized response has a 5xx status code -func (o *GetShareMetricsUnauthorized) IsServerError() bool { - return false -} - -// IsCode returns true when this get share metrics unauthorized response a status code equal to that given -func (o *GetShareMetricsUnauthorized) IsCode(code int) bool { - return code == 401 -} - -func (o *GetShareMetricsUnauthorized) Error() string { - return fmt.Sprintf("[GET /metrics/share/{shrToken}][%d] getShareMetricsUnauthorized ", 401) -} - -func (o *GetShareMetricsUnauthorized) String() string { - return fmt.Sprintf("[GET /metrics/share/{shrToken}][%d] getShareMetricsUnauthorized ", 401) -} - -func (o *GetShareMetricsUnauthorized) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { - - return nil -} diff --git a/rest_client_zrok/metrics/metrics_client.go b/rest_client_zrok/metrics/metrics_client.go deleted file mode 100644 index b1f4ab1f..00000000 --- a/rest_client_zrok/metrics/metrics_client.go +++ /dev/null @@ -1,162 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -package metrics - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "fmt" - - "github.com/go-openapi/runtime" - "github.com/go-openapi/strfmt" -) - -// New creates a new metrics API client. -func New(transport runtime.ClientTransport, formats strfmt.Registry) ClientService { - return &Client{transport: transport, formats: formats} -} - -/* -Client for metrics API -*/ -type Client struct { - transport runtime.ClientTransport - formats strfmt.Registry -} - -// ClientOption is the option for Client methods -type ClientOption func(*runtime.ClientOperation) - -// ClientService is the interface for Client methods -type ClientService interface { - GetAccountMetrics(params *GetAccountMetricsParams, authInfo runtime.ClientAuthInfoWriter, opts ...ClientOption) (*GetAccountMetricsOK, error) - - GetEnvironmentMetrics(params *GetEnvironmentMetricsParams, authInfo runtime.ClientAuthInfoWriter, opts ...ClientOption) (*GetEnvironmentMetricsOK, error) - - GetShareMetrics(params *GetShareMetricsParams, authInfo runtime.ClientAuthInfoWriter, opts ...ClientOption) (*GetShareMetricsOK, error) - - SetTransport(transport runtime.ClientTransport) -} - -/* -GetAccountMetrics get account metrics API -*/ -func (a *Client) GetAccountMetrics(params *GetAccountMetricsParams, authInfo runtime.ClientAuthInfoWriter, opts ...ClientOption) (*GetAccountMetricsOK, error) { - // TODO: Validate the params before sending - if params == nil { - params = NewGetAccountMetricsParams() - } - op := &runtime.ClientOperation{ - ID: "getAccountMetrics", - Method: "GET", - PathPattern: "/metrics/account", - ProducesMediaTypes: []string{"application/zrok.v1+json"}, - ConsumesMediaTypes: []string{"application/zrok.v1+json"}, - Schemes: []string{"http"}, - Params: params, - Reader: &GetAccountMetricsReader{formats: a.formats}, - AuthInfo: authInfo, - Context: params.Context, - Client: params.HTTPClient, - } - for _, opt := range opts { - opt(op) - } - - result, err := a.transport.Submit(op) - if err != nil { - return nil, err - } - success, ok := result.(*GetAccountMetricsOK) - if ok { - return success, nil - } - // unexpected success response - // safeguard: normally, absent a default response, unknown success responses return an error above: so this is a codegen issue - msg := fmt.Sprintf("unexpected success response for getAccountMetrics: API contract not enforced by server. Client expected to get an error, but got: %T", result) - panic(msg) -} - -/* -GetEnvironmentMetrics get environment metrics API -*/ -func (a *Client) GetEnvironmentMetrics(params *GetEnvironmentMetricsParams, authInfo runtime.ClientAuthInfoWriter, opts ...ClientOption) (*GetEnvironmentMetricsOK, error) { - // TODO: Validate the params before sending - if params == nil { - params = NewGetEnvironmentMetricsParams() - } - op := &runtime.ClientOperation{ - ID: "getEnvironmentMetrics", - Method: "GET", - PathPattern: "/metrics/environment/{envId}", - ProducesMediaTypes: []string{"application/zrok.v1+json"}, - ConsumesMediaTypes: []string{"application/zrok.v1+json"}, - Schemes: []string{"http"}, - Params: params, - Reader: &GetEnvironmentMetricsReader{formats: a.formats}, - AuthInfo: authInfo, - Context: params.Context, - Client: params.HTTPClient, - } - for _, opt := range opts { - opt(op) - } - - result, err := a.transport.Submit(op) - if err != nil { - return nil, err - } - success, ok := result.(*GetEnvironmentMetricsOK) - if ok { - return success, nil - } - // unexpected success response - // safeguard: normally, absent a default response, unknown success responses return an error above: so this is a codegen issue - msg := fmt.Sprintf("unexpected success response for getEnvironmentMetrics: API contract not enforced by server. Client expected to get an error, but got: %T", result) - panic(msg) -} - -/* -GetShareMetrics get share metrics API -*/ -func (a *Client) GetShareMetrics(params *GetShareMetricsParams, authInfo runtime.ClientAuthInfoWriter, opts ...ClientOption) (*GetShareMetricsOK, error) { - // TODO: Validate the params before sending - if params == nil { - params = NewGetShareMetricsParams() - } - op := &runtime.ClientOperation{ - ID: "getShareMetrics", - Method: "GET", - PathPattern: "/metrics/share/{shrToken}", - ProducesMediaTypes: []string{"application/zrok.v1+json"}, - ConsumesMediaTypes: []string{"application/zrok.v1+json"}, - Schemes: []string{"http"}, - Params: params, - Reader: &GetShareMetricsReader{formats: a.formats}, - AuthInfo: authInfo, - Context: params.Context, - Client: params.HTTPClient, - } - for _, opt := range opts { - opt(op) - } - - result, err := a.transport.Submit(op) - if err != nil { - return nil, err - } - success, ok := result.(*GetShareMetricsOK) - if ok { - return success, nil - } - // unexpected success response - // safeguard: normally, absent a default response, unknown success responses return an error above: so this is a codegen issue - msg := fmt.Sprintf("unexpected success response for getShareMetrics: API contract not enforced by server. Client expected to get an error, but got: %T", result) - panic(msg) -} - -// SetTransport changes the transport on the client -func (a *Client) SetTransport(transport runtime.ClientTransport) { - a.transport = transport -} diff --git a/rest_client_zrok/share/access_parameters.go b/rest_client_zrok/share/access_parameters.go index 44c1591d..bbd776c9 100644 --- a/rest_client_zrok/share/access_parameters.go +++ b/rest_client_zrok/share/access_parameters.go @@ -14,8 +14,6 @@ import ( "github.com/go-openapi/runtime" cr "github.com/go-openapi/runtime/client" "github.com/go-openapi/strfmt" - - "github.com/openziti/zrok/rest_model_zrok" ) // NewAccessParams creates a new AccessParams object, @@ -64,7 +62,7 @@ AccessParams contains all the parameters to send to the API endpoint type AccessParams struct { // Body. - Body *rest_model_zrok.AccessRequest + Body AccessBody timeout time.Duration Context context.Context @@ -120,13 +118,13 @@ func (o *AccessParams) SetHTTPClient(client *http.Client) { } // WithBody adds the body to the access params -func (o *AccessParams) WithBody(body *rest_model_zrok.AccessRequest) *AccessParams { +func (o *AccessParams) WithBody(body AccessBody) *AccessParams { o.SetBody(body) return o } // SetBody adds the body to the access params -func (o *AccessParams) SetBody(body *rest_model_zrok.AccessRequest) { +func (o *AccessParams) SetBody(body AccessBody) { o.Body = body } @@ -137,10 +135,8 @@ func (o *AccessParams) WriteToRequest(r runtime.ClientRequest, reg strfmt.Regist return err } var res []error - if o.Body != nil { - if err := r.SetBodyParam(o.Body); err != nil { - return err - } + if err := r.SetBodyParam(o.Body); err != nil { + return err } if len(res) > 0 { diff --git a/rest_client_zrok/share/access_responses.go b/rest_client_zrok/share/access_responses.go index 3e505933..6e476af5 100644 --- a/rest_client_zrok/share/access_responses.go +++ b/rest_client_zrok/share/access_responses.go @@ -6,13 +6,13 @@ package share // Editing this file might prove futile when you re-run the swagger generate command import ( + "context" "fmt" "io" "github.com/go-openapi/runtime" "github.com/go-openapi/strfmt" - - "github.com/openziti/zrok/rest_model_zrok" + "github.com/go-openapi/swag" ) // AccessReader is a Reader for the Access structure. @@ -63,7 +63,7 @@ AccessCreated describes a response with status code 201, with default header val access created */ type AccessCreated struct { - Payload *rest_model_zrok.AccessResponse + Payload *AccessCreatedBody } // IsSuccess returns true when this access created response has a 2xx status code @@ -104,13 +104,13 @@ func (o *AccessCreated) String() string { return fmt.Sprintf("[POST /access][%d] accessCreated %+v", 201, o.Payload) } -func (o *AccessCreated) GetPayload() *rest_model_zrok.AccessResponse { +func (o *AccessCreated) GetPayload() *AccessCreatedBody { return o.Payload } func (o *AccessCreated) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { - o.Payload = new(rest_model_zrok.AccessResponse) + o.Payload = new(AccessCreatedBody) // response payload if err := consumer.Consume(response.Body(), o.Payload); err != nil && err != io.EOF { @@ -287,3 +287,91 @@ func (o *AccessInternalServerError) readResponse(response runtime.ClientResponse return nil } + +/* +AccessBody access body +swagger:model AccessBody +*/ +type AccessBody struct { + + // bind address + BindAddress string `json:"bindAddress,omitempty"` + + // description + Description string `json:"description,omitempty"` + + // env z Id + EnvZID string `json:"envZId,omitempty"` + + // share token + ShareToken string `json:"shareToken,omitempty"` +} + +// Validate validates this access body +func (o *AccessBody) Validate(formats strfmt.Registry) error { + return nil +} + +// ContextValidate validates this access body based on context it is used +func (o *AccessBody) ContextValidate(ctx context.Context, formats strfmt.Registry) error { + return nil +} + +// MarshalBinary interface implementation +func (o *AccessBody) MarshalBinary() ([]byte, error) { + if o == nil { + return nil, nil + } + return swag.WriteJSON(o) +} + +// UnmarshalBinary interface implementation +func (o *AccessBody) UnmarshalBinary(b []byte) error { + var res AccessBody + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *o = res + return nil +} + +/* +AccessCreatedBody access created body +swagger:model AccessCreatedBody +*/ +type AccessCreatedBody struct { + + // backend mode + BackendMode string `json:"backendMode,omitempty"` + + // frontend token + FrontendToken string `json:"frontendToken,omitempty"` +} + +// Validate validates this access created body +func (o *AccessCreatedBody) Validate(formats strfmt.Registry) error { + return nil +} + +// ContextValidate validates this access created body based on context it is used +func (o *AccessCreatedBody) ContextValidate(ctx context.Context, formats strfmt.Registry) error { + return nil +} + +// MarshalBinary interface implementation +func (o *AccessCreatedBody) MarshalBinary() ([]byte, error) { + if o == nil { + return nil, nil + } + return swag.WriteJSON(o) +} + +// UnmarshalBinary interface implementation +func (o *AccessCreatedBody) UnmarshalBinary(b []byte) error { + var res AccessCreatedBody + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *o = res + return nil +} diff --git a/rest_client_zrok/share/oauth_authenticate_parameters.go b/rest_client_zrok/share/oauth_authenticate_parameters.go deleted file mode 100644 index cc305f14..00000000 --- a/rest_client_zrok/share/oauth_authenticate_parameters.go +++ /dev/null @@ -1,184 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -package share - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - "net/http" - "time" - - "github.com/go-openapi/errors" - "github.com/go-openapi/runtime" - cr "github.com/go-openapi/runtime/client" - "github.com/go-openapi/strfmt" -) - -// NewOauthAuthenticateParams creates a new OauthAuthenticateParams object, -// with the default timeout for this client. -// -// Default values are not hydrated, since defaults are normally applied by the API server side. -// -// To enforce default values in parameter, use SetDefaults or WithDefaults. -func NewOauthAuthenticateParams() *OauthAuthenticateParams { - return &OauthAuthenticateParams{ - timeout: cr.DefaultTimeout, - } -} - -// NewOauthAuthenticateParamsWithTimeout creates a new OauthAuthenticateParams object -// with the ability to set a timeout on a request. -func NewOauthAuthenticateParamsWithTimeout(timeout time.Duration) *OauthAuthenticateParams { - return &OauthAuthenticateParams{ - timeout: timeout, - } -} - -// NewOauthAuthenticateParamsWithContext creates a new OauthAuthenticateParams object -// with the ability to set a context for a request. -func NewOauthAuthenticateParamsWithContext(ctx context.Context) *OauthAuthenticateParams { - return &OauthAuthenticateParams{ - Context: ctx, - } -} - -// NewOauthAuthenticateParamsWithHTTPClient creates a new OauthAuthenticateParams object -// with the ability to set a custom HTTPClient for a request. -func NewOauthAuthenticateParamsWithHTTPClient(client *http.Client) *OauthAuthenticateParams { - return &OauthAuthenticateParams{ - HTTPClient: client, - } -} - -/* -OauthAuthenticateParams contains all the parameters to send to the API endpoint - - for the oauth authenticate operation. - - Typically these are written to a http.Request. -*/ -type OauthAuthenticateParams struct { - - // Code. - Code string - - // State. - State *string - - timeout time.Duration - Context context.Context - HTTPClient *http.Client -} - -// WithDefaults hydrates default values in the oauth authenticate params (not the query body). -// -// All values with no default are reset to their zero value. -func (o *OauthAuthenticateParams) WithDefaults() *OauthAuthenticateParams { - o.SetDefaults() - return o -} - -// SetDefaults hydrates default values in the oauth authenticate params (not the query body). -// -// All values with no default are reset to their zero value. -func (o *OauthAuthenticateParams) SetDefaults() { - // no default values defined for this parameter -} - -// WithTimeout adds the timeout to the oauth authenticate params -func (o *OauthAuthenticateParams) WithTimeout(timeout time.Duration) *OauthAuthenticateParams { - o.SetTimeout(timeout) - return o -} - -// SetTimeout adds the timeout to the oauth authenticate params -func (o *OauthAuthenticateParams) SetTimeout(timeout time.Duration) { - o.timeout = timeout -} - -// WithContext adds the context to the oauth authenticate params -func (o *OauthAuthenticateParams) WithContext(ctx context.Context) *OauthAuthenticateParams { - o.SetContext(ctx) - return o -} - -// SetContext adds the context to the oauth authenticate params -func (o *OauthAuthenticateParams) SetContext(ctx context.Context) { - o.Context = ctx -} - -// WithHTTPClient adds the HTTPClient to the oauth authenticate params -func (o *OauthAuthenticateParams) WithHTTPClient(client *http.Client) *OauthAuthenticateParams { - o.SetHTTPClient(client) - return o -} - -// SetHTTPClient adds the HTTPClient to the oauth authenticate params -func (o *OauthAuthenticateParams) SetHTTPClient(client *http.Client) { - o.HTTPClient = client -} - -// WithCode adds the code to the oauth authenticate params -func (o *OauthAuthenticateParams) WithCode(code string) *OauthAuthenticateParams { - o.SetCode(code) - return o -} - -// SetCode adds the code to the oauth authenticate params -func (o *OauthAuthenticateParams) SetCode(code string) { - o.Code = code -} - -// WithState adds the state to the oauth authenticate params -func (o *OauthAuthenticateParams) WithState(state *string) *OauthAuthenticateParams { - o.SetState(state) - return o -} - -// SetState adds the state to the oauth authenticate params -func (o *OauthAuthenticateParams) SetState(state *string) { - o.State = state -} - -// WriteToRequest writes these params to a swagger request -func (o *OauthAuthenticateParams) WriteToRequest(r runtime.ClientRequest, reg strfmt.Registry) error { - - if err := r.SetTimeout(o.timeout); err != nil { - return err - } - var res []error - - // query param code - qrCode := o.Code - qCode := qrCode - if qCode != "" { - - if err := r.SetQueryParam("code", qCode); err != nil { - return err - } - } - - if o.State != nil { - - // query param state - var qrState string - - if o.State != nil { - qrState = *o.State - } - qState := qrState - if qState != "" { - - if err := r.SetQueryParam("state", qState); err != nil { - return err - } - } - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} diff --git a/rest_client_zrok/share/oauth_authenticate_responses.go b/rest_client_zrok/share/oauth_authenticate_responses.go deleted file mode 100644 index c4457878..00000000 --- a/rest_client_zrok/share/oauth_authenticate_responses.go +++ /dev/null @@ -1,208 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -package share - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "fmt" - - "github.com/go-openapi/runtime" - "github.com/go-openapi/strfmt" -) - -// OauthAuthenticateReader is a Reader for the OauthAuthenticate structure. -type OauthAuthenticateReader struct { - formats strfmt.Registry -} - -// ReadResponse reads a server response into the received o. -func (o *OauthAuthenticateReader) ReadResponse(response runtime.ClientResponse, consumer runtime.Consumer) (interface{}, error) { - switch response.Code() { - case 200: - result := NewOauthAuthenticateOK() - if err := result.readResponse(response, consumer, o.formats); err != nil { - return nil, err - } - return result, nil - case 302: - result := NewOauthAuthenticateFound() - if err := result.readResponse(response, consumer, o.formats); err != nil { - return nil, err - } - return nil, result - case 500: - result := NewOauthAuthenticateInternalServerError() - if err := result.readResponse(response, consumer, o.formats); err != nil { - return nil, err - } - return nil, result - default: - return nil, runtime.NewAPIError("response status code does not match any response statuses defined for this endpoint in the swagger spec", response, response.Code()) - } -} - -// NewOauthAuthenticateOK creates a OauthAuthenticateOK with default headers values -func NewOauthAuthenticateOK() *OauthAuthenticateOK { - return &OauthAuthenticateOK{} -} - -/* -OauthAuthenticateOK describes a response with status code 200, with default header values. - -testing -*/ -type OauthAuthenticateOK struct { -} - -// IsSuccess returns true when this oauth authenticate o k response has a 2xx status code -func (o *OauthAuthenticateOK) IsSuccess() bool { - return true -} - -// IsRedirect returns true when this oauth authenticate o k response has a 3xx status code -func (o *OauthAuthenticateOK) IsRedirect() bool { - return false -} - -// IsClientError returns true when this oauth authenticate o k response has a 4xx status code -func (o *OauthAuthenticateOK) IsClientError() bool { - return false -} - -// IsServerError returns true when this oauth authenticate o k response has a 5xx status code -func (o *OauthAuthenticateOK) IsServerError() bool { - return false -} - -// IsCode returns true when this oauth authenticate o k response a status code equal to that given -func (o *OauthAuthenticateOK) IsCode(code int) bool { - return code == 200 -} - -func (o *OauthAuthenticateOK) Error() string { - return fmt.Sprintf("[GET /oauth/authorize][%d] oauthAuthenticateOK ", 200) -} - -func (o *OauthAuthenticateOK) String() string { - return fmt.Sprintf("[GET /oauth/authorize][%d] oauthAuthenticateOK ", 200) -} - -func (o *OauthAuthenticateOK) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { - - return nil -} - -// NewOauthAuthenticateFound creates a OauthAuthenticateFound with default headers values -func NewOauthAuthenticateFound() *OauthAuthenticateFound { - return &OauthAuthenticateFound{} -} - -/* -OauthAuthenticateFound describes a response with status code 302, with default header values. - -redirect back to share -*/ -type OauthAuthenticateFound struct { - - /* Redirect URL - */ - Location string -} - -// IsSuccess returns true when this oauth authenticate found response has a 2xx status code -func (o *OauthAuthenticateFound) IsSuccess() bool { - return false -} - -// IsRedirect returns true when this oauth authenticate found response has a 3xx status code -func (o *OauthAuthenticateFound) IsRedirect() bool { - return true -} - -// IsClientError returns true when this oauth authenticate found response has a 4xx status code -func (o *OauthAuthenticateFound) IsClientError() bool { - return false -} - -// IsServerError returns true when this oauth authenticate found response has a 5xx status code -func (o *OauthAuthenticateFound) IsServerError() bool { - return false -} - -// IsCode returns true when this oauth authenticate found response a status code equal to that given -func (o *OauthAuthenticateFound) IsCode(code int) bool { - return code == 302 -} - -func (o *OauthAuthenticateFound) Error() string { - return fmt.Sprintf("[GET /oauth/authorize][%d] oauthAuthenticateFound ", 302) -} - -func (o *OauthAuthenticateFound) String() string { - return fmt.Sprintf("[GET /oauth/authorize][%d] oauthAuthenticateFound ", 302) -} - -func (o *OauthAuthenticateFound) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { - - // hydrates response header location - hdrLocation := response.GetHeader("location") - - if hdrLocation != "" { - o.Location = hdrLocation - } - - return nil -} - -// NewOauthAuthenticateInternalServerError creates a OauthAuthenticateInternalServerError with default headers values -func NewOauthAuthenticateInternalServerError() *OauthAuthenticateInternalServerError { - return &OauthAuthenticateInternalServerError{} -} - -/* -OauthAuthenticateInternalServerError describes a response with status code 500, with default header values. - -internal server error -*/ -type OauthAuthenticateInternalServerError struct { -} - -// IsSuccess returns true when this oauth authenticate internal server error response has a 2xx status code -func (o *OauthAuthenticateInternalServerError) IsSuccess() bool { - return false -} - -// IsRedirect returns true when this oauth authenticate internal server error response has a 3xx status code -func (o *OauthAuthenticateInternalServerError) IsRedirect() bool { - return false -} - -// IsClientError returns true when this oauth authenticate internal server error response has a 4xx status code -func (o *OauthAuthenticateInternalServerError) IsClientError() bool { - return false -} - -// IsServerError returns true when this oauth authenticate internal server error response has a 5xx status code -func (o *OauthAuthenticateInternalServerError) IsServerError() bool { - return true -} - -// IsCode returns true when this oauth authenticate internal server error response a status code equal to that given -func (o *OauthAuthenticateInternalServerError) IsCode(code int) bool { - return code == 500 -} - -func (o *OauthAuthenticateInternalServerError) Error() string { - return fmt.Sprintf("[GET /oauth/authorize][%d] oauthAuthenticateInternalServerError ", 500) -} - -func (o *OauthAuthenticateInternalServerError) String() string { - return fmt.Sprintf("[GET /oauth/authorize][%d] oauthAuthenticateInternalServerError ", 500) -} - -func (o *OauthAuthenticateInternalServerError) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { - - return nil -} diff --git a/rest_client_zrok/share/share_client.go b/rest_client_zrok/share/share_client.go index 1f992f99..48acfa17 100644 --- a/rest_client_zrok/share/share_client.go +++ b/rest_client_zrok/share/share_client.go @@ -38,6 +38,8 @@ type ClientService interface { Unshare(params *UnshareParams, authInfo runtime.ClientAuthInfoWriter, opts ...ClientOption) (*UnshareOK, error) + UpdateAccess(params *UpdateAccessParams, authInfo runtime.ClientAuthInfoWriter, opts ...ClientOption) (*UpdateAccessOK, error) + UpdateShare(params *UpdateShareParams, authInfo runtime.ClientAuthInfoWriter, opts ...ClientOption) (*UpdateShareOK, error) SetTransport(transport runtime.ClientTransport) @@ -199,6 +201,45 @@ func (a *Client) Unshare(params *UnshareParams, authInfo runtime.ClientAuthInfoW panic(msg) } +/* +UpdateAccess update access API +*/ +func (a *Client) UpdateAccess(params *UpdateAccessParams, authInfo runtime.ClientAuthInfoWriter, opts ...ClientOption) (*UpdateAccessOK, error) { + // TODO: Validate the params before sending + if params == nil { + params = NewUpdateAccessParams() + } + op := &runtime.ClientOperation{ + ID: "updateAccess", + Method: "PATCH", + PathPattern: "/access", + ProducesMediaTypes: []string{"application/zrok.v1+json"}, + ConsumesMediaTypes: []string{"application/zrok.v1+json"}, + Schemes: []string{"http"}, + Params: params, + Reader: &UpdateAccessReader{formats: a.formats}, + AuthInfo: authInfo, + Context: params.Context, + Client: params.HTTPClient, + } + for _, opt := range opts { + opt(op) + } + + result, err := a.transport.Submit(op) + if err != nil { + return nil, err + } + success, ok := result.(*UpdateAccessOK) + if ok { + return success, nil + } + // unexpected success response + // safeguard: normally, absent a default response, unknown success responses return an error above: so this is a codegen issue + msg := fmt.Sprintf("unexpected success response for updateAccess: API contract not enforced by server. Client expected to get an error, but got: %T", result) + panic(msg) +} + /* UpdateShare update share API */ diff --git a/rest_client_zrok/share/unaccess_parameters.go b/rest_client_zrok/share/unaccess_parameters.go index b2c0bc2a..7dc101f1 100644 --- a/rest_client_zrok/share/unaccess_parameters.go +++ b/rest_client_zrok/share/unaccess_parameters.go @@ -14,8 +14,6 @@ import ( "github.com/go-openapi/runtime" cr "github.com/go-openapi/runtime/client" "github.com/go-openapi/strfmt" - - "github.com/openziti/zrok/rest_model_zrok" ) // NewUnaccessParams creates a new UnaccessParams object, @@ -64,7 +62,7 @@ UnaccessParams contains all the parameters to send to the API endpoint type UnaccessParams struct { // Body. - Body *rest_model_zrok.UnaccessRequest + Body UnaccessBody timeout time.Duration Context context.Context @@ -120,13 +118,13 @@ func (o *UnaccessParams) SetHTTPClient(client *http.Client) { } // WithBody adds the body to the unaccess params -func (o *UnaccessParams) WithBody(body *rest_model_zrok.UnaccessRequest) *UnaccessParams { +func (o *UnaccessParams) WithBody(body UnaccessBody) *UnaccessParams { o.SetBody(body) return o } // SetBody adds the body to the unaccess params -func (o *UnaccessParams) SetBody(body *rest_model_zrok.UnaccessRequest) { +func (o *UnaccessParams) SetBody(body UnaccessBody) { o.Body = body } @@ -137,10 +135,8 @@ func (o *UnaccessParams) WriteToRequest(r runtime.ClientRequest, reg strfmt.Regi return err } var res []error - if o.Body != nil { - if err := r.SetBodyParam(o.Body); err != nil { - return err - } + if err := r.SetBodyParam(o.Body); err != nil { + return err } if len(res) > 0 { diff --git a/rest_client_zrok/share/unaccess_responses.go b/rest_client_zrok/share/unaccess_responses.go index cf0ce393..2f5579bf 100644 --- a/rest_client_zrok/share/unaccess_responses.go +++ b/rest_client_zrok/share/unaccess_responses.go @@ -6,10 +6,12 @@ package share // Editing this file might prove futile when you re-run the swagger generate command import ( + "context" "fmt" "github.com/go-openapi/runtime" "github.com/go-openapi/strfmt" + "github.com/go-openapi/swag" ) // UnaccessReader is a Reader for the Unaccess structure. @@ -272,3 +274,47 @@ func (o *UnaccessInternalServerError) readResponse(response runtime.ClientRespon return nil } + +/* +UnaccessBody unaccess body +swagger:model UnaccessBody +*/ +type UnaccessBody struct { + + // env z Id + EnvZID string `json:"envZId,omitempty"` + + // frontend token + FrontendToken string `json:"frontendToken,omitempty"` + + // share token + ShareToken string `json:"shareToken,omitempty"` +} + +// Validate validates this unaccess body +func (o *UnaccessBody) Validate(formats strfmt.Registry) error { + return nil +} + +// ContextValidate validates this unaccess body based on context it is used +func (o *UnaccessBody) ContextValidate(ctx context.Context, formats strfmt.Registry) error { + return nil +} + +// MarshalBinary interface implementation +func (o *UnaccessBody) MarshalBinary() ([]byte, error) { + if o == nil { + return nil, nil + } + return swag.WriteJSON(o) +} + +// UnmarshalBinary interface implementation +func (o *UnaccessBody) UnmarshalBinary(b []byte) error { + var res UnaccessBody + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *o = res + return nil +} diff --git a/rest_client_zrok/share/unshare_parameters.go b/rest_client_zrok/share/unshare_parameters.go index 457173a5..c4feba0e 100644 --- a/rest_client_zrok/share/unshare_parameters.go +++ b/rest_client_zrok/share/unshare_parameters.go @@ -14,8 +14,6 @@ import ( "github.com/go-openapi/runtime" cr "github.com/go-openapi/runtime/client" "github.com/go-openapi/strfmt" - - "github.com/openziti/zrok/rest_model_zrok" ) // NewUnshareParams creates a new UnshareParams object, @@ -64,7 +62,7 @@ UnshareParams contains all the parameters to send to the API endpoint type UnshareParams struct { // Body. - Body *rest_model_zrok.UnshareRequest + Body UnshareBody timeout time.Duration Context context.Context @@ -120,13 +118,13 @@ func (o *UnshareParams) SetHTTPClient(client *http.Client) { } // WithBody adds the body to the unshare params -func (o *UnshareParams) WithBody(body *rest_model_zrok.UnshareRequest) *UnshareParams { +func (o *UnshareParams) WithBody(body UnshareBody) *UnshareParams { o.SetBody(body) return o } // SetBody adds the body to the unshare params -func (o *UnshareParams) SetBody(body *rest_model_zrok.UnshareRequest) { +func (o *UnshareParams) SetBody(body UnshareBody) { o.Body = body } @@ -137,10 +135,8 @@ func (o *UnshareParams) WriteToRequest(r runtime.ClientRequest, reg strfmt.Regis return err } var res []error - if o.Body != nil { - if err := r.SetBodyParam(o.Body); err != nil { - return err - } + if err := r.SetBodyParam(o.Body); err != nil { + return err } if len(res) > 0 { diff --git a/rest_client_zrok/share/unshare_responses.go b/rest_client_zrok/share/unshare_responses.go index 71910bf5..7e1d1d62 100644 --- a/rest_client_zrok/share/unshare_responses.go +++ b/rest_client_zrok/share/unshare_responses.go @@ -6,11 +6,13 @@ package share // Editing this file might prove futile when you re-run the swagger generate command import ( + "context" "fmt" "io" "github.com/go-openapi/runtime" "github.com/go-openapi/strfmt" + "github.com/go-openapi/swag" "github.com/openziti/zrok/rest_model_zrok" ) @@ -285,3 +287,47 @@ func (o *UnshareInternalServerError) readResponse(response runtime.ClientRespons return nil } + +/* +UnshareBody unshare body +swagger:model UnshareBody +*/ +type UnshareBody struct { + + // env z Id + EnvZID string `json:"envZId,omitempty"` + + // reserved + Reserved bool `json:"reserved,omitempty"` + + // share token + ShareToken string `json:"shareToken,omitempty"` +} + +// Validate validates this unshare body +func (o *UnshareBody) Validate(formats strfmt.Registry) error { + return nil +} + +// ContextValidate validates this unshare body based on context it is used +func (o *UnshareBody) ContextValidate(ctx context.Context, formats strfmt.Registry) error { + return nil +} + +// MarshalBinary interface implementation +func (o *UnshareBody) MarshalBinary() ([]byte, error) { + if o == nil { + return nil, nil + } + return swag.WriteJSON(o) +} + +// UnmarshalBinary interface implementation +func (o *UnshareBody) UnmarshalBinary(b []byte) error { + var res UnshareBody + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *o = res + return nil +} diff --git a/rest_client_zrok/share/update_access_parameters.go b/rest_client_zrok/share/update_access_parameters.go new file mode 100644 index 00000000..44bddb02 --- /dev/null +++ b/rest_client_zrok/share/update_access_parameters.go @@ -0,0 +1,146 @@ +// Code generated by go-swagger; DO NOT EDIT. + +package share + +// This file was generated by the swagger tool. +// Editing this file might prove futile when you re-run the swagger generate command + +import ( + "context" + "net/http" + "time" + + "github.com/go-openapi/errors" + "github.com/go-openapi/runtime" + cr "github.com/go-openapi/runtime/client" + "github.com/go-openapi/strfmt" +) + +// NewUpdateAccessParams creates a new UpdateAccessParams object, +// with the default timeout for this client. +// +// Default values are not hydrated, since defaults are normally applied by the API server side. +// +// To enforce default values in parameter, use SetDefaults or WithDefaults. +func NewUpdateAccessParams() *UpdateAccessParams { + return &UpdateAccessParams{ + timeout: cr.DefaultTimeout, + } +} + +// NewUpdateAccessParamsWithTimeout creates a new UpdateAccessParams object +// with the ability to set a timeout on a request. +func NewUpdateAccessParamsWithTimeout(timeout time.Duration) *UpdateAccessParams { + return &UpdateAccessParams{ + timeout: timeout, + } +} + +// NewUpdateAccessParamsWithContext creates a new UpdateAccessParams object +// with the ability to set a context for a request. +func NewUpdateAccessParamsWithContext(ctx context.Context) *UpdateAccessParams { + return &UpdateAccessParams{ + Context: ctx, + } +} + +// NewUpdateAccessParamsWithHTTPClient creates a new UpdateAccessParams object +// with the ability to set a custom HTTPClient for a request. +func NewUpdateAccessParamsWithHTTPClient(client *http.Client) *UpdateAccessParams { + return &UpdateAccessParams{ + HTTPClient: client, + } +} + +/* +UpdateAccessParams contains all the parameters to send to the API endpoint + + for the update access operation. + + Typically these are written to a http.Request. +*/ +type UpdateAccessParams struct { + + // Body. + Body UpdateAccessBody + + timeout time.Duration + Context context.Context + HTTPClient *http.Client +} + +// WithDefaults hydrates default values in the update access params (not the query body). +// +// All values with no default are reset to their zero value. +func (o *UpdateAccessParams) WithDefaults() *UpdateAccessParams { + o.SetDefaults() + return o +} + +// SetDefaults hydrates default values in the update access params (not the query body). +// +// All values with no default are reset to their zero value. +func (o *UpdateAccessParams) SetDefaults() { + // no default values defined for this parameter +} + +// WithTimeout adds the timeout to the update access params +func (o *UpdateAccessParams) WithTimeout(timeout time.Duration) *UpdateAccessParams { + o.SetTimeout(timeout) + return o +} + +// SetTimeout adds the timeout to the update access params +func (o *UpdateAccessParams) SetTimeout(timeout time.Duration) { + o.timeout = timeout +} + +// WithContext adds the context to the update access params +func (o *UpdateAccessParams) WithContext(ctx context.Context) *UpdateAccessParams { + o.SetContext(ctx) + return o +} + +// SetContext adds the context to the update access params +func (o *UpdateAccessParams) SetContext(ctx context.Context) { + o.Context = ctx +} + +// WithHTTPClient adds the HTTPClient to the update access params +func (o *UpdateAccessParams) WithHTTPClient(client *http.Client) *UpdateAccessParams { + o.SetHTTPClient(client) + return o +} + +// SetHTTPClient adds the HTTPClient to the update access params +func (o *UpdateAccessParams) SetHTTPClient(client *http.Client) { + o.HTTPClient = client +} + +// WithBody adds the body to the update access params +func (o *UpdateAccessParams) WithBody(body UpdateAccessBody) *UpdateAccessParams { + o.SetBody(body) + return o +} + +// SetBody adds the body to the update access params +func (o *UpdateAccessParams) SetBody(body UpdateAccessBody) { + o.Body = body +} + +// WriteToRequest writes these params to a swagger request +func (o *UpdateAccessParams) WriteToRequest(r runtime.ClientRequest, reg strfmt.Registry) error { + + if err := r.SetTimeout(o.timeout); err != nil { + return err + } + var res []error + if err := r.SetBodyParam(o.Body); err != nil { + return err + } + + if len(res) > 0 { + return errors.CompositeValidationError(res...) + } + return nil +} diff --git a/rest_client_zrok/share/update_access_responses.go b/rest_client_zrok/share/update_access_responses.go new file mode 100644 index 00000000..08ccbb97 --- /dev/null +++ b/rest_client_zrok/share/update_access_responses.go @@ -0,0 +1,320 @@ +// Code generated by go-swagger; DO NOT EDIT. + +package share + +// This file was generated by the swagger tool. +// Editing this file might prove futile when you re-run the swagger generate command + +import ( + "context" + "fmt" + + "github.com/go-openapi/runtime" + "github.com/go-openapi/strfmt" + "github.com/go-openapi/swag" +) + +// UpdateAccessReader is a Reader for the UpdateAccess structure. +type UpdateAccessReader struct { + formats strfmt.Registry +} + +// ReadResponse reads a server response into the received o. +func (o *UpdateAccessReader) ReadResponse(response runtime.ClientResponse, consumer runtime.Consumer) (interface{}, error) { + switch response.Code() { + case 200: + result := NewUpdateAccessOK() + if err := result.readResponse(response, consumer, o.formats); err != nil { + return nil, err + } + return result, nil + case 401: + result := NewUpdateAccessUnauthorized() + if err := result.readResponse(response, consumer, o.formats); err != nil { + return nil, err + } + return nil, result + case 404: + result := NewUpdateAccessNotFound() + if err := result.readResponse(response, consumer, o.formats); err != nil { + return nil, err + } + return nil, result + case 500: + result := NewUpdateAccessInternalServerError() + if err := result.readResponse(response, consumer, o.formats); err != nil { + return nil, err + } + return nil, result + default: + return nil, runtime.NewAPIError("[PATCH /access] updateAccess", response, response.Code()) + } +} + +// NewUpdateAccessOK creates a UpdateAccessOK with default headers values +func NewUpdateAccessOK() *UpdateAccessOK { + return &UpdateAccessOK{} +} + +/* +UpdateAccessOK describes a response with status code 200, with default header values. + +access updated +*/ +type UpdateAccessOK struct { +} + +// IsSuccess returns true when this update access o k response has a 2xx status code +func (o *UpdateAccessOK) IsSuccess() bool { + return true +} + +// IsRedirect returns true when this update access o k response has a 3xx status code +func (o *UpdateAccessOK) IsRedirect() bool { + return false +} + +// IsClientError returns true when this update access o k response has a 4xx status code +func (o *UpdateAccessOK) IsClientError() bool { + return false +} + +// IsServerError returns true when this update access o k response has a 5xx status code +func (o *UpdateAccessOK) IsServerError() bool { + return false +} + +// IsCode returns true when this update access o k response a status code equal to that given +func (o *UpdateAccessOK) IsCode(code int) bool { + return code == 200 +} + +// Code gets the status code for the update access o k response +func (o *UpdateAccessOK) Code() int { + return 200 +} + +func (o *UpdateAccessOK) Error() string { + return fmt.Sprintf("[PATCH /access][%d] updateAccessOK ", 200) +} + +func (o *UpdateAccessOK) String() string { + return fmt.Sprintf("[PATCH /access][%d] updateAccessOK ", 200) +} + +func (o *UpdateAccessOK) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { + + return nil +} + +// NewUpdateAccessUnauthorized creates a UpdateAccessUnauthorized with default headers values +func NewUpdateAccessUnauthorized() *UpdateAccessUnauthorized { + return &UpdateAccessUnauthorized{} +} + +/* +UpdateAccessUnauthorized describes a response with status code 401, with default header values. + +unauthorized +*/ +type UpdateAccessUnauthorized struct { +} + +// IsSuccess returns true when this update access unauthorized response has a 2xx status code +func (o *UpdateAccessUnauthorized) IsSuccess() bool { + return false +} + +// IsRedirect returns true when this update access unauthorized response has a 3xx status code +func (o *UpdateAccessUnauthorized) IsRedirect() bool { + return false +} + +// IsClientError returns true when this update access unauthorized response has a 4xx status code +func (o *UpdateAccessUnauthorized) IsClientError() bool { + return true +} + +// IsServerError returns true when this update access unauthorized response has a 5xx status code +func (o *UpdateAccessUnauthorized) IsServerError() bool { + return false +} + +// IsCode returns true when this update access unauthorized response a status code equal to that given +func (o *UpdateAccessUnauthorized) IsCode(code int) bool { + return code == 401 +} + +// Code gets the status code for the update access unauthorized response +func (o *UpdateAccessUnauthorized) Code() int { + return 401 +} + +func (o *UpdateAccessUnauthorized) Error() string { + return fmt.Sprintf("[PATCH /access][%d] updateAccessUnauthorized ", 401) +} + +func (o *UpdateAccessUnauthorized) String() string { + return fmt.Sprintf("[PATCH /access][%d] updateAccessUnauthorized ", 401) +} + +func (o *UpdateAccessUnauthorized) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { + + return nil +} + +// NewUpdateAccessNotFound creates a UpdateAccessNotFound with default headers values +func NewUpdateAccessNotFound() *UpdateAccessNotFound { + return &UpdateAccessNotFound{} +} + +/* +UpdateAccessNotFound describes a response with status code 404, with default header values. + +not found +*/ +type UpdateAccessNotFound struct { +} + +// IsSuccess returns true when this update access not found response has a 2xx status code +func (o *UpdateAccessNotFound) IsSuccess() bool { + return false +} + +// IsRedirect returns true when this update access not found response has a 3xx status code +func (o *UpdateAccessNotFound) IsRedirect() bool { + return false +} + +// IsClientError returns true when this update access not found response has a 4xx status code +func (o *UpdateAccessNotFound) IsClientError() bool { + return true +} + +// IsServerError returns true when this update access not found response has a 5xx status code +func (o *UpdateAccessNotFound) IsServerError() bool { + return false +} + +// IsCode returns true when this update access not found response a status code equal to that given +func (o *UpdateAccessNotFound) IsCode(code int) bool { + return code == 404 +} + +// Code gets the status code for the update access not found response +func (o *UpdateAccessNotFound) Code() int { + return 404 +} + +func (o *UpdateAccessNotFound) Error() string { + return fmt.Sprintf("[PATCH /access][%d] updateAccessNotFound ", 404) +} + +func (o *UpdateAccessNotFound) String() string { + return fmt.Sprintf("[PATCH /access][%d] updateAccessNotFound ", 404) +} + +func (o *UpdateAccessNotFound) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { + + return nil +} + +// NewUpdateAccessInternalServerError creates a UpdateAccessInternalServerError with default headers values +func NewUpdateAccessInternalServerError() *UpdateAccessInternalServerError { + return &UpdateAccessInternalServerError{} +} + +/* +UpdateAccessInternalServerError describes a response with status code 500, with default header values. + +internal server error +*/ +type UpdateAccessInternalServerError struct { +} + +// IsSuccess returns true when this update access internal server error response has a 2xx status code +func (o *UpdateAccessInternalServerError) IsSuccess() bool { + return false +} + +// IsRedirect returns true when this update access internal server error response has a 3xx status code +func (o *UpdateAccessInternalServerError) IsRedirect() bool { + return false +} + +// IsClientError returns true when this update access internal server error response has a 4xx status code +func (o *UpdateAccessInternalServerError) IsClientError() bool { + return false +} + +// IsServerError returns true when this update access internal server error response has a 5xx status code +func (o *UpdateAccessInternalServerError) IsServerError() bool { + return true +} + +// IsCode returns true when this update access internal server error response a status code equal to that given +func (o *UpdateAccessInternalServerError) IsCode(code int) bool { + return code == 500 +} + +// Code gets the status code for the update access internal server error response +func (o *UpdateAccessInternalServerError) Code() int { + return 500 +} + +func (o *UpdateAccessInternalServerError) Error() string { + return fmt.Sprintf("[PATCH /access][%d] updateAccessInternalServerError ", 500) +} + +func (o *UpdateAccessInternalServerError) String() string { + return fmt.Sprintf("[PATCH /access][%d] updateAccessInternalServerError ", 500) +} + +func (o *UpdateAccessInternalServerError) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { + + return nil +} + +/* +UpdateAccessBody update access body +swagger:model UpdateAccessBody +*/ +type UpdateAccessBody struct { + + // bind address + BindAddress string `json:"bindAddress,omitempty"` + + // description + Description string `json:"description,omitempty"` + + // frontend token + FrontendToken string `json:"frontendToken,omitempty"` +} + +// Validate validates this update access body +func (o *UpdateAccessBody) Validate(formats strfmt.Registry) error { + return nil +} + +// ContextValidate validates this update access body based on context it is used +func (o *UpdateAccessBody) ContextValidate(ctx context.Context, formats strfmt.Registry) error { + return nil +} + +// MarshalBinary interface implementation +func (o *UpdateAccessBody) MarshalBinary() ([]byte, error) { + if o == nil { + return nil, nil + } + return swag.WriteJSON(o) +} + +// UnmarshalBinary interface implementation +func (o *UpdateAccessBody) UnmarshalBinary(b []byte) error { + var res UpdateAccessBody + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *o = res + return nil +} diff --git a/rest_client_zrok/share/update_share_parameters.go b/rest_client_zrok/share/update_share_parameters.go index a39f6922..f91f9c52 100644 --- a/rest_client_zrok/share/update_share_parameters.go +++ b/rest_client_zrok/share/update_share_parameters.go @@ -14,8 +14,6 @@ import ( "github.com/go-openapi/runtime" cr "github.com/go-openapi/runtime/client" "github.com/go-openapi/strfmt" - - "github.com/openziti/zrok/rest_model_zrok" ) // NewUpdateShareParams creates a new UpdateShareParams object, @@ -64,7 +62,7 @@ UpdateShareParams contains all the parameters to send to the API endpoint type UpdateShareParams struct { // Body. - Body *rest_model_zrok.UpdateShareRequest + Body UpdateShareBody timeout time.Duration Context context.Context @@ -120,13 +118,13 @@ func (o *UpdateShareParams) SetHTTPClient(client *http.Client) { } // WithBody adds the body to the update share params -func (o *UpdateShareParams) WithBody(body *rest_model_zrok.UpdateShareRequest) *UpdateShareParams { +func (o *UpdateShareParams) WithBody(body UpdateShareBody) *UpdateShareParams { o.SetBody(body) return o } // SetBody adds the body to the update share params -func (o *UpdateShareParams) SetBody(body *rest_model_zrok.UpdateShareRequest) { +func (o *UpdateShareParams) SetBody(body UpdateShareBody) { o.Body = body } @@ -137,10 +135,8 @@ func (o *UpdateShareParams) WriteToRequest(r runtime.ClientRequest, reg strfmt.R return err } var res []error - if o.Body != nil { - if err := r.SetBodyParam(o.Body); err != nil { - return err - } + if err := r.SetBodyParam(o.Body); err != nil { + return err } if len(res) > 0 { diff --git a/rest_client_zrok/share/update_share_responses.go b/rest_client_zrok/share/update_share_responses.go index 5c25b46c..0478efa8 100644 --- a/rest_client_zrok/share/update_share_responses.go +++ b/rest_client_zrok/share/update_share_responses.go @@ -6,10 +6,12 @@ package share // Editing this file might prove futile when you re-run the swagger generate command import ( + "context" "fmt" "github.com/go-openapi/runtime" "github.com/go-openapi/strfmt" + "github.com/go-openapi/swag" ) // UpdateShareReader is a Reader for the UpdateShare structure. @@ -334,3 +336,50 @@ func (o *UpdateShareInternalServerError) readResponse(response runtime.ClientRes return nil } + +/* +UpdateShareBody update share body +swagger:model UpdateShareBody +*/ +type UpdateShareBody struct { + + // add access grants + AddAccessGrants []string `json:"addAccessGrants"` + + // backend proxy endpoint + BackendProxyEndpoint string `json:"backendProxyEndpoint,omitempty"` + + // remove access grants + RemoveAccessGrants []string `json:"removeAccessGrants"` + + // share token + ShareToken string `json:"shareToken,omitempty"` +} + +// Validate validates this update share body +func (o *UpdateShareBody) Validate(formats strfmt.Registry) error { + return nil +} + +// ContextValidate validates this update share body based on context it is used +func (o *UpdateShareBody) ContextValidate(ctx context.Context, formats strfmt.Registry) error { + return nil +} + +// MarshalBinary interface implementation +func (o *UpdateShareBody) MarshalBinary() ([]byte, error) { + if o == nil { + return nil, nil + } + return swag.WriteJSON(o) +} + +// UnmarshalBinary interface implementation +func (o *UpdateShareBody) UnmarshalBinary(b []byte) error { + var res UpdateShareBody + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *o = res + return nil +} diff --git a/rest_model_zrok/access_request.go b/rest_model_zrok/access_request.go deleted file mode 100644 index b5757ec4..00000000 --- a/rest_model_zrok/access_request.go +++ /dev/null @@ -1,53 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -package rest_model_zrok - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// AccessRequest access request -// -// swagger:model accessRequest -type AccessRequest struct { - - // env z Id - EnvZID string `json:"envZId,omitempty"` - - // shr token - ShrToken string `json:"shrToken,omitempty"` -} - -// Validate validates this access request -func (m *AccessRequest) Validate(formats strfmt.Registry) error { - return nil -} - -// ContextValidate validates this access request based on context it is used -func (m *AccessRequest) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *AccessRequest) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *AccessRequest) UnmarshalBinary(b []byte) error { - var res AccessRequest - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/rest_model_zrok/access_response.go b/rest_model_zrok/access_response.go deleted file mode 100644 index efff48ff..00000000 --- a/rest_model_zrok/access_response.go +++ /dev/null @@ -1,53 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -package rest_model_zrok - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// AccessResponse access response -// -// swagger:model accessResponse -type AccessResponse struct { - - // backend mode - BackendMode string `json:"backendMode,omitempty"` - - // frontend token - FrontendToken string `json:"frontendToken,omitempty"` -} - -// Validate validates this access response -func (m *AccessResponse) Validate(formats strfmt.Registry) error { - return nil -} - -// ContextValidate validates this access response based on context it is used -func (m *AccessResponse) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *AccessResponse) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *AccessResponse) UnmarshalBinary(b []byte) error { - var res AccessResponse - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/rest_model_zrok/change_password_request.go b/rest_model_zrok/change_password_request.go deleted file mode 100644 index 962219d1..00000000 --- a/rest_model_zrok/change_password_request.go +++ /dev/null @@ -1,56 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -package rest_model_zrok - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// ChangePasswordRequest change password request -// -// swagger:model changePasswordRequest -type ChangePasswordRequest struct { - - // email - Email string `json:"email,omitempty"` - - // new password - NewPassword string `json:"newPassword,omitempty"` - - // old password - OldPassword string `json:"oldPassword,omitempty"` -} - -// Validate validates this change password request -func (m *ChangePasswordRequest) Validate(formats strfmt.Registry) error { - return nil -} - -// ContextValidate validates this change password request based on context it is used -func (m *ChangePasswordRequest) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *ChangePasswordRequest) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *ChangePasswordRequest) UnmarshalBinary(b []byte) error { - var res ChangePasswordRequest - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/rest_model_zrok/configuration.go b/rest_model_zrok/configuration.go index 680a1254..8486455a 100644 --- a/rest_model_zrok/configuration.go +++ b/rest_model_zrok/configuration.go @@ -8,7 +8,6 @@ package rest_model_zrok import ( "context" - "github.com/go-openapi/errors" "github.com/go-openapi/strfmt" "github.com/go-openapi/swag" ) @@ -24,9 +23,6 @@ type Configuration struct { // invites open InvitesOpen bool `json:"invitesOpen,omitempty"` - // password requirements - PasswordRequirements *PasswordRequirements `json:"passwordRequirements,omitempty"` - // requires invite token RequiresInviteToken bool `json:"requiresInviteToken,omitempty"` @@ -39,69 +35,11 @@ type Configuration struct { // Validate validates this configuration func (m *Configuration) Validate(formats strfmt.Registry) error { - var res []error - - if err := m.validatePasswordRequirements(formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } return nil } -func (m *Configuration) validatePasswordRequirements(formats strfmt.Registry) error { - if swag.IsZero(m.PasswordRequirements) { // not required - return nil - } - - if m.PasswordRequirements != nil { - if err := m.PasswordRequirements.Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("passwordRequirements") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("passwordRequirements") - } - return err - } - } - - return nil -} - -// ContextValidate validate this configuration based on the context it is used +// ContextValidate validates this configuration based on context it is used func (m *Configuration) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - var res []error - - if err := m.contextValidatePasswordRequirements(ctx, formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *Configuration) contextValidatePasswordRequirements(ctx context.Context, formats strfmt.Registry) error { - - if m.PasswordRequirements != nil { - - if swag.IsZero(m.PasswordRequirements) { // not required - return nil - } - - if err := m.PasswordRequirements.ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("passwordRequirements") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("passwordRequirements") - } - return err - } - } - return nil } diff --git a/rest_model_zrok/create_frontend_request.go b/rest_model_zrok/create_frontend_request.go deleted file mode 100644 index 183b65ea..00000000 --- a/rest_model_zrok/create_frontend_request.go +++ /dev/null @@ -1,114 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -package rest_model_zrok - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - "encoding/json" - - "github.com/go-openapi/errors" - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" - "github.com/go-openapi/validate" -) - -// CreateFrontendRequest create frontend request -// -// swagger:model createFrontendRequest -type CreateFrontendRequest struct { - - // permission mode - // Enum: [open closed] - PermissionMode string `json:"permissionMode,omitempty"` - - // public name - PublicName string `json:"public_name,omitempty"` - - // url template - URLTemplate string `json:"url_template,omitempty"` - - // z Id - ZID string `json:"zId,omitempty"` -} - -// Validate validates this create frontend request -func (m *CreateFrontendRequest) Validate(formats strfmt.Registry) error { - var res []error - - if err := m.validatePermissionMode(formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -var createFrontendRequestTypePermissionModePropEnum []interface{} - -func init() { - var res []string - if err := json.Unmarshal([]byte(`["open","closed"]`), &res); err != nil { - panic(err) - } - for _, v := range res { - createFrontendRequestTypePermissionModePropEnum = append(createFrontendRequestTypePermissionModePropEnum, v) - } -} - -const ( - - // CreateFrontendRequestPermissionModeOpen captures enum value "open" - CreateFrontendRequestPermissionModeOpen string = "open" - - // CreateFrontendRequestPermissionModeClosed captures enum value "closed" - CreateFrontendRequestPermissionModeClosed string = "closed" -) - -// prop value enum -func (m *CreateFrontendRequest) validatePermissionModeEnum(path, location string, value string) error { - if err := validate.EnumCase(path, location, value, createFrontendRequestTypePermissionModePropEnum, true); err != nil { - return err - } - return nil -} - -func (m *CreateFrontendRequest) validatePermissionMode(formats strfmt.Registry) error { - if swag.IsZero(m.PermissionMode) { // not required - return nil - } - - // value enum - if err := m.validatePermissionModeEnum("permissionMode", "body", m.PermissionMode); err != nil { - return err - } - - return nil -} - -// ContextValidate validates this create frontend request based on context it is used -func (m *CreateFrontendRequest) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *CreateFrontendRequest) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *CreateFrontendRequest) UnmarshalBinary(b []byte) error { - var res CreateFrontendRequest - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/rest_model_zrok/create_frontend_response.go b/rest_model_zrok/create_frontend_response.go deleted file mode 100644 index 88540dc5..00000000 --- a/rest_model_zrok/create_frontend_response.go +++ /dev/null @@ -1,50 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -package rest_model_zrok - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// CreateFrontendResponse create frontend response -// -// swagger:model createFrontendResponse -type CreateFrontendResponse struct { - - // token - Token string `json:"token,omitempty"` -} - -// Validate validates this create frontend response -func (m *CreateFrontendResponse) Validate(formats strfmt.Registry) error { - return nil -} - -// ContextValidate validates this create frontend response based on context it is used -func (m *CreateFrontendResponse) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *CreateFrontendResponse) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *CreateFrontendResponse) UnmarshalBinary(b []byte) error { - var res CreateFrontendResponse - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/rest_model_zrok/delete_frontend_request.go b/rest_model_zrok/delete_frontend_request.go deleted file mode 100644 index 6b5a456f..00000000 --- a/rest_model_zrok/delete_frontend_request.go +++ /dev/null @@ -1,50 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -package rest_model_zrok - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// DeleteFrontendRequest delete frontend request -// -// swagger:model deleteFrontendRequest -type DeleteFrontendRequest struct { - - // frontend token - FrontendToken string `json:"frontendToken,omitempty"` -} - -// Validate validates this delete frontend request -func (m *DeleteFrontendRequest) Validate(formats strfmt.Registry) error { - return nil -} - -// ContextValidate validates this delete frontend request based on context it is used -func (m *DeleteFrontendRequest) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *DeleteFrontendRequest) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *DeleteFrontendRequest) UnmarshalBinary(b []byte) error { - var res DeleteFrontendRequest - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/rest_model_zrok/disable_request.go b/rest_model_zrok/disable_request.go deleted file mode 100644 index 912010d2..00000000 --- a/rest_model_zrok/disable_request.go +++ /dev/null @@ -1,50 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -package rest_model_zrok - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// DisableRequest disable request -// -// swagger:model disableRequest -type DisableRequest struct { - - // identity - Identity string `json:"identity,omitempty"` -} - -// Validate validates this disable request -func (m *DisableRequest) Validate(formats strfmt.Registry) error { - return nil -} - -// ContextValidate validates this disable request based on context it is used -func (m *DisableRequest) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *DisableRequest) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *DisableRequest) UnmarshalBinary(b []byte) error { - var res DisableRequest - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/rest_model_zrok/enable_request.go b/rest_model_zrok/enable_request.go deleted file mode 100644 index a62f7e69..00000000 --- a/rest_model_zrok/enable_request.go +++ /dev/null @@ -1,53 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -package rest_model_zrok - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// EnableRequest enable request -// -// swagger:model enableRequest -type EnableRequest struct { - - // description - Description string `json:"description,omitempty"` - - // host - Host string `json:"host,omitempty"` -} - -// Validate validates this enable request -func (m *EnableRequest) Validate(formats strfmt.Registry) error { - return nil -} - -// ContextValidate validates this enable request based on context it is used -func (m *EnableRequest) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *EnableRequest) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *EnableRequest) UnmarshalBinary(b []byte) error { - var res EnableRequest - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/rest_model_zrok/enable_response.go b/rest_model_zrok/enable_response.go deleted file mode 100644 index d2c218f4..00000000 --- a/rest_model_zrok/enable_response.go +++ /dev/null @@ -1,53 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -package rest_model_zrok - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// EnableResponse enable response -// -// swagger:model enableResponse -type EnableResponse struct { - - // cfg - Cfg string `json:"cfg,omitempty"` - - // identity - Identity string `json:"identity,omitempty"` -} - -// Validate validates this enable response -func (m *EnableResponse) Validate(formats strfmt.Registry) error { - return nil -} - -// ContextValidate validates this enable response based on context it is used -func (m *EnableResponse) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *EnableResponse) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *EnableResponse) UnmarshalBinary(b []byte) error { - var res EnableResponse - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/rest_model_zrok/environment_shares.go b/rest_model_zrok/environment_shares.go deleted file mode 100644 index 8e543d1e..00000000 --- a/rest_model_zrok/environment_shares.go +++ /dev/null @@ -1,146 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -package rest_model_zrok - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/errors" - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// EnvironmentShares environment shares -// -// swagger:model environmentShares -type EnvironmentShares struct { - - // environment - Environment *Environment `json:"environment,omitempty"` - - // shares - Shares Shares `json:"shares,omitempty"` -} - -// Validate validates this environment shares -func (m *EnvironmentShares) Validate(formats strfmt.Registry) error { - var res []error - - if err := m.validateEnvironment(formats); err != nil { - res = append(res, err) - } - - if err := m.validateShares(formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *EnvironmentShares) validateEnvironment(formats strfmt.Registry) error { - if swag.IsZero(m.Environment) { // not required - return nil - } - - if m.Environment != nil { - if err := m.Environment.Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("environment") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("environment") - } - return err - } - } - - return nil -} - -func (m *EnvironmentShares) validateShares(formats strfmt.Registry) error { - if swag.IsZero(m.Shares) { // not required - return nil - } - - if err := m.Shares.Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("shares") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("shares") - } - return err - } - - return nil -} - -// ContextValidate validate this environment shares based on the context it is used -func (m *EnvironmentShares) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - var res []error - - if err := m.contextValidateEnvironment(ctx, formats); err != nil { - res = append(res, err) - } - - if err := m.contextValidateShares(ctx, formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (m *EnvironmentShares) contextValidateEnvironment(ctx context.Context, formats strfmt.Registry) error { - - if m.Environment != nil { - if err := m.Environment.ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("environment") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("environment") - } - return err - } - } - - return nil -} - -func (m *EnvironmentShares) contextValidateShares(ctx context.Context, formats strfmt.Registry) error { - - if err := m.Shares.ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("shares") - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("shares") - } - return err - } - - return nil -} - -// MarshalBinary interface implementation -func (m *EnvironmentShares) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *EnvironmentShares) UnmarshalBinary(b []byte) error { - var res EnvironmentShares - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/rest_model_zrok/environment_shares_list.go b/rest_model_zrok/environment_shares_list.go deleted file mode 100644 index bf67a652..00000000 --- a/rest_model_zrok/environment_shares_list.go +++ /dev/null @@ -1,73 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -package rest_model_zrok - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - "strconv" - - "github.com/go-openapi/errors" - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// EnvironmentSharesList environment shares list -// -// swagger:model environmentSharesList -type EnvironmentSharesList []*EnvironmentShares - -// Validate validates this environment shares list -func (m EnvironmentSharesList) Validate(formats strfmt.Registry) error { - var res []error - - for i := 0; i < len(m); i++ { - if swag.IsZero(m[i]) { // not required - continue - } - - if m[i] != nil { - if err := m[i].Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName(strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName(strconv.Itoa(i)) - } - return err - } - } - - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -// ContextValidate validate this environment shares list based on the context it is used -func (m EnvironmentSharesList) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - var res []error - - for i := 0; i < len(m); i++ { - - if m[i] != nil { - if err := m[i].ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName(strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName(strconv.Itoa(i)) - } - return err - } - } - - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} diff --git a/rest_model_zrok/frontend.go b/rest_model_zrok/frontend.go index 5e13f2c9..f5e03365 100644 --- a/rest_model_zrok/frontend.go +++ b/rest_model_zrok/frontend.go @@ -17,17 +17,26 @@ import ( // swagger:model frontend type Frontend struct { + // backend mode + BackendMode string `json:"backendMode,omitempty"` + + // bind address + BindAddress string `json:"bindAddress,omitempty"` + // created at CreatedAt int64 `json:"createdAt,omitempty"` + // description + Description string `json:"description,omitempty"` + + // frontend token + FrontendToken string `json:"frontendToken,omitempty"` + // id ID int64 `json:"id,omitempty"` - // shr token - ShrToken string `json:"shrToken,omitempty"` - - // token - Token string `json:"token,omitempty"` + // share token + ShareToken string `json:"shareToken,omitempty"` // updated at UpdatedAt int64 `json:"updatedAt,omitempty"` diff --git a/rest_model_zrok/invite_request.go b/rest_model_zrok/invite_request.go deleted file mode 100644 index 936c5c3e..00000000 --- a/rest_model_zrok/invite_request.go +++ /dev/null @@ -1,53 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -package rest_model_zrok - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// InviteRequest invite request -// -// swagger:model inviteRequest -type InviteRequest struct { - - // email - Email string `json:"email,omitempty"` - - // token - Token string `json:"token,omitempty"` -} - -// Validate validates this invite request -func (m *InviteRequest) Validate(formats strfmt.Registry) error { - return nil -} - -// ContextValidate validates this invite request based on context it is used -func (m *InviteRequest) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *InviteRequest) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *InviteRequest) UnmarshalBinary(b []byte) error { - var res InviteRequest - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/rest_model_zrok/invite_token_generate_request.go b/rest_model_zrok/invite_token_generate_request.go deleted file mode 100644 index 94ae7072..00000000 --- a/rest_model_zrok/invite_token_generate_request.go +++ /dev/null @@ -1,50 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -package rest_model_zrok - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// InviteTokenGenerateRequest invite token generate request -// -// swagger:model inviteTokenGenerateRequest -type InviteTokenGenerateRequest struct { - - // tokens - Tokens []string `json:"tokens"` -} - -// Validate validates this invite token generate request -func (m *InviteTokenGenerateRequest) Validate(formats strfmt.Registry) error { - return nil -} - -// ContextValidate validates this invite token generate request based on context it is used -func (m *InviteTokenGenerateRequest) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *InviteTokenGenerateRequest) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *InviteTokenGenerateRequest) UnmarshalBinary(b []byte) error { - var res InviteTokenGenerateRequest - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/rest_model_zrok/login_request.go b/rest_model_zrok/login_request.go deleted file mode 100644 index e82c6bd8..00000000 --- a/rest_model_zrok/login_request.go +++ /dev/null @@ -1,53 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -package rest_model_zrok - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// LoginRequest login request -// -// swagger:model loginRequest -type LoginRequest struct { - - // email - Email string `json:"email,omitempty"` - - // password - Password string `json:"password,omitempty"` -} - -// Validate validates this login request -func (m *LoginRequest) Validate(formats strfmt.Registry) error { - return nil -} - -// ContextValidate validates this login request based on context it is used -func (m *LoginRequest) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *LoginRequest) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *LoginRequest) UnmarshalBinary(b []byte) error { - var res LoginRequest - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/rest_model_zrok/login_response.go b/rest_model_zrok/login_response.go deleted file mode 100644 index 15f1dcd3..00000000 --- a/rest_model_zrok/login_response.go +++ /dev/null @@ -1,27 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -package rest_model_zrok - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/strfmt" -) - -// LoginResponse login response -// -// swagger:model loginResponse -type LoginResponse string - -// Validate validates this login response -func (m LoginResponse) Validate(formats strfmt.Registry) error { - return nil -} - -// ContextValidate validates this login response based on context it is used -func (m LoginResponse) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} diff --git a/rest_model_zrok/password_requirements.go b/rest_model_zrok/password_requirements.go deleted file mode 100644 index 2672ef78..00000000 --- a/rest_model_zrok/password_requirements.go +++ /dev/null @@ -1,62 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -package rest_model_zrok - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// PasswordRequirements password requirements -// -// swagger:model passwordRequirements -type PasswordRequirements struct { - - // length - Length int64 `json:"length,omitempty"` - - // require capital - RequireCapital bool `json:"requireCapital,omitempty"` - - // require numeric - RequireNumeric bool `json:"requireNumeric,omitempty"` - - // require special - RequireSpecial bool `json:"requireSpecial,omitempty"` - - // valid special characters - ValidSpecialCharacters string `json:"validSpecialCharacters,omitempty"` -} - -// Validate validates this password requirements -func (m *PasswordRequirements) Validate(formats strfmt.Registry) error { - return nil -} - -// ContextValidate validates this password requirements based on context it is used -func (m *PasswordRequirements) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *PasswordRequirements) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *PasswordRequirements) UnmarshalBinary(b []byte) error { - var res PasswordRequirements - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/rest_model_zrok/public_frontend.go b/rest_model_zrok/public_frontend.go deleted file mode 100644 index 13f6bf18..00000000 --- a/rest_model_zrok/public_frontend.go +++ /dev/null @@ -1,65 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -package rest_model_zrok - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// PublicFrontend public frontend -// -// swagger:model publicFrontend -type PublicFrontend struct { - - // created at - CreatedAt int64 `json:"createdAt,omitempty"` - - // public name - PublicName string `json:"publicName,omitempty"` - - // token - Token string `json:"token,omitempty"` - - // updated at - UpdatedAt int64 `json:"updatedAt,omitempty"` - - // url template - URLTemplate string `json:"urlTemplate,omitempty"` - - // z Id - ZID string `json:"zId,omitempty"` -} - -// Validate validates this public frontend -func (m *PublicFrontend) Validate(formats strfmt.Registry) error { - return nil -} - -// ContextValidate validates this public frontend based on context it is used -func (m *PublicFrontend) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *PublicFrontend) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *PublicFrontend) UnmarshalBinary(b []byte) error { - var res PublicFrontend - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/rest_model_zrok/public_frontend_list.go b/rest_model_zrok/public_frontend_list.go deleted file mode 100644 index 7f294bc5..00000000 --- a/rest_model_zrok/public_frontend_list.go +++ /dev/null @@ -1,78 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -package rest_model_zrok - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - "strconv" - - "github.com/go-openapi/errors" - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// PublicFrontendList public frontend list -// -// swagger:model publicFrontendList -type PublicFrontendList []*PublicFrontend - -// Validate validates this public frontend list -func (m PublicFrontendList) Validate(formats strfmt.Registry) error { - var res []error - - for i := 0; i < len(m); i++ { - if swag.IsZero(m[i]) { // not required - continue - } - - if m[i] != nil { - if err := m[i].Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName(strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName(strconv.Itoa(i)) - } - return err - } - } - - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -// ContextValidate validate this public frontend list based on the context it is used -func (m PublicFrontendList) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - var res []error - - for i := 0; i < len(m); i++ { - - if m[i] != nil { - - if swag.IsZero(m[i]) { // not required - return nil - } - - if err := m[i].ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName(strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName(strconv.Itoa(i)) - } - return err - } - } - - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} diff --git a/rest_model_zrok/register_request.go b/rest_model_zrok/register_request.go deleted file mode 100644 index b141dacc..00000000 --- a/rest_model_zrok/register_request.go +++ /dev/null @@ -1,53 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -package rest_model_zrok - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// RegisterRequest register request -// -// swagger:model registerRequest -type RegisterRequest struct { - - // password - Password string `json:"password,omitempty"` - - // token - Token string `json:"token,omitempty"` -} - -// Validate validates this register request -func (m *RegisterRequest) Validate(formats strfmt.Registry) error { - return nil -} - -// ContextValidate validates this register request based on context it is used -func (m *RegisterRequest) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *RegisterRequest) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *RegisterRequest) UnmarshalBinary(b []byte) error { - var res RegisterRequest - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/rest_model_zrok/register_response.go b/rest_model_zrok/register_response.go deleted file mode 100644 index 619af9c4..00000000 --- a/rest_model_zrok/register_response.go +++ /dev/null @@ -1,50 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -package rest_model_zrok - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// RegisterResponse register response -// -// swagger:model registerResponse -type RegisterResponse struct { - - // token - Token string `json:"token,omitempty"` -} - -// Validate validates this register response -func (m *RegisterResponse) Validate(formats strfmt.Registry) error { - return nil -} - -// ContextValidate validates this register response based on context it is used -func (m *RegisterResponse) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *RegisterResponse) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *RegisterResponse) UnmarshalBinary(b []byte) error { - var res RegisterResponse - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/rest_model_zrok/reset_password_request.go b/rest_model_zrok/reset_password_request.go deleted file mode 100644 index bafb93ca..00000000 --- a/rest_model_zrok/reset_password_request.go +++ /dev/null @@ -1,53 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -package rest_model_zrok - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// ResetPasswordRequest reset password request -// -// swagger:model resetPasswordRequest -type ResetPasswordRequest struct { - - // password - Password string `json:"password,omitempty"` - - // token - Token string `json:"token,omitempty"` -} - -// Validate validates this reset password request -func (m *ResetPasswordRequest) Validate(formats strfmt.Registry) error { - return nil -} - -// ContextValidate validates this reset password request based on context it is used -func (m *ResetPasswordRequest) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *ResetPasswordRequest) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *ResetPasswordRequest) UnmarshalBinary(b []byte) error { - var res ResetPasswordRequest - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/rest_model_zrok/share.go b/rest_model_zrok/share.go index 998744b4..1c1bda87 100644 --- a/rest_model_zrok/share.go +++ b/rest_model_zrok/share.go @@ -45,8 +45,8 @@ type Share struct { // share mode ShareMode string `json:"shareMode,omitempty"` - // token - Token string `json:"token,omitempty"` + // share token + ShareToken string `json:"shareToken,omitempty"` // updated at UpdatedAt int64 `json:"updatedAt,omitempty"` diff --git a/rest_model_zrok/share_metrics.go b/rest_model_zrok/share_metrics.go deleted file mode 100644 index e7a109eb..00000000 --- a/rest_model_zrok/share_metrics.go +++ /dev/null @@ -1,73 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -package rest_model_zrok - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - "strconv" - - "github.com/go-openapi/errors" - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// ShareMetrics share metrics -// -// swagger:model shareMetrics -type ShareMetrics []*ShareMetricsSample - -// Validate validates this share metrics -func (m ShareMetrics) Validate(formats strfmt.Registry) error { - var res []error - - for i := 0; i < len(m); i++ { - if swag.IsZero(m[i]) { // not required - continue - } - - if m[i] != nil { - if err := m[i].Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName(strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName(strconv.Itoa(i)) - } - return err - } - } - - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -// ContextValidate validate this share metrics based on the context it is used -func (m ShareMetrics) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - var res []error - - for i := 0; i < len(m); i++ { - - if m[i] != nil { - if err := m[i].ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName(strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName(strconv.Itoa(i)) - } - return err - } - } - - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} diff --git a/rest_model_zrok/share_metrics_sample.go b/rest_model_zrok/share_metrics_sample.go deleted file mode 100644 index bc725aad..00000000 --- a/rest_model_zrok/share_metrics_sample.go +++ /dev/null @@ -1,56 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -package rest_model_zrok - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// ShareMetricsSample share metrics sample -// -// swagger:model shareMetricsSample -type ShareMetricsSample struct { - - // rx - Rx float64 `json:"rx,omitempty"` - - // timestamp - Timestamp float64 `json:"timestamp,omitempty"` - - // tx - Tx float64 `json:"tx,omitempty"` -} - -// Validate validates this share metrics sample -func (m *ShareMetricsSample) Validate(formats strfmt.Registry) error { - return nil -} - -// ContextValidate validates this share metrics sample based on context it is used -func (m *ShareMetricsSample) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *ShareMetricsSample) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *ShareMetricsSample) UnmarshalBinary(b []byte) error { - var res ShareMetricsSample - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/rest_model_zrok/share_response.go b/rest_model_zrok/share_response.go index 9db6213a..82a632a7 100644 --- a/rest_model_zrok/share_response.go +++ b/rest_model_zrok/share_response.go @@ -20,8 +20,8 @@ type ShareResponse struct { // frontend proxy endpoints FrontendProxyEndpoints []string `json:"frontendProxyEndpoints"` - // shr token - ShrToken string `json:"shrToken,omitempty"` + // share token + ShareToken string `json:"shareToken,omitempty"` } // Validate validates this share response diff --git a/rest_model_zrok/unaccess_request.go b/rest_model_zrok/unaccess_request.go deleted file mode 100644 index f849e747..00000000 --- a/rest_model_zrok/unaccess_request.go +++ /dev/null @@ -1,56 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -package rest_model_zrok - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// UnaccessRequest unaccess request -// -// swagger:model unaccessRequest -type UnaccessRequest struct { - - // env z Id - EnvZID string `json:"envZId,omitempty"` - - // frontend token - FrontendToken string `json:"frontendToken,omitempty"` - - // shr token - ShrToken string `json:"shrToken,omitempty"` -} - -// Validate validates this unaccess request -func (m *UnaccessRequest) Validate(formats strfmt.Registry) error { - return nil -} - -// ContextValidate validates this unaccess request based on context it is used -func (m *UnaccessRequest) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *UnaccessRequest) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *UnaccessRequest) UnmarshalBinary(b []byte) error { - var res UnaccessRequest - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/rest_model_zrok/unshare_request.go b/rest_model_zrok/unshare_request.go deleted file mode 100644 index 9cf8b494..00000000 --- a/rest_model_zrok/unshare_request.go +++ /dev/null @@ -1,56 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -package rest_model_zrok - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// UnshareRequest unshare request -// -// swagger:model unshareRequest -type UnshareRequest struct { - - // env z Id - EnvZID string `json:"envZId,omitempty"` - - // reserved - Reserved bool `json:"reserved,omitempty"` - - // shr token - ShrToken string `json:"shrToken,omitempty"` -} - -// Validate validates this unshare request -func (m *UnshareRequest) Validate(formats strfmt.Registry) error { - return nil -} - -// ContextValidate validates this unshare request based on context it is used -func (m *UnshareRequest) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *UnshareRequest) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *UnshareRequest) UnmarshalBinary(b []byte) error { - var res UnshareRequest - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/rest_model_zrok/update_frontend_request.go b/rest_model_zrok/update_frontend_request.go deleted file mode 100644 index 0da59f39..00000000 --- a/rest_model_zrok/update_frontend_request.go +++ /dev/null @@ -1,56 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -package rest_model_zrok - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// UpdateFrontendRequest update frontend request -// -// swagger:model updateFrontendRequest -type UpdateFrontendRequest struct { - - // frontend token - FrontendToken string `json:"frontendToken,omitempty"` - - // public name - PublicName string `json:"publicName,omitempty"` - - // url template - URLTemplate string `json:"urlTemplate,omitempty"` -} - -// Validate validates this update frontend request -func (m *UpdateFrontendRequest) Validate(formats strfmt.Registry) error { - return nil -} - -// ContextValidate validates this update frontend request based on context it is used -func (m *UpdateFrontendRequest) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *UpdateFrontendRequest) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *UpdateFrontendRequest) UnmarshalBinary(b []byte) error { - var res UpdateFrontendRequest - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/rest_model_zrok/update_share_request.go b/rest_model_zrok/update_share_request.go deleted file mode 100644 index 28a66045..00000000 --- a/rest_model_zrok/update_share_request.go +++ /dev/null @@ -1,59 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -package rest_model_zrok - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// UpdateShareRequest update share request -// -// swagger:model updateShareRequest -type UpdateShareRequest struct { - - // add access grants - AddAccessGrants []string `json:"addAccessGrants"` - - // backend proxy endpoint - BackendProxyEndpoint string `json:"backendProxyEndpoint,omitempty"` - - // remove access grants - RemoveAccessGrants []string `json:"removeAccessGrants"` - - // shr token - ShrToken string `json:"shrToken,omitempty"` -} - -// Validate validates this update share request -func (m *UpdateShareRequest) Validate(formats strfmt.Registry) error { - return nil -} - -// ContextValidate validates this update share request based on context it is used -func (m *UpdateShareRequest) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *UpdateShareRequest) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *UpdateShareRequest) UnmarshalBinary(b []byte) error { - var res UpdateShareRequest - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/rest_model_zrok/verify_request.go b/rest_model_zrok/verify_request.go deleted file mode 100644 index 4d69a1e4..00000000 --- a/rest_model_zrok/verify_request.go +++ /dev/null @@ -1,50 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -package rest_model_zrok - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// VerifyRequest verify request -// -// swagger:model verifyRequest -type VerifyRequest struct { - - // token - Token string `json:"token,omitempty"` -} - -// Validate validates this verify request -func (m *VerifyRequest) Validate(formats strfmt.Registry) error { - return nil -} - -// ContextValidate validates this verify request based on context it is used -func (m *VerifyRequest) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *VerifyRequest) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *VerifyRequest) UnmarshalBinary(b []byte) error { - var res VerifyRequest - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/rest_model_zrok/verify_response.go b/rest_model_zrok/verify_response.go deleted file mode 100644 index efe468c2..00000000 --- a/rest_model_zrok/verify_response.go +++ /dev/null @@ -1,50 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -package rest_model_zrok - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "context" - - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// VerifyResponse verify response -// -// swagger:model verifyResponse -type VerifyResponse struct { - - // email - Email string `json:"email,omitempty"` -} - -// Validate validates this verify response -func (m *VerifyResponse) Validate(formats strfmt.Registry) error { - return nil -} - -// ContextValidate validates this verify response based on context it is used -func (m *VerifyResponse) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (m *VerifyResponse) MarshalBinary() ([]byte, error) { - if m == nil { - return nil, nil - } - return swag.WriteJSON(m) -} - -// UnmarshalBinary interface implementation -func (m *VerifyResponse) UnmarshalBinary(b []byte) error { - var res VerifyResponse - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *m = res - return nil -} diff --git a/rest_server_zrok/doc.go b/rest_server_zrok/doc.go index 98311f93..aef023ab 100644 --- a/rest_server_zrok/doc.go +++ b/rest_server_zrok/doc.go @@ -7,7 +7,7 @@ // http // Host: localhost // BasePath: /api/v1 -// Version: 0.3.0 +// Version: 1.0.0 // // Consumes: // - application/zrok.v1+json diff --git a/rest_server_zrok/embedded_spec.go b/rest_server_zrok/embedded_spec.go index 3879712e..10a29c5b 100644 --- a/rest_server_zrok/embedded_spec.go +++ b/rest_server_zrok/embedded_spec.go @@ -31,7 +31,7 @@ func init() { "info": { "description": "zrok client access", "title": "zrok", - "version": "0.3.0" + "version": "1.0.0" }, "basePath": "/api/v1", "paths": { @@ -51,7 +51,20 @@ func init() { "name": "body", "in": "body", "schema": { - "$ref": "#/definitions/accessRequest" + "properties": { + "bindAddress": { + "type": "string" + }, + "description": { + "type": "string" + }, + "envZId": { + "type": "string" + }, + "shareToken": { + "type": "string" + } + } } } ], @@ -59,7 +72,14 @@ func init() { "201": { "description": "access created", "schema": { - "$ref": "#/definitions/accessResponse" + "properties": { + "backendMode": { + "type": "string" + }, + "frontendToken": { + "type": "string" + } + } } }, "401": { @@ -72,6 +92,50 @@ func init() { "description": "internal server error" } } + }, + "patch": { + "security": [ + { + "key": [] + } + ], + "tags": [ + "share" + ], + "operationId": "updateAccess", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "properties": { + "bindAddress": { + "type": "string" + }, + "description": { + "type": "string" + }, + "frontendToken": { + "type": "string" + } + } + } + } + ], + "responses": { + "200": { + "description": "access updated" + }, + "401": { + "description": "unauthorized" + }, + "404": { + "description": "not found" + }, + "500": { + "description": "internal server error" + } + } } }, "/account": { @@ -106,7 +170,7 @@ func init() { "description": "created", "schema": { "properties": { - "token": { + "accountToken": { "type": "string" } } @@ -137,13 +201,23 @@ func init() { "name": "body", "in": "body", "schema": { - "$ref": "#/definitions/changePasswordRequest" + "properties": { + "email": { + "type": "string" + }, + "newPassword": { + "type": "string" + }, + "oldPassword": { + "type": "string" + } + } } } ], "responses": { "200": { - "description": "changed password" + "description": "password changed" }, "400": { "description": "password not changed" @@ -241,7 +315,7 @@ func init() { } } }, - "/detail/frontend/{feId}": { + "/detail/frontend/{frontendId}": { "get": { "security": [ { @@ -255,7 +329,7 @@ func init() { "parameters": [ { "type": "integer", - "name": "feId", + "name": "frontendId", "in": "path", "required": true } @@ -279,7 +353,7 @@ func init() { } } }, - "/detail/share/{shrToken}": { + "/detail/share/{shareToken}": { "get": { "security": [ { @@ -293,7 +367,7 @@ func init() { "parameters": [ { "type": "string", - "name": "shrToken", + "name": "shareToken", "in": "path", "required": true } @@ -333,7 +407,11 @@ func init() { "name": "body", "in": "body", "schema": { - "$ref": "#/definitions/disableRequest" + "properties": { + "identity": { + "type": "string" + } + } } } ], @@ -366,7 +444,14 @@ func init() { "name": "body", "in": "body", "schema": { - "$ref": "#/definitions/enableRequest" + "properties": { + "description": { + "type": "string" + }, + "host": { + "type": "string" + } + } } } ], @@ -374,7 +459,14 @@ func init() { "201": { "description": "environment enabled", "schema": { - "$ref": "#/definitions/enableResponse" + "properties": { + "cfg": { + "type": "string" + }, + "identity": { + "type": "string" + } + } } }, "401": { @@ -405,7 +497,25 @@ func init() { "name": "body", "in": "body", "schema": { - "$ref": "#/definitions/createFrontendRequest" + "type": "object", + "properties": { + "permissionMode": { + "type": "string", + "enum": [ + "open", + "closed" + ] + }, + "public_name": { + "type": "string" + }, + "url_template": { + "type": "string" + }, + "zId": { + "type": "string" + } + } } } ], @@ -413,7 +523,12 @@ func init() { "201": { "description": "frontend created", "schema": { - "$ref": "#/definitions/createFrontendResponse" + "type": "object", + "properties": { + "frontendToken": { + "type": "string" + } + } } }, "400": { @@ -445,7 +560,12 @@ func init() { "name": "body", "in": "body", "schema": { - "$ref": "#/definitions/deleteFrontendRequest" + "type": "object", + "properties": { + "frontendToken": { + "type": "string" + } + } } } ], @@ -479,7 +599,18 @@ func init() { "name": "body", "in": "body", "schema": { - "$ref": "#/definitions/updateFrontendRequest" + "type": "object", + "properties": { + "frontendToken": { + "type": "string" + }, + "publicName": { + "type": "string" + }, + "urlTemplate": { + "type": "string" + } + } } } ], @@ -514,7 +645,30 @@ func init() { "200": { "description": "ok", "schema": { - "$ref": "#/definitions/publicFrontendList" + "type": "array", + "items": { + "type": "object", + "properties": { + "createdAt": { + "type": "integer" + }, + "frontendToken": { + "type": "string" + }, + "publicName": { + "type": "string" + }, + "updatedAt": { + "type": "integer" + }, + "urlTemplate": { + "type": "string" + }, + "zId": { + "type": "string" + } + } + } } }, "401": { @@ -624,7 +778,14 @@ func init() { "name": "body", "in": "body", "schema": { - "$ref": "#/definitions/inviteRequest" + "properties": { + "email": { + "type": "string" + }, + "inviteToken": { + "type": "string" + } + } } } ], @@ -663,16 +824,23 @@ func init() { "name": "body", "in": "body", "schema": { - "$ref": "#/definitions/inviteTokenGenerateRequest" + "properties": { + "inviteTokens": { + "type": "array", + "items": { + "type": "string" + } + } + } } } ], "responses": { "201": { - "description": "invitation tokens created" + "description": "invite tokens created" }, "400": { - "description": "invitation tokens not created" + "description": "invite tokens not created" }, "401": { "description": "unauthorized" @@ -694,7 +862,14 @@ func init() { "name": "body", "in": "body", "schema": { - "$ref": "#/definitions/loginRequest" + "properties": { + "email": { + "type": "string" + }, + "password": { + "type": "string" + } + } } } ], @@ -702,7 +877,7 @@ func init() { "200": { "description": "login successful", "schema": { - "$ref": "#/definitions/loginResponse" + "type": "string" } }, "401": { @@ -786,7 +961,7 @@ func init() { "description": { "type": "string" }, - "token": { + "organizationToken": { "type": "string" } } @@ -878,7 +1053,7 @@ func init() { } } }, - "/metrics/share/{shrToken}": { + "/metrics/share/{shareToken}": { "get": { "security": [ { @@ -892,7 +1067,7 @@ func init() { "parameters": [ { "type": "string", - "name": "shrToken", + "name": "shareToken", "in": "path", "required": true }, @@ -950,7 +1125,7 @@ func init() { "description": "organization created", "schema": { "properties": { - "token": { + "organizationToken": { "type": "string" } } @@ -980,7 +1155,7 @@ func init() { "in": "body", "schema": { "properties": { - "token": { + "organizationToken": { "type": "string" } } @@ -1026,7 +1201,7 @@ func init() { "email": { "type": "string" }, - "token": { + "organizationToken": { "type": "string" } } @@ -1066,7 +1241,7 @@ func init() { "in": "body", "schema": { "properties": { - "token": { + "organizationToken": { "type": "string" } } @@ -1126,7 +1301,7 @@ func init() { "email": { "type": "string" }, - "token": { + "organizationToken": { "type": "string" } } @@ -1172,7 +1347,7 @@ func init() { "description": { "type": "string" }, - "token": { + "organizationToken": { "type": "string" } } @@ -1258,7 +1433,7 @@ func init() { } } }, - "/regenerateToken": { + "/regenerateAccountToken": { "post": { "security": [ { @@ -1268,7 +1443,7 @@ func init() { "tags": [ "account" ], - "operationId": "regenerateToken", + "operationId": "regenerateAccountToken", "parameters": [ { "name": "body", @@ -1287,7 +1462,7 @@ func init() { "description": "regenerate account token", "schema": { "properties": { - "token": { + "accountToken": { "type": "string" } } @@ -1313,7 +1488,14 @@ func init() { "name": "body", "in": "body", "schema": { - "$ref": "#/definitions/registerRequest" + "properties": { + "password": { + "type": "string" + }, + "registerToken": { + "type": "string" + } + } } } ], @@ -1321,7 +1503,11 @@ func init() { "200": { "description": "account created", "schema": { - "$ref": "#/definitions/registerResponse" + "properties": { + "accountToken": { + "type": "string" + } + } } }, "404": { @@ -1350,7 +1536,14 @@ func init() { "name": "body", "in": "body", "schema": { - "$ref": "#/definitions/resetPasswordRequest" + "properties": { + "password": { + "type": "string" + }, + "resetToken": { + "type": "string" + } + } } } ], @@ -1394,10 +1587,10 @@ func init() { ], "responses": { "201": { - "description": "forgot password request created" + "description": "reset password request created" }, "400": { - "description": "forgot password request not created" + "description": "reset password request not created" }, "500": { "description": "internal server error" @@ -1467,7 +1660,26 @@ func init() { "name": "body", "in": "body", "schema": { - "$ref": "#/definitions/updateShareRequest" + "properties": { + "addAccessGrants": { + "type": "array", + "items": { + "type": "string" + } + }, + "backendProxyEndpoint": { + "type": "string" + }, + "removeAccessGrants": { + "type": "array", + "items": { + "type": "string" + } + }, + "shareToken": { + "type": "string" + } + } } } ], @@ -1490,6 +1702,65 @@ func init() { } } }, + "/sparklines": { + "post": { + "security": [ + { + "key": [] + } + ], + "tags": [ + "metadata" + ], + "operationId": "getSparklines", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "properties": { + "account": { + "type": "boolean" + }, + "environments": { + "type": "array", + "items": { + "type": "string" + } + }, + "shares": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + ], + "responses": { + "200": { + "description": "sparklines data", + "schema": { + "properties": { + "sparklines": { + "type": "array", + "items": { + "$ref": "#/definitions/metrics" + } + } + } + } + }, + "401": { + "description": "unauthorized" + }, + "500": { + "description": "internal server error" + } + } + } + }, "/unaccess": { "delete": { "security": [ @@ -1506,7 +1777,17 @@ func init() { "name": "body", "in": "body", "schema": { - "$ref": "#/definitions/unaccessRequest" + "properties": { + "envZId": { + "type": "string" + }, + "frontendToken": { + "type": "string" + }, + "shareToken": { + "type": "string" + } + } } } ], @@ -1542,7 +1823,17 @@ func init() { "name": "body", "in": "body", "schema": { - "$ref": "#/definitions/unshareRequest" + "properties": { + "envZId": { + "type": "string" + }, + "reserved": { + "type": "boolean" + }, + "shareToken": { + "type": "string" + } + } } } ], @@ -1576,19 +1867,27 @@ func init() { "name": "body", "in": "body", "schema": { - "$ref": "#/definitions/verifyRequest" + "properties": { + "registerToken": { + "type": "string" + } + } } } ], "responses": { "200": { - "description": "token ready", + "description": "registration token ready", "schema": { - "$ref": "#/definitions/verifyResponse" + "properties": { + "email": { + "type": "string" + } + } } }, "404": { - "description": "token not found" + "description": "registration token not found" }, "500": { "description": "internal server error" @@ -1604,38 +1903,46 @@ func init() { "operationId": "version", "responses": { "200": { - "description": "current server version", + "description": "legacy upgrade required", "schema": { "$ref": "#/definitions/version" } } } + }, + "post": { + "tags": [ + "metadata" + ], + "operationId": "clientVersionCheck", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "properties": { + "clientVersion": { + "type": "string" + } + } + } + } + ], + "responses": { + "200": { + "description": "compatible" + }, + "400": { + "description": "not compatible", + "schema": { + "type": "string" + } + } + } } } }, "definitions": { - "accessRequest": { - "type": "object", - "properties": { - "envZId": { - "type": "string" - }, - "shrToken": { - "type": "string" - } - } - }, - "accessResponse": { - "type": "object", - "properties": { - "backendMode": { - "type": "string" - }, - "frontendToken": { - "type": "string" - } - } - }, "authUser": { "type": "object", "properties": { @@ -1647,20 +1954,6 @@ func init() { } } }, - "changePasswordRequest": { - "type": "object", - "properties": { - "email": { - "type": "string" - }, - "newPassword": { - "type": "string" - }, - "oldPassword": { - "type": "string" - } - } - }, "configuration": { "type": "object", "properties": { @@ -1670,9 +1963,6 @@ func init() { "invitesOpen": { "type": "boolean" }, - "passwordRequirements": { - "$ref": "#/definitions/passwordRequirements" - }, "requiresInviteToken": { "type": "boolean" }, @@ -1684,73 +1974,6 @@ func init() { } } }, - "createFrontendRequest": { - "type": "object", - "properties": { - "permissionMode": { - "type": "string", - "enum": [ - "open", - "closed" - ] - }, - "public_name": { - "type": "string" - }, - "url_template": { - "type": "string" - }, - "zId": { - "type": "string" - } - } - }, - "createFrontendResponse": { - "type": "object", - "properties": { - "token": { - "type": "string" - } - } - }, - "deleteFrontendRequest": { - "type": "object", - "properties": { - "frontendToken": { - "type": "string" - } - } - }, - "disableRequest": { - "type": "object", - "properties": { - "identity": { - "type": "string" - } - } - }, - "enableRequest": { - "type": "object", - "properties": { - "description": { - "type": "string" - }, - "host": { - "type": "string" - } - } - }, - "enableResponse": { - "type": "object", - "properties": { - "cfg": { - "type": "string" - }, - "identity": { - "type": "string" - } - } - }, "environment": { "type": "object", "properties": { @@ -1806,16 +2029,25 @@ func init() { "frontend": { "type": "object", "properties": { + "backendMode": { + "type": "string" + }, + "bindAddress": { + "type": "string" + }, "createdAt": { "type": "integer" }, + "description": { + "type": "string" + }, + "frontendToken": { + "type": "string" + }, "id": { "type": "integer" }, - "shrToken": { - "type": "string" - }, - "token": { + "shareToken": { "type": "string" }, "updatedAt": { @@ -1832,42 +2064,6 @@ func init() { "$ref": "#/definitions/frontend" } }, - "inviteRequest": { - "type": "object", - "properties": { - "email": { - "type": "string" - }, - "token": { - "type": "string" - } - } - }, - "inviteTokenGenerateRequest": { - "type": "object", - "properties": { - "tokens": { - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "loginRequest": { - "type": "object", - "properties": { - "email": { - "type": "string" - }, - "password": { - "type": "string" - } - } - }, - "loginResponse": { - "type": "string" - }, "metrics": { "type": "object", "properties": { @@ -1916,26 +2112,6 @@ func init() { } } }, - "passwordRequirements": { - "type": "object", - "properties": { - "length": { - "type": "integer" - }, - "requireCapital": { - "type": "boolean" - }, - "requireNumeric": { - "type": "boolean" - }, - "requireSpecial": { - "type": "boolean" - }, - "validSpecialCharacters": { - "type": "string" - } - } - }, "principal": { "type": "object", "properties": { @@ -1956,65 +2132,6 @@ func init() { } } }, - "publicFrontend": { - "type": "object", - "properties": { - "createdAt": { - "type": "integer" - }, - "publicName": { - "type": "string" - }, - "token": { - "type": "string" - }, - "updatedAt": { - "type": "integer" - }, - "urlTemplate": { - "type": "string" - }, - "zId": { - "type": "string" - } - } - }, - "publicFrontendList": { - "type": "array", - "items": { - "$ref": "#/definitions/publicFrontend" - } - }, - "registerRequest": { - "type": "object", - "properties": { - "password": { - "type": "string" - }, - "token": { - "type": "string" - } - } - }, - "registerResponse": { - "type": "object", - "properties": { - "token": { - "type": "string" - } - } - }, - "resetPasswordRequest": { - "type": "object", - "properties": { - "password": { - "type": "string" - }, - "token": { - "type": "string" - } - } - }, "share": { "type": "object", "properties": { @@ -2045,7 +2162,7 @@ func init() { "shareMode": { "type": "string" }, - "token": { + "shareToken": { "type": "string" }, "updatedAt": { @@ -2146,7 +2263,7 @@ func init() { "type": "string" } }, - "shrToken": { + "shareToken": { "type": "string" } } @@ -2174,87 +2291,6 @@ func init() { } } }, - "unaccessRequest": { - "type": "object", - "properties": { - "envZId": { - "type": "string" - }, - "frontendToken": { - "type": "string" - }, - "shrToken": { - "type": "string" - } - } - }, - "unshareRequest": { - "type": "object", - "properties": { - "envZId": { - "type": "string" - }, - "reserved": { - "type": "boolean" - }, - "shrToken": { - "type": "string" - } - } - }, - "updateFrontendRequest": { - "type": "object", - "properties": { - "frontendToken": { - "type": "string" - }, - "publicName": { - "type": "string" - }, - "urlTemplate": { - "type": "string" - } - } - }, - "updateShareRequest": { - "type": "object", - "properties": { - "addAccessGrants": { - "type": "array", - "items": { - "type": "string" - } - }, - "backendProxyEndpoint": { - "type": "string" - }, - "removeAccessGrants": { - "type": "array", - "items": { - "type": "string" - } - }, - "shrToken": { - "type": "string" - } - } - }, - "verifyRequest": { - "type": "object", - "properties": { - "token": { - "type": "string" - } - } - }, - "verifyResponse": { - "type": "object", - "properties": { - "email": { - "type": "string" - } - } - }, "version": { "type": "string" } @@ -2281,7 +2317,7 @@ func init() { "info": { "description": "zrok client access", "title": "zrok", - "version": "0.3.0" + "version": "1.0.0" }, "basePath": "/api/v1", "paths": { @@ -2301,7 +2337,20 @@ func init() { "name": "body", "in": "body", "schema": { - "$ref": "#/definitions/accessRequest" + "properties": { + "bindAddress": { + "type": "string" + }, + "description": { + "type": "string" + }, + "envZId": { + "type": "string" + }, + "shareToken": { + "type": "string" + } + } } } ], @@ -2309,7 +2358,14 @@ func init() { "201": { "description": "access created", "schema": { - "$ref": "#/definitions/accessResponse" + "properties": { + "backendMode": { + "type": "string" + }, + "frontendToken": { + "type": "string" + } + } } }, "401": { @@ -2322,6 +2378,50 @@ func init() { "description": "internal server error" } } + }, + "patch": { + "security": [ + { + "key": [] + } + ], + "tags": [ + "share" + ], + "operationId": "updateAccess", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "properties": { + "bindAddress": { + "type": "string" + }, + "description": { + "type": "string" + }, + "frontendToken": { + "type": "string" + } + } + } + } + ], + "responses": { + "200": { + "description": "access updated" + }, + "401": { + "description": "unauthorized" + }, + "404": { + "description": "not found" + }, + "500": { + "description": "internal server error" + } + } } }, "/account": { @@ -2356,7 +2456,7 @@ func init() { "description": "created", "schema": { "properties": { - "token": { + "accountToken": { "type": "string" } } @@ -2387,13 +2487,23 @@ func init() { "name": "body", "in": "body", "schema": { - "$ref": "#/definitions/changePasswordRequest" + "properties": { + "email": { + "type": "string" + }, + "newPassword": { + "type": "string" + }, + "oldPassword": { + "type": "string" + } + } } } ], "responses": { "200": { - "description": "changed password" + "description": "password changed" }, "400": { "description": "password not changed" @@ -2491,7 +2601,7 @@ func init() { } } }, - "/detail/frontend/{feId}": { + "/detail/frontend/{frontendId}": { "get": { "security": [ { @@ -2505,7 +2615,7 @@ func init() { "parameters": [ { "type": "integer", - "name": "feId", + "name": "frontendId", "in": "path", "required": true } @@ -2529,7 +2639,7 @@ func init() { } } }, - "/detail/share/{shrToken}": { + "/detail/share/{shareToken}": { "get": { "security": [ { @@ -2543,7 +2653,7 @@ func init() { "parameters": [ { "type": "string", - "name": "shrToken", + "name": "shareToken", "in": "path", "required": true } @@ -2583,7 +2693,11 @@ func init() { "name": "body", "in": "body", "schema": { - "$ref": "#/definitions/disableRequest" + "properties": { + "identity": { + "type": "string" + } + } } } ], @@ -2616,7 +2730,14 @@ func init() { "name": "body", "in": "body", "schema": { - "$ref": "#/definitions/enableRequest" + "properties": { + "description": { + "type": "string" + }, + "host": { + "type": "string" + } + } } } ], @@ -2624,7 +2745,14 @@ func init() { "201": { "description": "environment enabled", "schema": { - "$ref": "#/definitions/enableResponse" + "properties": { + "cfg": { + "type": "string" + }, + "identity": { + "type": "string" + } + } } }, "401": { @@ -2655,7 +2783,25 @@ func init() { "name": "body", "in": "body", "schema": { - "$ref": "#/definitions/createFrontendRequest" + "type": "object", + "properties": { + "permissionMode": { + "type": "string", + "enum": [ + "open", + "closed" + ] + }, + "public_name": { + "type": "string" + }, + "url_template": { + "type": "string" + }, + "zId": { + "type": "string" + } + } } } ], @@ -2663,7 +2809,12 @@ func init() { "201": { "description": "frontend created", "schema": { - "$ref": "#/definitions/createFrontendResponse" + "type": "object", + "properties": { + "frontendToken": { + "type": "string" + } + } } }, "400": { @@ -2695,7 +2846,12 @@ func init() { "name": "body", "in": "body", "schema": { - "$ref": "#/definitions/deleteFrontendRequest" + "type": "object", + "properties": { + "frontendToken": { + "type": "string" + } + } } } ], @@ -2729,7 +2885,18 @@ func init() { "name": "body", "in": "body", "schema": { - "$ref": "#/definitions/updateFrontendRequest" + "type": "object", + "properties": { + "frontendToken": { + "type": "string" + }, + "publicName": { + "type": "string" + }, + "urlTemplate": { + "type": "string" + } + } } } ], @@ -2764,7 +2931,10 @@ func init() { "200": { "description": "ok", "schema": { - "$ref": "#/definitions/publicFrontendList" + "type": "array", + "items": { + "$ref": "#/definitions/ListFrontendsOKBodyItems0" + } } }, "401": { @@ -2874,7 +3044,14 @@ func init() { "name": "body", "in": "body", "schema": { - "$ref": "#/definitions/inviteRequest" + "properties": { + "email": { + "type": "string" + }, + "inviteToken": { + "type": "string" + } + } } } ], @@ -2913,16 +3090,23 @@ func init() { "name": "body", "in": "body", "schema": { - "$ref": "#/definitions/inviteTokenGenerateRequest" + "properties": { + "inviteTokens": { + "type": "array", + "items": { + "type": "string" + } + } + } } } ], "responses": { "201": { - "description": "invitation tokens created" + "description": "invite tokens created" }, "400": { - "description": "invitation tokens not created" + "description": "invite tokens not created" }, "401": { "description": "unauthorized" @@ -2944,7 +3128,14 @@ func init() { "name": "body", "in": "body", "schema": { - "$ref": "#/definitions/loginRequest" + "properties": { + "email": { + "type": "string" + }, + "password": { + "type": "string" + } + } } } ], @@ -2952,7 +3143,7 @@ func init() { "200": { "description": "login successful", "schema": { - "$ref": "#/definitions/loginResponse" + "type": "string" } }, "401": { @@ -3111,7 +3302,7 @@ func init() { } } }, - "/metrics/share/{shrToken}": { + "/metrics/share/{shareToken}": { "get": { "security": [ { @@ -3125,7 +3316,7 @@ func init() { "parameters": [ { "type": "string", - "name": "shrToken", + "name": "shareToken", "in": "path", "required": true }, @@ -3183,7 +3374,7 @@ func init() { "description": "organization created", "schema": { "properties": { - "token": { + "organizationToken": { "type": "string" } } @@ -3213,7 +3404,7 @@ func init() { "in": "body", "schema": { "properties": { - "token": { + "organizationToken": { "type": "string" } } @@ -3259,7 +3450,7 @@ func init() { "email": { "type": "string" }, - "token": { + "organizationToken": { "type": "string" } } @@ -3299,7 +3490,7 @@ func init() { "in": "body", "schema": { "properties": { - "token": { + "organizationToken": { "type": "string" } } @@ -3352,7 +3543,7 @@ func init() { "email": { "type": "string" }, - "token": { + "organizationToken": { "type": "string" } } @@ -3477,7 +3668,7 @@ func init() { } } }, - "/regenerateToken": { + "/regenerateAccountToken": { "post": { "security": [ { @@ -3487,7 +3678,7 @@ func init() { "tags": [ "account" ], - "operationId": "regenerateToken", + "operationId": "regenerateAccountToken", "parameters": [ { "name": "body", @@ -3506,7 +3697,7 @@ func init() { "description": "regenerate account token", "schema": { "properties": { - "token": { + "accountToken": { "type": "string" } } @@ -3532,7 +3723,14 @@ func init() { "name": "body", "in": "body", "schema": { - "$ref": "#/definitions/registerRequest" + "properties": { + "password": { + "type": "string" + }, + "registerToken": { + "type": "string" + } + } } } ], @@ -3540,7 +3738,11 @@ func init() { "200": { "description": "account created", "schema": { - "$ref": "#/definitions/registerResponse" + "properties": { + "accountToken": { + "type": "string" + } + } } }, "404": { @@ -3569,7 +3771,14 @@ func init() { "name": "body", "in": "body", "schema": { - "$ref": "#/definitions/resetPasswordRequest" + "properties": { + "password": { + "type": "string" + }, + "resetToken": { + "type": "string" + } + } } } ], @@ -3613,10 +3822,10 @@ func init() { ], "responses": { "201": { - "description": "forgot password request created" + "description": "reset password request created" }, "400": { - "description": "forgot password request not created" + "description": "reset password request not created" }, "500": { "description": "internal server error" @@ -3686,7 +3895,26 @@ func init() { "name": "body", "in": "body", "schema": { - "$ref": "#/definitions/updateShareRequest" + "properties": { + "addAccessGrants": { + "type": "array", + "items": { + "type": "string" + } + }, + "backendProxyEndpoint": { + "type": "string" + }, + "removeAccessGrants": { + "type": "array", + "items": { + "type": "string" + } + }, + "shareToken": { + "type": "string" + } + } } } ], @@ -3709,6 +3937,65 @@ func init() { } } }, + "/sparklines": { + "post": { + "security": [ + { + "key": [] + } + ], + "tags": [ + "metadata" + ], + "operationId": "getSparklines", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "properties": { + "account": { + "type": "boolean" + }, + "environments": { + "type": "array", + "items": { + "type": "string" + } + }, + "shares": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + } + ], + "responses": { + "200": { + "description": "sparklines data", + "schema": { + "properties": { + "sparklines": { + "type": "array", + "items": { + "$ref": "#/definitions/metrics" + } + } + } + } + }, + "401": { + "description": "unauthorized" + }, + "500": { + "description": "internal server error" + } + } + } + }, "/unaccess": { "delete": { "security": [ @@ -3725,7 +4012,17 @@ func init() { "name": "body", "in": "body", "schema": { - "$ref": "#/definitions/unaccessRequest" + "properties": { + "envZId": { + "type": "string" + }, + "frontendToken": { + "type": "string" + }, + "shareToken": { + "type": "string" + } + } } } ], @@ -3761,7 +4058,17 @@ func init() { "name": "body", "in": "body", "schema": { - "$ref": "#/definitions/unshareRequest" + "properties": { + "envZId": { + "type": "string" + }, + "reserved": { + "type": "boolean" + }, + "shareToken": { + "type": "string" + } + } } } ], @@ -3795,19 +4102,27 @@ func init() { "name": "body", "in": "body", "schema": { - "$ref": "#/definitions/verifyRequest" + "properties": { + "registerToken": { + "type": "string" + } + } } } ], "responses": { "200": { - "description": "token ready", + "description": "registration token ready", "schema": { - "$ref": "#/definitions/verifyResponse" + "properties": { + "email": { + "type": "string" + } + } } }, "404": { - "description": "token not found" + "description": "registration token not found" }, "500": { "description": "internal server error" @@ -3823,16 +4138,69 @@ func init() { "operationId": "version", "responses": { "200": { - "description": "current server version", + "description": "legacy upgrade required", "schema": { "$ref": "#/definitions/version" } } } + }, + "post": { + "tags": [ + "metadata" + ], + "operationId": "clientVersionCheck", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "properties": { + "clientVersion": { + "type": "string" + } + } + } + } + ], + "responses": { + "200": { + "description": "compatible" + }, + "400": { + "description": "not compatible", + "schema": { + "type": "string" + } + } + } } } }, "definitions": { + "ListFrontendsOKBodyItems0": { + "type": "object", + "properties": { + "createdAt": { + "type": "integer" + }, + "frontendToken": { + "type": "string" + }, + "publicName": { + "type": "string" + }, + "updatedAt": { + "type": "integer" + }, + "urlTemplate": { + "type": "string" + }, + "zId": { + "type": "string" + } + } + }, "MembersItems0": { "properties": { "admin": { @@ -3851,7 +4219,7 @@ func init() { "description": { "type": "string" }, - "token": { + "organizationToken": { "type": "string" } } @@ -3861,29 +4229,7 @@ func init() { "description": { "type": "string" }, - "token": { - "type": "string" - } - } - }, - "accessRequest": { - "type": "object", - "properties": { - "envZId": { - "type": "string" - }, - "shrToken": { - "type": "string" - } - } - }, - "accessResponse": { - "type": "object", - "properties": { - "backendMode": { - "type": "string" - }, - "frontendToken": { + "organizationToken": { "type": "string" } } @@ -3899,20 +4245,6 @@ func init() { } } }, - "changePasswordRequest": { - "type": "object", - "properties": { - "email": { - "type": "string" - }, - "newPassword": { - "type": "string" - }, - "oldPassword": { - "type": "string" - } - } - }, "configuration": { "type": "object", "properties": { @@ -3922,9 +4254,6 @@ func init() { "invitesOpen": { "type": "boolean" }, - "passwordRequirements": { - "$ref": "#/definitions/passwordRequirements" - }, "requiresInviteToken": { "type": "boolean" }, @@ -3936,73 +4265,6 @@ func init() { } } }, - "createFrontendRequest": { - "type": "object", - "properties": { - "permissionMode": { - "type": "string", - "enum": [ - "open", - "closed" - ] - }, - "public_name": { - "type": "string" - }, - "url_template": { - "type": "string" - }, - "zId": { - "type": "string" - } - } - }, - "createFrontendResponse": { - "type": "object", - "properties": { - "token": { - "type": "string" - } - } - }, - "deleteFrontendRequest": { - "type": "object", - "properties": { - "frontendToken": { - "type": "string" - } - } - }, - "disableRequest": { - "type": "object", - "properties": { - "identity": { - "type": "string" - } - } - }, - "enableRequest": { - "type": "object", - "properties": { - "description": { - "type": "string" - }, - "host": { - "type": "string" - } - } - }, - "enableResponse": { - "type": "object", - "properties": { - "cfg": { - "type": "string" - }, - "identity": { - "type": "string" - } - } - }, "environment": { "type": "object", "properties": { @@ -4058,16 +4320,25 @@ func init() { "frontend": { "type": "object", "properties": { + "backendMode": { + "type": "string" + }, + "bindAddress": { + "type": "string" + }, "createdAt": { "type": "integer" }, + "description": { + "type": "string" + }, + "frontendToken": { + "type": "string" + }, "id": { "type": "integer" }, - "shrToken": { - "type": "string" - }, - "token": { + "shareToken": { "type": "string" }, "updatedAt": { @@ -4084,42 +4355,6 @@ func init() { "$ref": "#/definitions/frontend" } }, - "inviteRequest": { - "type": "object", - "properties": { - "email": { - "type": "string" - }, - "token": { - "type": "string" - } - } - }, - "inviteTokenGenerateRequest": { - "type": "object", - "properties": { - "tokens": { - "type": "array", - "items": { - "type": "string" - } - } - } - }, - "loginRequest": { - "type": "object", - "properties": { - "email": { - "type": "string" - }, - "password": { - "type": "string" - } - } - }, - "loginResponse": { - "type": "string" - }, "metrics": { "type": "object", "properties": { @@ -4168,26 +4403,6 @@ func init() { } } }, - "passwordRequirements": { - "type": "object", - "properties": { - "length": { - "type": "integer" - }, - "requireCapital": { - "type": "boolean" - }, - "requireNumeric": { - "type": "boolean" - }, - "requireSpecial": { - "type": "boolean" - }, - "validSpecialCharacters": { - "type": "string" - } - } - }, "principal": { "type": "object", "properties": { @@ -4208,65 +4423,6 @@ func init() { } } }, - "publicFrontend": { - "type": "object", - "properties": { - "createdAt": { - "type": "integer" - }, - "publicName": { - "type": "string" - }, - "token": { - "type": "string" - }, - "updatedAt": { - "type": "integer" - }, - "urlTemplate": { - "type": "string" - }, - "zId": { - "type": "string" - } - } - }, - "publicFrontendList": { - "type": "array", - "items": { - "$ref": "#/definitions/publicFrontend" - } - }, - "registerRequest": { - "type": "object", - "properties": { - "password": { - "type": "string" - }, - "token": { - "type": "string" - } - } - }, - "registerResponse": { - "type": "object", - "properties": { - "token": { - "type": "string" - } - } - }, - "resetPasswordRequest": { - "type": "object", - "properties": { - "password": { - "type": "string" - }, - "token": { - "type": "string" - } - } - }, "share": { "type": "object", "properties": { @@ -4297,7 +4453,7 @@ func init() { "shareMode": { "type": "string" }, - "token": { + "shareToken": { "type": "string" }, "updatedAt": { @@ -4398,7 +4554,7 @@ func init() { "type": "string" } }, - "shrToken": { + "shareToken": { "type": "string" } } @@ -4426,87 +4582,6 @@ func init() { } } }, - "unaccessRequest": { - "type": "object", - "properties": { - "envZId": { - "type": "string" - }, - "frontendToken": { - "type": "string" - }, - "shrToken": { - "type": "string" - } - } - }, - "unshareRequest": { - "type": "object", - "properties": { - "envZId": { - "type": "string" - }, - "reserved": { - "type": "boolean" - }, - "shrToken": { - "type": "string" - } - } - }, - "updateFrontendRequest": { - "type": "object", - "properties": { - "frontendToken": { - "type": "string" - }, - "publicName": { - "type": "string" - }, - "urlTemplate": { - "type": "string" - } - } - }, - "updateShareRequest": { - "type": "object", - "properties": { - "addAccessGrants": { - "type": "array", - "items": { - "type": "string" - } - }, - "backendProxyEndpoint": { - "type": "string" - }, - "removeAccessGrants": { - "type": "array", - "items": { - "type": "string" - } - }, - "shrToken": { - "type": "string" - } - } - }, - "verifyRequest": { - "type": "object", - "properties": { - "token": { - "type": "string" - } - } - }, - "verifyResponse": { - "type": "object", - "properties": { - "email": { - "type": "string" - } - } - }, "version": { "type": "string" } diff --git a/rest_server_zrok/operations/account/change_password.go b/rest_server_zrok/operations/account/change_password.go index 5324b58e..5a0be969 100644 --- a/rest_server_zrok/operations/account/change_password.go +++ b/rest_server_zrok/operations/account/change_password.go @@ -6,9 +6,12 @@ package account // Editing this file might prove futile when you re-run the generate command import ( + "context" "net/http" "github.com/go-openapi/runtime/middleware" + "github.com/go-openapi/strfmt" + "github.com/go-openapi/swag" "github.com/openziti/zrok/rest_model_zrok" ) @@ -69,3 +72,46 @@ func (o *ChangePassword) ServeHTTP(rw http.ResponseWriter, r *http.Request) { o.Context.Respond(rw, r, route.Produces, route, res) } + +// ChangePasswordBody change password body +// +// swagger:model ChangePasswordBody +type ChangePasswordBody struct { + + // email + Email string `json:"email,omitempty"` + + // new password + NewPassword string `json:"newPassword,omitempty"` + + // old password + OldPassword string `json:"oldPassword,omitempty"` +} + +// Validate validates this change password body +func (o *ChangePasswordBody) Validate(formats strfmt.Registry) error { + return nil +} + +// ContextValidate validates this change password body based on context it is used +func (o *ChangePasswordBody) ContextValidate(ctx context.Context, formats strfmt.Registry) error { + return nil +} + +// MarshalBinary interface implementation +func (o *ChangePasswordBody) MarshalBinary() ([]byte, error) { + if o == nil { + return nil, nil + } + return swag.WriteJSON(o) +} + +// UnmarshalBinary interface implementation +func (o *ChangePasswordBody) UnmarshalBinary(b []byte) error { + var res ChangePasswordBody + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *o = res + return nil +} diff --git a/rest_server_zrok/operations/account/change_password_parameters.go b/rest_server_zrok/operations/account/change_password_parameters.go index 5afcfb6e..6dab80da 100644 --- a/rest_server_zrok/operations/account/change_password_parameters.go +++ b/rest_server_zrok/operations/account/change_password_parameters.go @@ -12,8 +12,6 @@ import ( "github.com/go-openapi/runtime" "github.com/go-openapi/runtime/middleware" "github.com/go-openapi/validate" - - "github.com/openziti/zrok/rest_model_zrok" ) // NewChangePasswordParams creates a new ChangePasswordParams object @@ -36,7 +34,7 @@ type ChangePasswordParams struct { /* In: body */ - Body *rest_model_zrok.ChangePasswordRequest + Body ChangePasswordBody } // BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface @@ -50,7 +48,7 @@ func (o *ChangePasswordParams) BindRequest(r *http.Request, route *middleware.Ma if runtime.HasBody(r) { defer r.Body.Close() - var body rest_model_zrok.ChangePasswordRequest + var body ChangePasswordBody if err := route.Consumer.Consume(r.Body, &body); err != nil { res = append(res, errors.NewParseError("body", "body", "", err)) } else { @@ -65,7 +63,7 @@ func (o *ChangePasswordParams) BindRequest(r *http.Request, route *middleware.Ma } if len(res) == 0 { - o.Body = &body + o.Body = body } } } diff --git a/rest_server_zrok/operations/account/change_password_responses.go b/rest_server_zrok/operations/account/change_password_responses.go index 020b9d64..bffcd2e3 100644 --- a/rest_server_zrok/operations/account/change_password_responses.go +++ b/rest_server_zrok/operations/account/change_password_responses.go @@ -17,7 +17,7 @@ import ( const ChangePasswordOKCode int = 200 /* -ChangePasswordOK changed password +ChangePasswordOK password changed swagger:response changePasswordOK */ diff --git a/rest_server_zrok/operations/account/invite.go b/rest_server_zrok/operations/account/invite.go index de2b7770..04246f81 100644 --- a/rest_server_zrok/operations/account/invite.go +++ b/rest_server_zrok/operations/account/invite.go @@ -6,9 +6,12 @@ package account // Editing this file might prove futile when you re-run the generate command import ( + "context" "net/http" "github.com/go-openapi/runtime/middleware" + "github.com/go-openapi/strfmt" + "github.com/go-openapi/swag" ) // InviteHandlerFunc turns a function with the right signature into a invite handler @@ -54,3 +57,43 @@ func (o *Invite) ServeHTTP(rw http.ResponseWriter, r *http.Request) { o.Context.Respond(rw, r, route.Produces, route, res) } + +// InviteBody invite body +// +// swagger:model InviteBody +type InviteBody struct { + + // email + Email string `json:"email,omitempty"` + + // invite token + InviteToken string `json:"inviteToken,omitempty"` +} + +// Validate validates this invite body +func (o *InviteBody) Validate(formats strfmt.Registry) error { + return nil +} + +// ContextValidate validates this invite body based on context it is used +func (o *InviteBody) ContextValidate(ctx context.Context, formats strfmt.Registry) error { + return nil +} + +// MarshalBinary interface implementation +func (o *InviteBody) MarshalBinary() ([]byte, error) { + if o == nil { + return nil, nil + } + return swag.WriteJSON(o) +} + +// UnmarshalBinary interface implementation +func (o *InviteBody) UnmarshalBinary(b []byte) error { + var res InviteBody + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *o = res + return nil +} diff --git a/rest_server_zrok/operations/account/invite_parameters.go b/rest_server_zrok/operations/account/invite_parameters.go index 5f50d4cd..dc33f889 100644 --- a/rest_server_zrok/operations/account/invite_parameters.go +++ b/rest_server_zrok/operations/account/invite_parameters.go @@ -12,8 +12,6 @@ import ( "github.com/go-openapi/runtime" "github.com/go-openapi/runtime/middleware" "github.com/go-openapi/validate" - - "github.com/openziti/zrok/rest_model_zrok" ) // NewInviteParams creates a new InviteParams object @@ -36,7 +34,7 @@ type InviteParams struct { /* In: body */ - Body *rest_model_zrok.InviteRequest + Body InviteBody } // BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface @@ -50,7 +48,7 @@ func (o *InviteParams) BindRequest(r *http.Request, route *middleware.MatchedRou if runtime.HasBody(r) { defer r.Body.Close() - var body rest_model_zrok.InviteRequest + var body InviteBody if err := route.Consumer.Consume(r.Body, &body); err != nil { res = append(res, errors.NewParseError("body", "body", "", err)) } else { @@ -65,7 +63,7 @@ func (o *InviteParams) BindRequest(r *http.Request, route *middleware.MatchedRou } if len(res) == 0 { - o.Body = &body + o.Body = body } } } diff --git a/rest_server_zrok/operations/account/login.go b/rest_server_zrok/operations/account/login.go index e73f1e32..e1538aea 100644 --- a/rest_server_zrok/operations/account/login.go +++ b/rest_server_zrok/operations/account/login.go @@ -6,9 +6,12 @@ package account // Editing this file might prove futile when you re-run the generate command import ( + "context" "net/http" "github.com/go-openapi/runtime/middleware" + "github.com/go-openapi/strfmt" + "github.com/go-openapi/swag" ) // LoginHandlerFunc turns a function with the right signature into a login handler @@ -54,3 +57,43 @@ func (o *Login) ServeHTTP(rw http.ResponseWriter, r *http.Request) { o.Context.Respond(rw, r, route.Produces, route, res) } + +// LoginBody login body +// +// swagger:model LoginBody +type LoginBody struct { + + // email + Email string `json:"email,omitempty"` + + // password + Password string `json:"password,omitempty"` +} + +// Validate validates this login body +func (o *LoginBody) Validate(formats strfmt.Registry) error { + return nil +} + +// ContextValidate validates this login body based on context it is used +func (o *LoginBody) ContextValidate(ctx context.Context, formats strfmt.Registry) error { + return nil +} + +// MarshalBinary interface implementation +func (o *LoginBody) MarshalBinary() ([]byte, error) { + if o == nil { + return nil, nil + } + return swag.WriteJSON(o) +} + +// UnmarshalBinary interface implementation +func (o *LoginBody) UnmarshalBinary(b []byte) error { + var res LoginBody + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *o = res + return nil +} diff --git a/rest_server_zrok/operations/account/login_parameters.go b/rest_server_zrok/operations/account/login_parameters.go index df20c9c3..ef352924 100644 --- a/rest_server_zrok/operations/account/login_parameters.go +++ b/rest_server_zrok/operations/account/login_parameters.go @@ -12,8 +12,6 @@ import ( "github.com/go-openapi/runtime" "github.com/go-openapi/runtime/middleware" "github.com/go-openapi/validate" - - "github.com/openziti/zrok/rest_model_zrok" ) // NewLoginParams creates a new LoginParams object @@ -36,7 +34,7 @@ type LoginParams struct { /* In: body */ - Body *rest_model_zrok.LoginRequest + Body LoginBody } // BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface @@ -50,7 +48,7 @@ func (o *LoginParams) BindRequest(r *http.Request, route *middleware.MatchedRout if runtime.HasBody(r) { defer r.Body.Close() - var body rest_model_zrok.LoginRequest + var body LoginBody if err := route.Consumer.Consume(r.Body, &body); err != nil { res = append(res, errors.NewParseError("body", "body", "", err)) } else { @@ -65,7 +63,7 @@ func (o *LoginParams) BindRequest(r *http.Request, route *middleware.MatchedRout } if len(res) == 0 { - o.Body = &body + o.Body = body } } } diff --git a/rest_server_zrok/operations/account/login_responses.go b/rest_server_zrok/operations/account/login_responses.go index 8ac3887c..135ca852 100644 --- a/rest_server_zrok/operations/account/login_responses.go +++ b/rest_server_zrok/operations/account/login_responses.go @@ -9,8 +9,6 @@ import ( "net/http" "github.com/go-openapi/runtime" - - "github.com/openziti/zrok/rest_model_zrok" ) // LoginOKCode is the HTTP code returned for type LoginOK @@ -26,7 +24,7 @@ type LoginOK struct { /* In: Body */ - Payload rest_model_zrok.LoginResponse `json:"body,omitempty"` + Payload string `json:"body,omitempty"` } // NewLoginOK creates LoginOK with default headers values @@ -36,13 +34,13 @@ func NewLoginOK() *LoginOK { } // WithPayload adds the payload to the login o k response -func (o *LoginOK) WithPayload(payload rest_model_zrok.LoginResponse) *LoginOK { +func (o *LoginOK) WithPayload(payload string) *LoginOK { o.Payload = payload return o } // SetPayload sets the payload to the login o k response -func (o *LoginOK) SetPayload(payload rest_model_zrok.LoginResponse) { +func (o *LoginOK) SetPayload(payload string) { o.Payload = payload } diff --git a/rest_server_zrok/operations/account/regenerate_account_token.go b/rest_server_zrok/operations/account/regenerate_account_token.go new file mode 100644 index 00000000..2b6483b2 --- /dev/null +++ b/rest_server_zrok/operations/account/regenerate_account_token.go @@ -0,0 +1,148 @@ +// Code generated by go-swagger; DO NOT EDIT. + +package account + +// This file was generated by the swagger tool. +// Editing this file might prove futile when you re-run the generate command + +import ( + "context" + "net/http" + + "github.com/go-openapi/runtime/middleware" + "github.com/go-openapi/strfmt" + "github.com/go-openapi/swag" + + "github.com/openziti/zrok/rest_model_zrok" +) + +// RegenerateAccountTokenHandlerFunc turns a function with the right signature into a regenerate account token handler +type RegenerateAccountTokenHandlerFunc func(RegenerateAccountTokenParams, *rest_model_zrok.Principal) middleware.Responder + +// Handle executing the request and returning a response +func (fn RegenerateAccountTokenHandlerFunc) Handle(params RegenerateAccountTokenParams, principal *rest_model_zrok.Principal) middleware.Responder { + return fn(params, principal) +} + +// RegenerateAccountTokenHandler interface for that can handle valid regenerate account token params +type RegenerateAccountTokenHandler interface { + Handle(RegenerateAccountTokenParams, *rest_model_zrok.Principal) middleware.Responder +} + +// NewRegenerateAccountToken creates a new http.Handler for the regenerate account token operation +func NewRegenerateAccountToken(ctx *middleware.Context, handler RegenerateAccountTokenHandler) *RegenerateAccountToken { + return &RegenerateAccountToken{Context: ctx, Handler: handler} +} + +/* + RegenerateAccountToken swagger:route POST /regenerateAccountToken account regenerateAccountToken + +RegenerateAccountToken regenerate account token API +*/ +type RegenerateAccountToken struct { + Context *middleware.Context + Handler RegenerateAccountTokenHandler +} + +func (o *RegenerateAccountToken) ServeHTTP(rw http.ResponseWriter, r *http.Request) { + route, rCtx, _ := o.Context.RouteInfo(r) + if rCtx != nil { + *r = *rCtx + } + var Params = NewRegenerateAccountTokenParams() + uprinc, aCtx, err := o.Context.Authorize(r, route) + if err != nil { + o.Context.Respond(rw, r, route.Produces, route, err) + return + } + if aCtx != nil { + *r = *aCtx + } + var principal *rest_model_zrok.Principal + if uprinc != nil { + principal = uprinc.(*rest_model_zrok.Principal) // this is really a rest_model_zrok.Principal, I promise + } + + if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params + o.Context.Respond(rw, r, route.Produces, route, err) + return + } + + res := o.Handler.Handle(Params, principal) // actually handle the request + o.Context.Respond(rw, r, route.Produces, route, res) + +} + +// RegenerateAccountTokenBody regenerate account token body +// +// swagger:model RegenerateAccountTokenBody +type RegenerateAccountTokenBody struct { + + // email address + EmailAddress string `json:"emailAddress,omitempty"` +} + +// Validate validates this regenerate account token body +func (o *RegenerateAccountTokenBody) Validate(formats strfmt.Registry) error { + return nil +} + +// ContextValidate validates this regenerate account token body based on context it is used +func (o *RegenerateAccountTokenBody) ContextValidate(ctx context.Context, formats strfmt.Registry) error { + return nil +} + +// MarshalBinary interface implementation +func (o *RegenerateAccountTokenBody) MarshalBinary() ([]byte, error) { + if o == nil { + return nil, nil + } + return swag.WriteJSON(o) +} + +// UnmarshalBinary interface implementation +func (o *RegenerateAccountTokenBody) UnmarshalBinary(b []byte) error { + var res RegenerateAccountTokenBody + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *o = res + return nil +} + +// RegenerateAccountTokenOKBody regenerate account token o k body +// +// swagger:model RegenerateAccountTokenOKBody +type RegenerateAccountTokenOKBody struct { + + // account token + AccountToken string `json:"accountToken,omitempty"` +} + +// Validate validates this regenerate account token o k body +func (o *RegenerateAccountTokenOKBody) Validate(formats strfmt.Registry) error { + return nil +} + +// ContextValidate validates this regenerate account token o k body based on context it is used +func (o *RegenerateAccountTokenOKBody) ContextValidate(ctx context.Context, formats strfmt.Registry) error { + return nil +} + +// MarshalBinary interface implementation +func (o *RegenerateAccountTokenOKBody) MarshalBinary() ([]byte, error) { + if o == nil { + return nil, nil + } + return swag.WriteJSON(o) +} + +// UnmarshalBinary interface implementation +func (o *RegenerateAccountTokenOKBody) UnmarshalBinary(b []byte) error { + var res RegenerateAccountTokenOKBody + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *o = res + return nil +} diff --git a/rest_server_zrok/operations/account/regenerate_account_token_parameters.go b/rest_server_zrok/operations/account/regenerate_account_token_parameters.go new file mode 100644 index 00000000..714deef9 --- /dev/null +++ b/rest_server_zrok/operations/account/regenerate_account_token_parameters.go @@ -0,0 +1,74 @@ +// Code generated by go-swagger; DO NOT EDIT. + +package account + +// This file was generated by the swagger tool. +// Editing this file might prove futile when you re-run the swagger generate command + +import ( + "net/http" + + "github.com/go-openapi/errors" + "github.com/go-openapi/runtime" + "github.com/go-openapi/runtime/middleware" + "github.com/go-openapi/validate" +) + +// NewRegenerateAccountTokenParams creates a new RegenerateAccountTokenParams object +// +// There are no default values defined in the spec. +func NewRegenerateAccountTokenParams() RegenerateAccountTokenParams { + + return RegenerateAccountTokenParams{} +} + +// RegenerateAccountTokenParams contains all the bound params for the regenerate account token operation +// typically these are obtained from a http.Request +// +// swagger:parameters regenerateAccountToken +type RegenerateAccountTokenParams struct { + + // HTTP Request Object + HTTPRequest *http.Request `json:"-"` + + /* + In: body + */ + Body RegenerateAccountTokenBody +} + +// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface +// for simple values it will use straight method calls. +// +// To ensure default values, the struct must have been initialized with NewRegenerateAccountTokenParams() beforehand. +func (o *RegenerateAccountTokenParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error { + var res []error + + o.HTTPRequest = r + + if runtime.HasBody(r) { + defer r.Body.Close() + var body RegenerateAccountTokenBody + if err := route.Consumer.Consume(r.Body, &body); err != nil { + res = append(res, errors.NewParseError("body", "body", "", err)) + } else { + // validate body object + if err := body.Validate(route.Formats); err != nil { + res = append(res, err) + } + + ctx := validate.WithOperationRequest(r.Context()) + if err := body.ContextValidate(ctx, route.Formats); err != nil { + res = append(res, err) + } + + if len(res) == 0 { + o.Body = body + } + } + } + if len(res) > 0 { + return errors.CompositeValidationError(res...) + } + return nil +} diff --git a/rest_server_zrok/operations/account/regenerate_account_token_responses.go b/rest_server_zrok/operations/account/regenerate_account_token_responses.go new file mode 100644 index 00000000..d504c068 --- /dev/null +++ b/rest_server_zrok/operations/account/regenerate_account_token_responses.go @@ -0,0 +1,107 @@ +// Code generated by go-swagger; DO NOT EDIT. + +package account + +// This file was generated by the swagger tool. +// Editing this file might prove futile when you re-run the swagger generate command + +import ( + "net/http" + + "github.com/go-openapi/runtime" +) + +// RegenerateAccountTokenOKCode is the HTTP code returned for type RegenerateAccountTokenOK +const RegenerateAccountTokenOKCode int = 200 + +/* +RegenerateAccountTokenOK regenerate account token + +swagger:response regenerateAccountTokenOK +*/ +type RegenerateAccountTokenOK struct { + + /* + In: Body + */ + Payload *RegenerateAccountTokenOKBody `json:"body,omitempty"` +} + +// NewRegenerateAccountTokenOK creates RegenerateAccountTokenOK with default headers values +func NewRegenerateAccountTokenOK() *RegenerateAccountTokenOK { + + return &RegenerateAccountTokenOK{} +} + +// WithPayload adds the payload to the regenerate account token o k response +func (o *RegenerateAccountTokenOK) WithPayload(payload *RegenerateAccountTokenOKBody) *RegenerateAccountTokenOK { + o.Payload = payload + return o +} + +// SetPayload sets the payload to the regenerate account token o k response +func (o *RegenerateAccountTokenOK) SetPayload(payload *RegenerateAccountTokenOKBody) { + o.Payload = payload +} + +// WriteResponse to the client +func (o *RegenerateAccountTokenOK) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { + + rw.WriteHeader(200) + if o.Payload != nil { + payload := o.Payload + if err := producer.Produce(rw, payload); err != nil { + panic(err) // let the recovery middleware deal with this + } + } +} + +// RegenerateAccountTokenNotFoundCode is the HTTP code returned for type RegenerateAccountTokenNotFound +const RegenerateAccountTokenNotFoundCode int = 404 + +/* +RegenerateAccountTokenNotFound account not found + +swagger:response regenerateAccountTokenNotFound +*/ +type RegenerateAccountTokenNotFound struct { +} + +// NewRegenerateAccountTokenNotFound creates RegenerateAccountTokenNotFound with default headers values +func NewRegenerateAccountTokenNotFound() *RegenerateAccountTokenNotFound { + + return &RegenerateAccountTokenNotFound{} +} + +// WriteResponse to the client +func (o *RegenerateAccountTokenNotFound) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { + + rw.Header().Del(runtime.HeaderContentType) //Remove Content-Type on empty responses + + rw.WriteHeader(404) +} + +// RegenerateAccountTokenInternalServerErrorCode is the HTTP code returned for type RegenerateAccountTokenInternalServerError +const RegenerateAccountTokenInternalServerErrorCode int = 500 + +/* +RegenerateAccountTokenInternalServerError internal server error + +swagger:response regenerateAccountTokenInternalServerError +*/ +type RegenerateAccountTokenInternalServerError struct { +} + +// NewRegenerateAccountTokenInternalServerError creates RegenerateAccountTokenInternalServerError with default headers values +func NewRegenerateAccountTokenInternalServerError() *RegenerateAccountTokenInternalServerError { + + return &RegenerateAccountTokenInternalServerError{} +} + +// WriteResponse to the client +func (o *RegenerateAccountTokenInternalServerError) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { + + rw.Header().Del(runtime.HeaderContentType) //Remove Content-Type on empty responses + + rw.WriteHeader(500) +} diff --git a/rest_server_zrok/operations/account/regenerate_token_urlbuilder.go b/rest_server_zrok/operations/account/regenerate_account_token_urlbuilder.go similarity index 70% rename from rest_server_zrok/operations/account/regenerate_token_urlbuilder.go rename to rest_server_zrok/operations/account/regenerate_account_token_urlbuilder.go index 30d6d68c..919edd11 100644 --- a/rest_server_zrok/operations/account/regenerate_token_urlbuilder.go +++ b/rest_server_zrok/operations/account/regenerate_account_token_urlbuilder.go @@ -11,15 +11,15 @@ import ( golangswaggerpaths "path" ) -// RegenerateTokenURL generates an URL for the regenerate token operation -type RegenerateTokenURL struct { +// RegenerateAccountTokenURL generates an URL for the regenerate account token operation +type RegenerateAccountTokenURL struct { _basePath string } // WithBasePath sets the base path for this url builder, only required when it's different from the // base path specified in the swagger spec. // When the value of the base path is an empty string -func (o *RegenerateTokenURL) WithBasePath(bp string) *RegenerateTokenURL { +func (o *RegenerateAccountTokenURL) WithBasePath(bp string) *RegenerateAccountTokenURL { o.SetBasePath(bp) return o } @@ -27,15 +27,15 @@ func (o *RegenerateTokenURL) WithBasePath(bp string) *RegenerateTokenURL { // SetBasePath sets the base path for this url builder, only required when it's different from the // base path specified in the swagger spec. // When the value of the base path is an empty string -func (o *RegenerateTokenURL) SetBasePath(bp string) { +func (o *RegenerateAccountTokenURL) SetBasePath(bp string) { o._basePath = bp } // Build a url path and query string -func (o *RegenerateTokenURL) Build() (*url.URL, error) { +func (o *RegenerateAccountTokenURL) Build() (*url.URL, error) { var _result url.URL - var _path = "/regenerateToken" + var _path = "/regenerateAccountToken" _basePath := o._basePath if _basePath == "" { @@ -47,7 +47,7 @@ func (o *RegenerateTokenURL) Build() (*url.URL, error) { } // Must is a helper function to panic when the url builder returns an error -func (o *RegenerateTokenURL) Must(u *url.URL, err error) *url.URL { +func (o *RegenerateAccountTokenURL) Must(u *url.URL, err error) *url.URL { if err != nil { panic(err) } @@ -58,17 +58,17 @@ func (o *RegenerateTokenURL) Must(u *url.URL, err error) *url.URL { } // String returns the string representation of the path with query string -func (o *RegenerateTokenURL) String() string { +func (o *RegenerateAccountTokenURL) String() string { return o.Must(o.Build()).String() } // BuildFull builds a full url with scheme, host, path and query string -func (o *RegenerateTokenURL) BuildFull(scheme, host string) (*url.URL, error) { +func (o *RegenerateAccountTokenURL) BuildFull(scheme, host string) (*url.URL, error) { if scheme == "" { - return nil, errors.New("scheme is required for a full url on RegenerateTokenURL") + return nil, errors.New("scheme is required for a full url on RegenerateAccountTokenURL") } if host == "" { - return nil, errors.New("host is required for a full url on RegenerateTokenURL") + return nil, errors.New("host is required for a full url on RegenerateAccountTokenURL") } base, err := o.Build() @@ -82,6 +82,6 @@ func (o *RegenerateTokenURL) BuildFull(scheme, host string) (*url.URL, error) { } // StringFull returns the string representation of a complete url -func (o *RegenerateTokenURL) StringFull(scheme, host string) string { +func (o *RegenerateAccountTokenURL) StringFull(scheme, host string) string { return o.Must(o.BuildFull(scheme, host)).String() } diff --git a/rest_server_zrok/operations/account/regenerate_token.go b/rest_server_zrok/operations/account/regenerate_token.go deleted file mode 100644 index 146b2799..00000000 --- a/rest_server_zrok/operations/account/regenerate_token.go +++ /dev/null @@ -1,148 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -package account - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "context" - "net/http" - - "github.com/go-openapi/runtime/middleware" - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" - - "github.com/openziti/zrok/rest_model_zrok" -) - -// RegenerateTokenHandlerFunc turns a function with the right signature into a regenerate token handler -type RegenerateTokenHandlerFunc func(RegenerateTokenParams, *rest_model_zrok.Principal) middleware.Responder - -// Handle executing the request and returning a response -func (fn RegenerateTokenHandlerFunc) Handle(params RegenerateTokenParams, principal *rest_model_zrok.Principal) middleware.Responder { - return fn(params, principal) -} - -// RegenerateTokenHandler interface for that can handle valid regenerate token params -type RegenerateTokenHandler interface { - Handle(RegenerateTokenParams, *rest_model_zrok.Principal) middleware.Responder -} - -// NewRegenerateToken creates a new http.Handler for the regenerate token operation -func NewRegenerateToken(ctx *middleware.Context, handler RegenerateTokenHandler) *RegenerateToken { - return &RegenerateToken{Context: ctx, Handler: handler} -} - -/* - RegenerateToken swagger:route POST /regenerateToken account regenerateToken - -RegenerateToken regenerate token API -*/ -type RegenerateToken struct { - Context *middleware.Context - Handler RegenerateTokenHandler -} - -func (o *RegenerateToken) ServeHTTP(rw http.ResponseWriter, r *http.Request) { - route, rCtx, _ := o.Context.RouteInfo(r) - if rCtx != nil { - *r = *rCtx - } - var Params = NewRegenerateTokenParams() - uprinc, aCtx, err := o.Context.Authorize(r, route) - if err != nil { - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - if aCtx != nil { - *r = *aCtx - } - var principal *rest_model_zrok.Principal - if uprinc != nil { - principal = uprinc.(*rest_model_zrok.Principal) // this is really a rest_model_zrok.Principal, I promise - } - - if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - - res := o.Handler.Handle(Params, principal) // actually handle the request - o.Context.Respond(rw, r, route.Produces, route, res) - -} - -// RegenerateTokenBody regenerate token body -// -// swagger:model RegenerateTokenBody -type RegenerateTokenBody struct { - - // email address - EmailAddress string `json:"emailAddress,omitempty"` -} - -// Validate validates this regenerate token body -func (o *RegenerateTokenBody) Validate(formats strfmt.Registry) error { - return nil -} - -// ContextValidate validates this regenerate token body based on context it is used -func (o *RegenerateTokenBody) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (o *RegenerateTokenBody) MarshalBinary() ([]byte, error) { - if o == nil { - return nil, nil - } - return swag.WriteJSON(o) -} - -// UnmarshalBinary interface implementation -func (o *RegenerateTokenBody) UnmarshalBinary(b []byte) error { - var res RegenerateTokenBody - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *o = res - return nil -} - -// RegenerateTokenOKBody regenerate token o k body -// -// swagger:model RegenerateTokenOKBody -type RegenerateTokenOKBody struct { - - // token - Token string `json:"token,omitempty"` -} - -// Validate validates this regenerate token o k body -func (o *RegenerateTokenOKBody) Validate(formats strfmt.Registry) error { - return nil -} - -// ContextValidate validates this regenerate token o k body based on context it is used -func (o *RegenerateTokenOKBody) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (o *RegenerateTokenOKBody) MarshalBinary() ([]byte, error) { - if o == nil { - return nil, nil - } - return swag.WriteJSON(o) -} - -// UnmarshalBinary interface implementation -func (o *RegenerateTokenOKBody) UnmarshalBinary(b []byte) error { - var res RegenerateTokenOKBody - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *o = res - return nil -} diff --git a/rest_server_zrok/operations/account/regenerate_token_responses.go b/rest_server_zrok/operations/account/regenerate_token_responses.go deleted file mode 100644 index 561841b4..00000000 --- a/rest_server_zrok/operations/account/regenerate_token_responses.go +++ /dev/null @@ -1,107 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -package account - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime" -) - -// RegenerateTokenOKCode is the HTTP code returned for type RegenerateTokenOK -const RegenerateTokenOKCode int = 200 - -/* -RegenerateTokenOK regenerate account token - -swagger:response regenerateTokenOK -*/ -type RegenerateTokenOK struct { - - /* - In: Body - */ - Payload *RegenerateTokenOKBody `json:"body,omitempty"` -} - -// NewRegenerateTokenOK creates RegenerateTokenOK with default headers values -func NewRegenerateTokenOK() *RegenerateTokenOK { - - return &RegenerateTokenOK{} -} - -// WithPayload adds the payload to the regenerate token o k response -func (o *RegenerateTokenOK) WithPayload(payload *RegenerateTokenOKBody) *RegenerateTokenOK { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the regenerate token o k response -func (o *RegenerateTokenOK) SetPayload(payload *RegenerateTokenOKBody) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *RegenerateTokenOK) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(200) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} - -// RegenerateTokenNotFoundCode is the HTTP code returned for type RegenerateTokenNotFound -const RegenerateTokenNotFoundCode int = 404 - -/* -RegenerateTokenNotFound account not found - -swagger:response regenerateTokenNotFound -*/ -type RegenerateTokenNotFound struct { -} - -// NewRegenerateTokenNotFound creates RegenerateTokenNotFound with default headers values -func NewRegenerateTokenNotFound() *RegenerateTokenNotFound { - - return &RegenerateTokenNotFound{} -} - -// WriteResponse to the client -func (o *RegenerateTokenNotFound) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.Header().Del(runtime.HeaderContentType) //Remove Content-Type on empty responses - - rw.WriteHeader(404) -} - -// RegenerateTokenInternalServerErrorCode is the HTTP code returned for type RegenerateTokenInternalServerError -const RegenerateTokenInternalServerErrorCode int = 500 - -/* -RegenerateTokenInternalServerError internal server error - -swagger:response regenerateTokenInternalServerError -*/ -type RegenerateTokenInternalServerError struct { -} - -// NewRegenerateTokenInternalServerError creates RegenerateTokenInternalServerError with default headers values -func NewRegenerateTokenInternalServerError() *RegenerateTokenInternalServerError { - - return &RegenerateTokenInternalServerError{} -} - -// WriteResponse to the client -func (o *RegenerateTokenInternalServerError) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.Header().Del(runtime.HeaderContentType) //Remove Content-Type on empty responses - - rw.WriteHeader(500) -} diff --git a/rest_server_zrok/operations/account/register.go b/rest_server_zrok/operations/account/register.go index 55df1dca..7262f413 100644 --- a/rest_server_zrok/operations/account/register.go +++ b/rest_server_zrok/operations/account/register.go @@ -6,9 +6,12 @@ package account // Editing this file might prove futile when you re-run the generate command import ( + "context" "net/http" "github.com/go-openapi/runtime/middleware" + "github.com/go-openapi/strfmt" + "github.com/go-openapi/swag" ) // RegisterHandlerFunc turns a function with the right signature into a register handler @@ -54,3 +57,80 @@ func (o *Register) ServeHTTP(rw http.ResponseWriter, r *http.Request) { o.Context.Respond(rw, r, route.Produces, route, res) } + +// RegisterBody register body +// +// swagger:model RegisterBody +type RegisterBody struct { + + // password + Password string `json:"password,omitempty"` + + // register token + RegisterToken string `json:"registerToken,omitempty"` +} + +// Validate validates this register body +func (o *RegisterBody) Validate(formats strfmt.Registry) error { + return nil +} + +// ContextValidate validates this register body based on context it is used +func (o *RegisterBody) ContextValidate(ctx context.Context, formats strfmt.Registry) error { + return nil +} + +// MarshalBinary interface implementation +func (o *RegisterBody) MarshalBinary() ([]byte, error) { + if o == nil { + return nil, nil + } + return swag.WriteJSON(o) +} + +// UnmarshalBinary interface implementation +func (o *RegisterBody) UnmarshalBinary(b []byte) error { + var res RegisterBody + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *o = res + return nil +} + +// RegisterOKBody register o k body +// +// swagger:model RegisterOKBody +type RegisterOKBody struct { + + // account token + AccountToken string `json:"accountToken,omitempty"` +} + +// Validate validates this register o k body +func (o *RegisterOKBody) Validate(formats strfmt.Registry) error { + return nil +} + +// ContextValidate validates this register o k body based on context it is used +func (o *RegisterOKBody) ContextValidate(ctx context.Context, formats strfmt.Registry) error { + return nil +} + +// MarshalBinary interface implementation +func (o *RegisterOKBody) MarshalBinary() ([]byte, error) { + if o == nil { + return nil, nil + } + return swag.WriteJSON(o) +} + +// UnmarshalBinary interface implementation +func (o *RegisterOKBody) UnmarshalBinary(b []byte) error { + var res RegisterOKBody + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *o = res + return nil +} diff --git a/rest_server_zrok/operations/account/register_parameters.go b/rest_server_zrok/operations/account/register_parameters.go index a37ee656..26aab104 100644 --- a/rest_server_zrok/operations/account/register_parameters.go +++ b/rest_server_zrok/operations/account/register_parameters.go @@ -12,8 +12,6 @@ import ( "github.com/go-openapi/runtime" "github.com/go-openapi/runtime/middleware" "github.com/go-openapi/validate" - - "github.com/openziti/zrok/rest_model_zrok" ) // NewRegisterParams creates a new RegisterParams object @@ -36,7 +34,7 @@ type RegisterParams struct { /* In: body */ - Body *rest_model_zrok.RegisterRequest + Body RegisterBody } // BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface @@ -50,7 +48,7 @@ func (o *RegisterParams) BindRequest(r *http.Request, route *middleware.MatchedR if runtime.HasBody(r) { defer r.Body.Close() - var body rest_model_zrok.RegisterRequest + var body RegisterBody if err := route.Consumer.Consume(r.Body, &body); err != nil { res = append(res, errors.NewParseError("body", "body", "", err)) } else { @@ -65,7 +63,7 @@ func (o *RegisterParams) BindRequest(r *http.Request, route *middleware.MatchedR } if len(res) == 0 { - o.Body = &body + o.Body = body } } } diff --git a/rest_server_zrok/operations/account/register_responses.go b/rest_server_zrok/operations/account/register_responses.go index 38bbe8b0..9a209150 100644 --- a/rest_server_zrok/operations/account/register_responses.go +++ b/rest_server_zrok/operations/account/register_responses.go @@ -26,7 +26,7 @@ type RegisterOK struct { /* In: Body */ - Payload *rest_model_zrok.RegisterResponse `json:"body,omitempty"` + Payload *RegisterOKBody `json:"body,omitempty"` } // NewRegisterOK creates RegisterOK with default headers values @@ -36,13 +36,13 @@ func NewRegisterOK() *RegisterOK { } // WithPayload adds the payload to the register o k response -func (o *RegisterOK) WithPayload(payload *rest_model_zrok.RegisterResponse) *RegisterOK { +func (o *RegisterOK) WithPayload(payload *RegisterOKBody) *RegisterOK { o.Payload = payload return o } // SetPayload sets the payload to the register o k response -func (o *RegisterOK) SetPayload(payload *rest_model_zrok.RegisterResponse) { +func (o *RegisterOK) SetPayload(payload *RegisterOKBody) { o.Payload = payload } diff --git a/rest_server_zrok/operations/account/reset_password.go b/rest_server_zrok/operations/account/reset_password.go index 41d4b57e..729272d5 100644 --- a/rest_server_zrok/operations/account/reset_password.go +++ b/rest_server_zrok/operations/account/reset_password.go @@ -6,9 +6,12 @@ package account // Editing this file might prove futile when you re-run the generate command import ( + "context" "net/http" "github.com/go-openapi/runtime/middleware" + "github.com/go-openapi/strfmt" + "github.com/go-openapi/swag" ) // ResetPasswordHandlerFunc turns a function with the right signature into a reset password handler @@ -54,3 +57,43 @@ func (o *ResetPassword) ServeHTTP(rw http.ResponseWriter, r *http.Request) { o.Context.Respond(rw, r, route.Produces, route, res) } + +// ResetPasswordBody reset password body +// +// swagger:model ResetPasswordBody +type ResetPasswordBody struct { + + // password + Password string `json:"password,omitempty"` + + // reset token + ResetToken string `json:"resetToken,omitempty"` +} + +// Validate validates this reset password body +func (o *ResetPasswordBody) Validate(formats strfmt.Registry) error { + return nil +} + +// ContextValidate validates this reset password body based on context it is used +func (o *ResetPasswordBody) ContextValidate(ctx context.Context, formats strfmt.Registry) error { + return nil +} + +// MarshalBinary interface implementation +func (o *ResetPasswordBody) MarshalBinary() ([]byte, error) { + if o == nil { + return nil, nil + } + return swag.WriteJSON(o) +} + +// UnmarshalBinary interface implementation +func (o *ResetPasswordBody) UnmarshalBinary(b []byte) error { + var res ResetPasswordBody + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *o = res + return nil +} diff --git a/rest_server_zrok/operations/account/reset_password_parameters.go b/rest_server_zrok/operations/account/reset_password_parameters.go index 71e4137b..9930d0b5 100644 --- a/rest_server_zrok/operations/account/reset_password_parameters.go +++ b/rest_server_zrok/operations/account/reset_password_parameters.go @@ -12,8 +12,6 @@ import ( "github.com/go-openapi/runtime" "github.com/go-openapi/runtime/middleware" "github.com/go-openapi/validate" - - "github.com/openziti/zrok/rest_model_zrok" ) // NewResetPasswordParams creates a new ResetPasswordParams object @@ -36,7 +34,7 @@ type ResetPasswordParams struct { /* In: body */ - Body *rest_model_zrok.ResetPasswordRequest + Body ResetPasswordBody } // BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface @@ -50,7 +48,7 @@ func (o *ResetPasswordParams) BindRequest(r *http.Request, route *middleware.Mat if runtime.HasBody(r) { defer r.Body.Close() - var body rest_model_zrok.ResetPasswordRequest + var body ResetPasswordBody if err := route.Consumer.Consume(r.Body, &body); err != nil { res = append(res, errors.NewParseError("body", "body", "", err)) } else { @@ -65,7 +63,7 @@ func (o *ResetPasswordParams) BindRequest(r *http.Request, route *middleware.Mat } if len(res) == 0 { - o.Body = &body + o.Body = body } } } diff --git a/rest_server_zrok/operations/account/reset_password_request_responses.go b/rest_server_zrok/operations/account/reset_password_request_responses.go index 806e3560..1254da69 100644 --- a/rest_server_zrok/operations/account/reset_password_request_responses.go +++ b/rest_server_zrok/operations/account/reset_password_request_responses.go @@ -15,7 +15,7 @@ import ( const ResetPasswordRequestCreatedCode int = 201 /* -ResetPasswordRequestCreated forgot password request created +ResetPasswordRequestCreated reset password request created swagger:response resetPasswordRequestCreated */ @@ -40,7 +40,7 @@ func (o *ResetPasswordRequestCreated) WriteResponse(rw http.ResponseWriter, prod const ResetPasswordRequestBadRequestCode int = 400 /* -ResetPasswordRequestBadRequest forgot password request not created +ResetPasswordRequestBadRequest reset password request not created swagger:response resetPasswordRequestBadRequest */ diff --git a/rest_server_zrok/operations/account/verify.go b/rest_server_zrok/operations/account/verify.go index 8427084d..45f63921 100644 --- a/rest_server_zrok/operations/account/verify.go +++ b/rest_server_zrok/operations/account/verify.go @@ -6,9 +6,12 @@ package account // Editing this file might prove futile when you re-run the generate command import ( + "context" "net/http" "github.com/go-openapi/runtime/middleware" + "github.com/go-openapi/strfmt" + "github.com/go-openapi/swag" ) // VerifyHandlerFunc turns a function with the right signature into a verify handler @@ -54,3 +57,77 @@ func (o *Verify) ServeHTTP(rw http.ResponseWriter, r *http.Request) { o.Context.Respond(rw, r, route.Produces, route, res) } + +// VerifyBody verify body +// +// swagger:model VerifyBody +type VerifyBody struct { + + // register token + RegisterToken string `json:"registerToken,omitempty"` +} + +// Validate validates this verify body +func (o *VerifyBody) Validate(formats strfmt.Registry) error { + return nil +} + +// ContextValidate validates this verify body based on context it is used +func (o *VerifyBody) ContextValidate(ctx context.Context, formats strfmt.Registry) error { + return nil +} + +// MarshalBinary interface implementation +func (o *VerifyBody) MarshalBinary() ([]byte, error) { + if o == nil { + return nil, nil + } + return swag.WriteJSON(o) +} + +// UnmarshalBinary interface implementation +func (o *VerifyBody) UnmarshalBinary(b []byte) error { + var res VerifyBody + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *o = res + return nil +} + +// VerifyOKBody verify o k body +// +// swagger:model VerifyOKBody +type VerifyOKBody struct { + + // email + Email string `json:"email,omitempty"` +} + +// Validate validates this verify o k body +func (o *VerifyOKBody) Validate(formats strfmt.Registry) error { + return nil +} + +// ContextValidate validates this verify o k body based on context it is used +func (o *VerifyOKBody) ContextValidate(ctx context.Context, formats strfmt.Registry) error { + return nil +} + +// MarshalBinary interface implementation +func (o *VerifyOKBody) MarshalBinary() ([]byte, error) { + if o == nil { + return nil, nil + } + return swag.WriteJSON(o) +} + +// UnmarshalBinary interface implementation +func (o *VerifyOKBody) UnmarshalBinary(b []byte) error { + var res VerifyOKBody + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *o = res + return nil +} diff --git a/rest_server_zrok/operations/account/verify_parameters.go b/rest_server_zrok/operations/account/verify_parameters.go index 94298eb6..c389ad45 100644 --- a/rest_server_zrok/operations/account/verify_parameters.go +++ b/rest_server_zrok/operations/account/verify_parameters.go @@ -12,8 +12,6 @@ import ( "github.com/go-openapi/runtime" "github.com/go-openapi/runtime/middleware" "github.com/go-openapi/validate" - - "github.com/openziti/zrok/rest_model_zrok" ) // NewVerifyParams creates a new VerifyParams object @@ -36,7 +34,7 @@ type VerifyParams struct { /* In: body */ - Body *rest_model_zrok.VerifyRequest + Body VerifyBody } // BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface @@ -50,7 +48,7 @@ func (o *VerifyParams) BindRequest(r *http.Request, route *middleware.MatchedRou if runtime.HasBody(r) { defer r.Body.Close() - var body rest_model_zrok.VerifyRequest + var body VerifyBody if err := route.Consumer.Consume(r.Body, &body); err != nil { res = append(res, errors.NewParseError("body", "body", "", err)) } else { @@ -65,7 +63,7 @@ func (o *VerifyParams) BindRequest(r *http.Request, route *middleware.MatchedRou } if len(res) == 0 { - o.Body = &body + o.Body = body } } } diff --git a/rest_server_zrok/operations/account/verify_responses.go b/rest_server_zrok/operations/account/verify_responses.go index d0d14954..e44fa38e 100644 --- a/rest_server_zrok/operations/account/verify_responses.go +++ b/rest_server_zrok/operations/account/verify_responses.go @@ -9,15 +9,13 @@ import ( "net/http" "github.com/go-openapi/runtime" - - "github.com/openziti/zrok/rest_model_zrok" ) // VerifyOKCode is the HTTP code returned for type VerifyOK const VerifyOKCode int = 200 /* -VerifyOK token ready +VerifyOK registration token ready swagger:response verifyOK */ @@ -26,7 +24,7 @@ type VerifyOK struct { /* In: Body */ - Payload *rest_model_zrok.VerifyResponse `json:"body,omitempty"` + Payload *VerifyOKBody `json:"body,omitempty"` } // NewVerifyOK creates VerifyOK with default headers values @@ -36,13 +34,13 @@ func NewVerifyOK() *VerifyOK { } // WithPayload adds the payload to the verify o k response -func (o *VerifyOK) WithPayload(payload *rest_model_zrok.VerifyResponse) *VerifyOK { +func (o *VerifyOK) WithPayload(payload *VerifyOKBody) *VerifyOK { o.Payload = payload return o } // SetPayload sets the payload to the verify o k response -func (o *VerifyOK) SetPayload(payload *rest_model_zrok.VerifyResponse) { +func (o *VerifyOK) SetPayload(payload *VerifyOKBody) { o.Payload = payload } @@ -62,7 +60,7 @@ func (o *VerifyOK) WriteResponse(rw http.ResponseWriter, producer runtime.Produc const VerifyNotFoundCode int = 404 /* -VerifyNotFound token not found +VerifyNotFound registration token not found swagger:response verifyNotFound */ diff --git a/rest_server_zrok/operations/admin/add_organization_member.go b/rest_server_zrok/operations/admin/add_organization_member.go index ce8f8db5..8b68a101 100644 --- a/rest_server_zrok/operations/admin/add_organization_member.go +++ b/rest_server_zrok/operations/admin/add_organization_member.go @@ -84,8 +84,8 @@ type AddOrganizationMemberBody struct { // email Email string `json:"email,omitempty"` - // token - Token string `json:"token,omitempty"` + // organization token + OrganizationToken string `json:"organizationToken,omitempty"` } // Validate validates this add organization member body diff --git a/rest_server_zrok/operations/admin/create_account.go b/rest_server_zrok/operations/admin/create_account.go index 186dbb09..6eb23202 100644 --- a/rest_server_zrok/operations/admin/create_account.go +++ b/rest_server_zrok/operations/admin/create_account.go @@ -118,8 +118,8 @@ func (o *CreateAccountBody) UnmarshalBinary(b []byte) error { // swagger:model CreateAccountCreatedBody type CreateAccountCreatedBody struct { - // token - Token string `json:"token,omitempty"` + // account token + AccountToken string `json:"accountToken,omitempty"` } // Validate validates this create account created body diff --git a/rest_server_zrok/operations/admin/create_frontend.go b/rest_server_zrok/operations/admin/create_frontend.go index 2509c9a0..dd2a15aa 100644 --- a/rest_server_zrok/operations/admin/create_frontend.go +++ b/rest_server_zrok/operations/admin/create_frontend.go @@ -6,9 +6,15 @@ package admin // Editing this file might prove futile when you re-run the generate command import ( + "context" + "encoding/json" "net/http" + "github.com/go-openapi/errors" "github.com/go-openapi/runtime/middleware" + "github.com/go-openapi/strfmt" + "github.com/go-openapi/swag" + "github.com/go-openapi/validate" "github.com/openziti/zrok/rest_model_zrok" ) @@ -69,3 +75,138 @@ func (o *CreateFrontend) ServeHTTP(rw http.ResponseWriter, r *http.Request) { o.Context.Respond(rw, r, route.Produces, route, res) } + +// CreateFrontendBody create frontend body +// +// swagger:model CreateFrontendBody +type CreateFrontendBody struct { + + // permission mode + // Enum: [open closed] + PermissionMode string `json:"permissionMode,omitempty"` + + // public name + PublicName string `json:"public_name,omitempty"` + + // url template + URLTemplate string `json:"url_template,omitempty"` + + // z Id + ZID string `json:"zId,omitempty"` +} + +// Validate validates this create frontend body +func (o *CreateFrontendBody) Validate(formats strfmt.Registry) error { + var res []error + + if err := o.validatePermissionMode(formats); err != nil { + res = append(res, err) + } + + if len(res) > 0 { + return errors.CompositeValidationError(res...) + } + return nil +} + +var createFrontendBodyTypePermissionModePropEnum []interface{} + +func init() { + var res []string + if err := json.Unmarshal([]byte(`["open","closed"]`), &res); err != nil { + panic(err) + } + for _, v := range res { + createFrontendBodyTypePermissionModePropEnum = append(createFrontendBodyTypePermissionModePropEnum, v) + } +} + +const ( + + // CreateFrontendBodyPermissionModeOpen captures enum value "open" + CreateFrontendBodyPermissionModeOpen string = "open" + + // CreateFrontendBodyPermissionModeClosed captures enum value "closed" + CreateFrontendBodyPermissionModeClosed string = "closed" +) + +// prop value enum +func (o *CreateFrontendBody) validatePermissionModeEnum(path, location string, value string) error { + if err := validate.EnumCase(path, location, value, createFrontendBodyTypePermissionModePropEnum, true); err != nil { + return err + } + return nil +} + +func (o *CreateFrontendBody) validatePermissionMode(formats strfmt.Registry) error { + if swag.IsZero(o.PermissionMode) { // not required + return nil + } + + // value enum + if err := o.validatePermissionModeEnum("body"+"."+"permissionMode", "body", o.PermissionMode); err != nil { + return err + } + + return nil +} + +// ContextValidate validates this create frontend body based on context it is used +func (o *CreateFrontendBody) ContextValidate(ctx context.Context, formats strfmt.Registry) error { + return nil +} + +// MarshalBinary interface implementation +func (o *CreateFrontendBody) MarshalBinary() ([]byte, error) { + if o == nil { + return nil, nil + } + return swag.WriteJSON(o) +} + +// UnmarshalBinary interface implementation +func (o *CreateFrontendBody) UnmarshalBinary(b []byte) error { + var res CreateFrontendBody + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *o = res + return nil +} + +// CreateFrontendCreatedBody create frontend created body +// +// swagger:model CreateFrontendCreatedBody +type CreateFrontendCreatedBody struct { + + // frontend token + FrontendToken string `json:"frontendToken,omitempty"` +} + +// Validate validates this create frontend created body +func (o *CreateFrontendCreatedBody) Validate(formats strfmt.Registry) error { + return nil +} + +// ContextValidate validates this create frontend created body based on context it is used +func (o *CreateFrontendCreatedBody) ContextValidate(ctx context.Context, formats strfmt.Registry) error { + return nil +} + +// MarshalBinary interface implementation +func (o *CreateFrontendCreatedBody) MarshalBinary() ([]byte, error) { + if o == nil { + return nil, nil + } + return swag.WriteJSON(o) +} + +// UnmarshalBinary interface implementation +func (o *CreateFrontendCreatedBody) UnmarshalBinary(b []byte) error { + var res CreateFrontendCreatedBody + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *o = res + return nil +} diff --git a/rest_server_zrok/operations/admin/create_frontend_parameters.go b/rest_server_zrok/operations/admin/create_frontend_parameters.go index 2c3fdd71..36fe2c18 100644 --- a/rest_server_zrok/operations/admin/create_frontend_parameters.go +++ b/rest_server_zrok/operations/admin/create_frontend_parameters.go @@ -12,8 +12,6 @@ import ( "github.com/go-openapi/runtime" "github.com/go-openapi/runtime/middleware" "github.com/go-openapi/validate" - - "github.com/openziti/zrok/rest_model_zrok" ) // NewCreateFrontendParams creates a new CreateFrontendParams object @@ -36,7 +34,7 @@ type CreateFrontendParams struct { /* In: body */ - Body *rest_model_zrok.CreateFrontendRequest + Body CreateFrontendBody } // BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface @@ -50,7 +48,7 @@ func (o *CreateFrontendParams) BindRequest(r *http.Request, route *middleware.Ma if runtime.HasBody(r) { defer r.Body.Close() - var body rest_model_zrok.CreateFrontendRequest + var body CreateFrontendBody if err := route.Consumer.Consume(r.Body, &body); err != nil { res = append(res, errors.NewParseError("body", "body", "", err)) } else { @@ -65,7 +63,7 @@ func (o *CreateFrontendParams) BindRequest(r *http.Request, route *middleware.Ma } if len(res) == 0 { - o.Body = &body + o.Body = body } } } diff --git a/rest_server_zrok/operations/admin/create_frontend_responses.go b/rest_server_zrok/operations/admin/create_frontend_responses.go index ae1847d7..092cbca0 100644 --- a/rest_server_zrok/operations/admin/create_frontend_responses.go +++ b/rest_server_zrok/operations/admin/create_frontend_responses.go @@ -9,8 +9,6 @@ import ( "net/http" "github.com/go-openapi/runtime" - - "github.com/openziti/zrok/rest_model_zrok" ) // CreateFrontendCreatedCode is the HTTP code returned for type CreateFrontendCreated @@ -26,7 +24,7 @@ type CreateFrontendCreated struct { /* In: Body */ - Payload *rest_model_zrok.CreateFrontendResponse `json:"body,omitempty"` + Payload *CreateFrontendCreatedBody `json:"body,omitempty"` } // NewCreateFrontendCreated creates CreateFrontendCreated with default headers values @@ -36,13 +34,13 @@ func NewCreateFrontendCreated() *CreateFrontendCreated { } // WithPayload adds the payload to the create frontend created response -func (o *CreateFrontendCreated) WithPayload(payload *rest_model_zrok.CreateFrontendResponse) *CreateFrontendCreated { +func (o *CreateFrontendCreated) WithPayload(payload *CreateFrontendCreatedBody) *CreateFrontendCreated { o.Payload = payload return o } // SetPayload sets the payload to the create frontend created response -func (o *CreateFrontendCreated) SetPayload(payload *rest_model_zrok.CreateFrontendResponse) { +func (o *CreateFrontendCreated) SetPayload(payload *CreateFrontendCreatedBody) { o.Payload = payload } diff --git a/rest_server_zrok/operations/admin/create_organization.go b/rest_server_zrok/operations/admin/create_organization.go index 6e92d316..7558a810 100644 --- a/rest_server_zrok/operations/admin/create_organization.go +++ b/rest_server_zrok/operations/admin/create_organization.go @@ -115,8 +115,8 @@ func (o *CreateOrganizationBody) UnmarshalBinary(b []byte) error { // swagger:model CreateOrganizationCreatedBody type CreateOrganizationCreatedBody struct { - // token - Token string `json:"token,omitempty"` + // organization token + OrganizationToken string `json:"organizationToken,omitempty"` } // Validate validates this create organization created body diff --git a/rest_server_zrok/operations/admin/delete_frontend.go b/rest_server_zrok/operations/admin/delete_frontend.go index 6e77d969..cd61baa1 100644 --- a/rest_server_zrok/operations/admin/delete_frontend.go +++ b/rest_server_zrok/operations/admin/delete_frontend.go @@ -6,9 +6,12 @@ package admin // Editing this file might prove futile when you re-run the generate command import ( + "context" "net/http" "github.com/go-openapi/runtime/middleware" + "github.com/go-openapi/strfmt" + "github.com/go-openapi/swag" "github.com/openziti/zrok/rest_model_zrok" ) @@ -69,3 +72,40 @@ func (o *DeleteFrontend) ServeHTTP(rw http.ResponseWriter, r *http.Request) { o.Context.Respond(rw, r, route.Produces, route, res) } + +// DeleteFrontendBody delete frontend body +// +// swagger:model DeleteFrontendBody +type DeleteFrontendBody struct { + + // frontend token + FrontendToken string `json:"frontendToken,omitempty"` +} + +// Validate validates this delete frontend body +func (o *DeleteFrontendBody) Validate(formats strfmt.Registry) error { + return nil +} + +// ContextValidate validates this delete frontend body based on context it is used +func (o *DeleteFrontendBody) ContextValidate(ctx context.Context, formats strfmt.Registry) error { + return nil +} + +// MarshalBinary interface implementation +func (o *DeleteFrontendBody) MarshalBinary() ([]byte, error) { + if o == nil { + return nil, nil + } + return swag.WriteJSON(o) +} + +// UnmarshalBinary interface implementation +func (o *DeleteFrontendBody) UnmarshalBinary(b []byte) error { + var res DeleteFrontendBody + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *o = res + return nil +} diff --git a/rest_server_zrok/operations/admin/delete_frontend_parameters.go b/rest_server_zrok/operations/admin/delete_frontend_parameters.go index 0ab08625..6cef1aac 100644 --- a/rest_server_zrok/operations/admin/delete_frontend_parameters.go +++ b/rest_server_zrok/operations/admin/delete_frontend_parameters.go @@ -12,8 +12,6 @@ import ( "github.com/go-openapi/runtime" "github.com/go-openapi/runtime/middleware" "github.com/go-openapi/validate" - - "github.com/openziti/zrok/rest_model_zrok" ) // NewDeleteFrontendParams creates a new DeleteFrontendParams object @@ -36,7 +34,7 @@ type DeleteFrontendParams struct { /* In: body */ - Body *rest_model_zrok.DeleteFrontendRequest + Body DeleteFrontendBody } // BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface @@ -50,7 +48,7 @@ func (o *DeleteFrontendParams) BindRequest(r *http.Request, route *middleware.Ma if runtime.HasBody(r) { defer r.Body.Close() - var body rest_model_zrok.DeleteFrontendRequest + var body DeleteFrontendBody if err := route.Consumer.Consume(r.Body, &body); err != nil { res = append(res, errors.NewParseError("body", "body", "", err)) } else { @@ -65,7 +63,7 @@ func (o *DeleteFrontendParams) BindRequest(r *http.Request, route *middleware.Ma } if len(res) == 0 { - o.Body = &body + o.Body = body } } } diff --git a/rest_server_zrok/operations/admin/delete_organization.go b/rest_server_zrok/operations/admin/delete_organization.go index 8868d5c0..dd3e3b2b 100644 --- a/rest_server_zrok/operations/admin/delete_organization.go +++ b/rest_server_zrok/operations/admin/delete_organization.go @@ -78,8 +78,8 @@ func (o *DeleteOrganization) ServeHTTP(rw http.ResponseWriter, r *http.Request) // swagger:model DeleteOrganizationBody type DeleteOrganizationBody struct { - // token - Token string `json:"token,omitempty"` + // organization token + OrganizationToken string `json:"organizationToken,omitempty"` } // Validate validates this delete organization body diff --git a/rest_server_zrok/operations/admin/invite_token_generate.go b/rest_server_zrok/operations/admin/invite_token_generate.go index 71b44387..563e7ea9 100644 --- a/rest_server_zrok/operations/admin/invite_token_generate.go +++ b/rest_server_zrok/operations/admin/invite_token_generate.go @@ -6,9 +6,12 @@ package admin // Editing this file might prove futile when you re-run the generate command import ( + "context" "net/http" "github.com/go-openapi/runtime/middleware" + "github.com/go-openapi/strfmt" + "github.com/go-openapi/swag" "github.com/openziti/zrok/rest_model_zrok" ) @@ -69,3 +72,40 @@ func (o *InviteTokenGenerate) ServeHTTP(rw http.ResponseWriter, r *http.Request) o.Context.Respond(rw, r, route.Produces, route, res) } + +// InviteTokenGenerateBody invite token generate body +// +// swagger:model InviteTokenGenerateBody +type InviteTokenGenerateBody struct { + + // invite tokens + InviteTokens []string `json:"inviteTokens"` +} + +// Validate validates this invite token generate body +func (o *InviteTokenGenerateBody) Validate(formats strfmt.Registry) error { + return nil +} + +// ContextValidate validates this invite token generate body based on context it is used +func (o *InviteTokenGenerateBody) ContextValidate(ctx context.Context, formats strfmt.Registry) error { + return nil +} + +// MarshalBinary interface implementation +func (o *InviteTokenGenerateBody) MarshalBinary() ([]byte, error) { + if o == nil { + return nil, nil + } + return swag.WriteJSON(o) +} + +// UnmarshalBinary interface implementation +func (o *InviteTokenGenerateBody) UnmarshalBinary(b []byte) error { + var res InviteTokenGenerateBody + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *o = res + return nil +} diff --git a/rest_server_zrok/operations/admin/invite_token_generate_parameters.go b/rest_server_zrok/operations/admin/invite_token_generate_parameters.go index 21e606ea..1fb04a97 100644 --- a/rest_server_zrok/operations/admin/invite_token_generate_parameters.go +++ b/rest_server_zrok/operations/admin/invite_token_generate_parameters.go @@ -12,8 +12,6 @@ import ( "github.com/go-openapi/runtime" "github.com/go-openapi/runtime/middleware" "github.com/go-openapi/validate" - - "github.com/openziti/zrok/rest_model_zrok" ) // NewInviteTokenGenerateParams creates a new InviteTokenGenerateParams object @@ -36,7 +34,7 @@ type InviteTokenGenerateParams struct { /* In: body */ - Body *rest_model_zrok.InviteTokenGenerateRequest + Body InviteTokenGenerateBody } // BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface @@ -50,7 +48,7 @@ func (o *InviteTokenGenerateParams) BindRequest(r *http.Request, route *middlewa if runtime.HasBody(r) { defer r.Body.Close() - var body rest_model_zrok.InviteTokenGenerateRequest + var body InviteTokenGenerateBody if err := route.Consumer.Consume(r.Body, &body); err != nil { res = append(res, errors.NewParseError("body", "body", "", err)) } else { @@ -65,7 +63,7 @@ func (o *InviteTokenGenerateParams) BindRequest(r *http.Request, route *middlewa } if len(res) == 0 { - o.Body = &body + o.Body = body } } } diff --git a/rest_server_zrok/operations/admin/invite_token_generate_responses.go b/rest_server_zrok/operations/admin/invite_token_generate_responses.go index 2126a9cc..e5b9ce42 100644 --- a/rest_server_zrok/operations/admin/invite_token_generate_responses.go +++ b/rest_server_zrok/operations/admin/invite_token_generate_responses.go @@ -15,7 +15,7 @@ import ( const InviteTokenGenerateCreatedCode int = 201 /* -InviteTokenGenerateCreated invitation tokens created +InviteTokenGenerateCreated invite tokens created swagger:response inviteTokenGenerateCreated */ @@ -40,7 +40,7 @@ func (o *InviteTokenGenerateCreated) WriteResponse(rw http.ResponseWriter, produ const InviteTokenGenerateBadRequestCode int = 400 /* -InviteTokenGenerateBadRequest invitation tokens not created +InviteTokenGenerateBadRequest invite tokens not created swagger:response inviteTokenGenerateBadRequest */ diff --git a/rest_server_zrok/operations/admin/list_frontends.go b/rest_server_zrok/operations/admin/list_frontends.go index 423724fe..77f8971d 100644 --- a/rest_server_zrok/operations/admin/list_frontends.go +++ b/rest_server_zrok/operations/admin/list_frontends.go @@ -6,9 +6,12 @@ package admin // Editing this file might prove futile when you re-run the generate command import ( + "context" "net/http" "github.com/go-openapi/runtime/middleware" + "github.com/go-openapi/strfmt" + "github.com/go-openapi/swag" "github.com/openziti/zrok/rest_model_zrok" ) @@ -69,3 +72,55 @@ func (o *ListFrontends) ServeHTTP(rw http.ResponseWriter, r *http.Request) { o.Context.Respond(rw, r, route.Produces, route, res) } + +// ListFrontendsOKBodyItems0 list frontends o k body items0 +// +// swagger:model ListFrontendsOKBodyItems0 +type ListFrontendsOKBodyItems0 struct { + + // created at + CreatedAt int64 `json:"createdAt,omitempty"` + + // frontend token + FrontendToken string `json:"frontendToken,omitempty"` + + // public name + PublicName string `json:"publicName,omitempty"` + + // updated at + UpdatedAt int64 `json:"updatedAt,omitempty"` + + // url template + URLTemplate string `json:"urlTemplate,omitempty"` + + // z Id + ZID string `json:"zId,omitempty"` +} + +// Validate validates this list frontends o k body items0 +func (o *ListFrontendsOKBodyItems0) Validate(formats strfmt.Registry) error { + return nil +} + +// ContextValidate validates this list frontends o k body items0 based on context it is used +func (o *ListFrontendsOKBodyItems0) ContextValidate(ctx context.Context, formats strfmt.Registry) error { + return nil +} + +// MarshalBinary interface implementation +func (o *ListFrontendsOKBodyItems0) MarshalBinary() ([]byte, error) { + if o == nil { + return nil, nil + } + return swag.WriteJSON(o) +} + +// UnmarshalBinary interface implementation +func (o *ListFrontendsOKBodyItems0) UnmarshalBinary(b []byte) error { + var res ListFrontendsOKBodyItems0 + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *o = res + return nil +} diff --git a/rest_server_zrok/operations/admin/list_frontends_responses.go b/rest_server_zrok/operations/admin/list_frontends_responses.go index 5359d5c7..1a93396e 100644 --- a/rest_server_zrok/operations/admin/list_frontends_responses.go +++ b/rest_server_zrok/operations/admin/list_frontends_responses.go @@ -9,8 +9,6 @@ import ( "net/http" "github.com/go-openapi/runtime" - - "github.com/openziti/zrok/rest_model_zrok" ) // ListFrontendsOKCode is the HTTP code returned for type ListFrontendsOK @@ -26,7 +24,7 @@ type ListFrontendsOK struct { /* In: Body */ - Payload rest_model_zrok.PublicFrontendList `json:"body,omitempty"` + Payload []*ListFrontendsOKBodyItems0 `json:"body,omitempty"` } // NewListFrontendsOK creates ListFrontendsOK with default headers values @@ -36,13 +34,13 @@ func NewListFrontendsOK() *ListFrontendsOK { } // WithPayload adds the payload to the list frontends o k response -func (o *ListFrontendsOK) WithPayload(payload rest_model_zrok.PublicFrontendList) *ListFrontendsOK { +func (o *ListFrontendsOK) WithPayload(payload []*ListFrontendsOKBodyItems0) *ListFrontendsOK { o.Payload = payload return o } // SetPayload sets the payload to the list frontends o k response -func (o *ListFrontendsOK) SetPayload(payload rest_model_zrok.PublicFrontendList) { +func (o *ListFrontendsOK) SetPayload(payload []*ListFrontendsOKBodyItems0) { o.Payload = payload } @@ -53,7 +51,7 @@ func (o *ListFrontendsOK) WriteResponse(rw http.ResponseWriter, producer runtime payload := o.Payload if payload == nil { // return empty array - payload = rest_model_zrok.PublicFrontendList{} + payload = make([]*ListFrontendsOKBodyItems0, 0, 50) } if err := producer.Produce(rw, payload); err != nil { diff --git a/rest_server_zrok/operations/admin/list_organization_members.go b/rest_server_zrok/operations/admin/list_organization_members.go index 1b6a05c1..4febbba0 100644 --- a/rest_server_zrok/operations/admin/list_organization_members.go +++ b/rest_server_zrok/operations/admin/list_organization_members.go @@ -80,8 +80,8 @@ func (o *ListOrganizationMembers) ServeHTTP(rw http.ResponseWriter, r *http.Requ // swagger:model ListOrganizationMembersBody type ListOrganizationMembersBody struct { - // token - Token string `json:"token,omitempty"` + // organization token + OrganizationToken string `json:"organizationToken,omitempty"` } // Validate validates this list organization members body diff --git a/rest_server_zrok/operations/admin/list_organizations.go b/rest_server_zrok/operations/admin/list_organizations.go index 112f889e..7d4dba7e 100644 --- a/rest_server_zrok/operations/admin/list_organizations.go +++ b/rest_server_zrok/operations/admin/list_organizations.go @@ -189,8 +189,8 @@ type ListOrganizationsOKBodyOrganizationsItems0 struct { // description Description string `json:"description,omitempty"` - // token - Token string `json:"token,omitempty"` + // organization token + OrganizationToken string `json:"organizationToken,omitempty"` } // Validate validates this list organizations o k body organizations items0 diff --git a/rest_server_zrok/operations/admin/remove_organization_member.go b/rest_server_zrok/operations/admin/remove_organization_member.go index 7594ba16..05245842 100644 --- a/rest_server_zrok/operations/admin/remove_organization_member.go +++ b/rest_server_zrok/operations/admin/remove_organization_member.go @@ -81,8 +81,8 @@ type RemoveOrganizationMemberBody struct { // email Email string `json:"email,omitempty"` - // token - Token string `json:"token,omitempty"` + // organization token + OrganizationToken string `json:"organizationToken,omitempty"` } // Validate validates this remove organization member body diff --git a/rest_server_zrok/operations/admin/update_frontend.go b/rest_server_zrok/operations/admin/update_frontend.go index 22bb7897..25f3cff5 100644 --- a/rest_server_zrok/operations/admin/update_frontend.go +++ b/rest_server_zrok/operations/admin/update_frontend.go @@ -6,9 +6,12 @@ package admin // Editing this file might prove futile when you re-run the generate command import ( + "context" "net/http" "github.com/go-openapi/runtime/middleware" + "github.com/go-openapi/strfmt" + "github.com/go-openapi/swag" "github.com/openziti/zrok/rest_model_zrok" ) @@ -69,3 +72,46 @@ func (o *UpdateFrontend) ServeHTTP(rw http.ResponseWriter, r *http.Request) { o.Context.Respond(rw, r, route.Produces, route, res) } + +// UpdateFrontendBody update frontend body +// +// swagger:model UpdateFrontendBody +type UpdateFrontendBody struct { + + // frontend token + FrontendToken string `json:"frontendToken,omitempty"` + + // public name + PublicName string `json:"publicName,omitempty"` + + // url template + URLTemplate string `json:"urlTemplate,omitempty"` +} + +// Validate validates this update frontend body +func (o *UpdateFrontendBody) Validate(formats strfmt.Registry) error { + return nil +} + +// ContextValidate validates this update frontend body based on context it is used +func (o *UpdateFrontendBody) ContextValidate(ctx context.Context, formats strfmt.Registry) error { + return nil +} + +// MarshalBinary interface implementation +func (o *UpdateFrontendBody) MarshalBinary() ([]byte, error) { + if o == nil { + return nil, nil + } + return swag.WriteJSON(o) +} + +// UnmarshalBinary interface implementation +func (o *UpdateFrontendBody) UnmarshalBinary(b []byte) error { + var res UpdateFrontendBody + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *o = res + return nil +} diff --git a/rest_server_zrok/operations/admin/update_frontend_parameters.go b/rest_server_zrok/operations/admin/update_frontend_parameters.go index b6d03c73..ae0dae6e 100644 --- a/rest_server_zrok/operations/admin/update_frontend_parameters.go +++ b/rest_server_zrok/operations/admin/update_frontend_parameters.go @@ -12,8 +12,6 @@ import ( "github.com/go-openapi/runtime" "github.com/go-openapi/runtime/middleware" "github.com/go-openapi/validate" - - "github.com/openziti/zrok/rest_model_zrok" ) // NewUpdateFrontendParams creates a new UpdateFrontendParams object @@ -36,7 +34,7 @@ type UpdateFrontendParams struct { /* In: body */ - Body *rest_model_zrok.UpdateFrontendRequest + Body UpdateFrontendBody } // BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface @@ -50,7 +48,7 @@ func (o *UpdateFrontendParams) BindRequest(r *http.Request, route *middleware.Ma if runtime.HasBody(r) { defer r.Body.Close() - var body rest_model_zrok.UpdateFrontendRequest + var body UpdateFrontendBody if err := route.Consumer.Consume(r.Body, &body); err != nil { res = append(res, errors.NewParseError("body", "body", "", err)) } else { @@ -65,7 +63,7 @@ func (o *UpdateFrontendParams) BindRequest(r *http.Request, route *middleware.Ma } if len(res) == 0 { - o.Body = &body + o.Body = body } } } diff --git a/rest_server_zrok/operations/environment/disable.go b/rest_server_zrok/operations/environment/disable.go index d7a2d65b..8ebbac90 100644 --- a/rest_server_zrok/operations/environment/disable.go +++ b/rest_server_zrok/operations/environment/disable.go @@ -6,9 +6,12 @@ package environment // Editing this file might prove futile when you re-run the generate command import ( + "context" "net/http" "github.com/go-openapi/runtime/middleware" + "github.com/go-openapi/strfmt" + "github.com/go-openapi/swag" "github.com/openziti/zrok/rest_model_zrok" ) @@ -69,3 +72,40 @@ func (o *Disable) ServeHTTP(rw http.ResponseWriter, r *http.Request) { o.Context.Respond(rw, r, route.Produces, route, res) } + +// DisableBody disable body +// +// swagger:model DisableBody +type DisableBody struct { + + // identity + Identity string `json:"identity,omitempty"` +} + +// Validate validates this disable body +func (o *DisableBody) Validate(formats strfmt.Registry) error { + return nil +} + +// ContextValidate validates this disable body based on context it is used +func (o *DisableBody) ContextValidate(ctx context.Context, formats strfmt.Registry) error { + return nil +} + +// MarshalBinary interface implementation +func (o *DisableBody) MarshalBinary() ([]byte, error) { + if o == nil { + return nil, nil + } + return swag.WriteJSON(o) +} + +// UnmarshalBinary interface implementation +func (o *DisableBody) UnmarshalBinary(b []byte) error { + var res DisableBody + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *o = res + return nil +} diff --git a/rest_server_zrok/operations/environment/disable_parameters.go b/rest_server_zrok/operations/environment/disable_parameters.go index f524a834..eaaf0b37 100644 --- a/rest_server_zrok/operations/environment/disable_parameters.go +++ b/rest_server_zrok/operations/environment/disable_parameters.go @@ -12,8 +12,6 @@ import ( "github.com/go-openapi/runtime" "github.com/go-openapi/runtime/middleware" "github.com/go-openapi/validate" - - "github.com/openziti/zrok/rest_model_zrok" ) // NewDisableParams creates a new DisableParams object @@ -36,7 +34,7 @@ type DisableParams struct { /* In: body */ - Body *rest_model_zrok.DisableRequest + Body DisableBody } // BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface @@ -50,7 +48,7 @@ func (o *DisableParams) BindRequest(r *http.Request, route *middleware.MatchedRo if runtime.HasBody(r) { defer r.Body.Close() - var body rest_model_zrok.DisableRequest + var body DisableBody if err := route.Consumer.Consume(r.Body, &body); err != nil { res = append(res, errors.NewParseError("body", "body", "", err)) } else { @@ -65,7 +63,7 @@ func (o *DisableParams) BindRequest(r *http.Request, route *middleware.MatchedRo } if len(res) == 0 { - o.Body = &body + o.Body = body } } } diff --git a/rest_server_zrok/operations/environment/enable.go b/rest_server_zrok/operations/environment/enable.go index a7a6636c..1638aaab 100644 --- a/rest_server_zrok/operations/environment/enable.go +++ b/rest_server_zrok/operations/environment/enable.go @@ -6,9 +6,12 @@ package environment // Editing this file might prove futile when you re-run the generate command import ( + "context" "net/http" "github.com/go-openapi/runtime/middleware" + "github.com/go-openapi/strfmt" + "github.com/go-openapi/swag" "github.com/openziti/zrok/rest_model_zrok" ) @@ -69,3 +72,83 @@ func (o *Enable) ServeHTTP(rw http.ResponseWriter, r *http.Request) { o.Context.Respond(rw, r, route.Produces, route, res) } + +// EnableBody enable body +// +// swagger:model EnableBody +type EnableBody struct { + + // description + Description string `json:"description,omitempty"` + + // host + Host string `json:"host,omitempty"` +} + +// Validate validates this enable body +func (o *EnableBody) Validate(formats strfmt.Registry) error { + return nil +} + +// ContextValidate validates this enable body based on context it is used +func (o *EnableBody) ContextValidate(ctx context.Context, formats strfmt.Registry) error { + return nil +} + +// MarshalBinary interface implementation +func (o *EnableBody) MarshalBinary() ([]byte, error) { + if o == nil { + return nil, nil + } + return swag.WriteJSON(o) +} + +// UnmarshalBinary interface implementation +func (o *EnableBody) UnmarshalBinary(b []byte) error { + var res EnableBody + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *o = res + return nil +} + +// EnableCreatedBody enable created body +// +// swagger:model EnableCreatedBody +type EnableCreatedBody struct { + + // cfg + Cfg string `json:"cfg,omitempty"` + + // identity + Identity string `json:"identity,omitempty"` +} + +// Validate validates this enable created body +func (o *EnableCreatedBody) Validate(formats strfmt.Registry) error { + return nil +} + +// ContextValidate validates this enable created body based on context it is used +func (o *EnableCreatedBody) ContextValidate(ctx context.Context, formats strfmt.Registry) error { + return nil +} + +// MarshalBinary interface implementation +func (o *EnableCreatedBody) MarshalBinary() ([]byte, error) { + if o == nil { + return nil, nil + } + return swag.WriteJSON(o) +} + +// UnmarshalBinary interface implementation +func (o *EnableCreatedBody) UnmarshalBinary(b []byte) error { + var res EnableCreatedBody + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *o = res + return nil +} diff --git a/rest_server_zrok/operations/environment/enable_parameters.go b/rest_server_zrok/operations/environment/enable_parameters.go index 974b9ee9..2dcd4a97 100644 --- a/rest_server_zrok/operations/environment/enable_parameters.go +++ b/rest_server_zrok/operations/environment/enable_parameters.go @@ -12,8 +12,6 @@ import ( "github.com/go-openapi/runtime" "github.com/go-openapi/runtime/middleware" "github.com/go-openapi/validate" - - "github.com/openziti/zrok/rest_model_zrok" ) // NewEnableParams creates a new EnableParams object @@ -36,7 +34,7 @@ type EnableParams struct { /* In: body */ - Body *rest_model_zrok.EnableRequest + Body EnableBody } // BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface @@ -50,7 +48,7 @@ func (o *EnableParams) BindRequest(r *http.Request, route *middleware.MatchedRou if runtime.HasBody(r) { defer r.Body.Close() - var body rest_model_zrok.EnableRequest + var body EnableBody if err := route.Consumer.Consume(r.Body, &body); err != nil { res = append(res, errors.NewParseError("body", "body", "", err)) } else { @@ -65,7 +63,7 @@ func (o *EnableParams) BindRequest(r *http.Request, route *middleware.MatchedRou } if len(res) == 0 { - o.Body = &body + o.Body = body } } } diff --git a/rest_server_zrok/operations/environment/enable_responses.go b/rest_server_zrok/operations/environment/enable_responses.go index c19a650d..ee8b7eb3 100644 --- a/rest_server_zrok/operations/environment/enable_responses.go +++ b/rest_server_zrok/operations/environment/enable_responses.go @@ -9,8 +9,6 @@ import ( "net/http" "github.com/go-openapi/runtime" - - "github.com/openziti/zrok/rest_model_zrok" ) // EnableCreatedCode is the HTTP code returned for type EnableCreated @@ -26,7 +24,7 @@ type EnableCreated struct { /* In: Body */ - Payload *rest_model_zrok.EnableResponse `json:"body,omitempty"` + Payload *EnableCreatedBody `json:"body,omitempty"` } // NewEnableCreated creates EnableCreated with default headers values @@ -36,13 +34,13 @@ func NewEnableCreated() *EnableCreated { } // WithPayload adds the payload to the enable created response -func (o *EnableCreated) WithPayload(payload *rest_model_zrok.EnableResponse) *EnableCreated { +func (o *EnableCreated) WithPayload(payload *EnableCreatedBody) *EnableCreated { o.Payload = payload return o } // SetPayload sets the payload to the enable created response -func (o *EnableCreated) SetPayload(payload *rest_model_zrok.EnableResponse) { +func (o *EnableCreated) SetPayload(payload *EnableCreatedBody) { o.Payload = payload } diff --git a/rest_server_zrok/operations/metadata/client_version_check.go b/rest_server_zrok/operations/metadata/client_version_check.go new file mode 100644 index 00000000..b473f468 --- /dev/null +++ b/rest_server_zrok/operations/metadata/client_version_check.go @@ -0,0 +1,96 @@ +// Code generated by go-swagger; DO NOT EDIT. + +package metadata + +// This file was generated by the swagger tool. +// Editing this file might prove futile when you re-run the generate command + +import ( + "context" + "net/http" + + "github.com/go-openapi/runtime/middleware" + "github.com/go-openapi/strfmt" + "github.com/go-openapi/swag" +) + +// ClientVersionCheckHandlerFunc turns a function with the right signature into a client version check handler +type ClientVersionCheckHandlerFunc func(ClientVersionCheckParams) middleware.Responder + +// Handle executing the request and returning a response +func (fn ClientVersionCheckHandlerFunc) Handle(params ClientVersionCheckParams) middleware.Responder { + return fn(params) +} + +// ClientVersionCheckHandler interface for that can handle valid client version check params +type ClientVersionCheckHandler interface { + Handle(ClientVersionCheckParams) middleware.Responder +} + +// NewClientVersionCheck creates a new http.Handler for the client version check operation +func NewClientVersionCheck(ctx *middleware.Context, handler ClientVersionCheckHandler) *ClientVersionCheck { + return &ClientVersionCheck{Context: ctx, Handler: handler} +} + +/* + ClientVersionCheck swagger:route POST /version metadata clientVersionCheck + +ClientVersionCheck client version check API +*/ +type ClientVersionCheck struct { + Context *middleware.Context + Handler ClientVersionCheckHandler +} + +func (o *ClientVersionCheck) ServeHTTP(rw http.ResponseWriter, r *http.Request) { + route, rCtx, _ := o.Context.RouteInfo(r) + if rCtx != nil { + *r = *rCtx + } + var Params = NewClientVersionCheckParams() + if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params + o.Context.Respond(rw, r, route.Produces, route, err) + return + } + + res := o.Handler.Handle(Params) // actually handle the request + o.Context.Respond(rw, r, route.Produces, route, res) + +} + +// ClientVersionCheckBody client version check body +// +// swagger:model ClientVersionCheckBody +type ClientVersionCheckBody struct { + + // client version + ClientVersion string `json:"clientVersion,omitempty"` +} + +// Validate validates this client version check body +func (o *ClientVersionCheckBody) Validate(formats strfmt.Registry) error { + return nil +} + +// ContextValidate validates this client version check body based on context it is used +func (o *ClientVersionCheckBody) ContextValidate(ctx context.Context, formats strfmt.Registry) error { + return nil +} + +// MarshalBinary interface implementation +func (o *ClientVersionCheckBody) MarshalBinary() ([]byte, error) { + if o == nil { + return nil, nil + } + return swag.WriteJSON(o) +} + +// UnmarshalBinary interface implementation +func (o *ClientVersionCheckBody) UnmarshalBinary(b []byte) error { + var res ClientVersionCheckBody + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *o = res + return nil +} diff --git a/rest_server_zrok/operations/metadata/client_version_check_parameters.go b/rest_server_zrok/operations/metadata/client_version_check_parameters.go new file mode 100644 index 00000000..e7db5804 --- /dev/null +++ b/rest_server_zrok/operations/metadata/client_version_check_parameters.go @@ -0,0 +1,74 @@ +// Code generated by go-swagger; DO NOT EDIT. + +package metadata + +// This file was generated by the swagger tool. +// Editing this file might prove futile when you re-run the swagger generate command + +import ( + "net/http" + + "github.com/go-openapi/errors" + "github.com/go-openapi/runtime" + "github.com/go-openapi/runtime/middleware" + "github.com/go-openapi/validate" +) + +// NewClientVersionCheckParams creates a new ClientVersionCheckParams object +// +// There are no default values defined in the spec. +func NewClientVersionCheckParams() ClientVersionCheckParams { + + return ClientVersionCheckParams{} +} + +// ClientVersionCheckParams contains all the bound params for the client version check operation +// typically these are obtained from a http.Request +// +// swagger:parameters clientVersionCheck +type ClientVersionCheckParams struct { + + // HTTP Request Object + HTTPRequest *http.Request `json:"-"` + + /* + In: body + */ + Body ClientVersionCheckBody +} + +// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface +// for simple values it will use straight method calls. +// +// To ensure default values, the struct must have been initialized with NewClientVersionCheckParams() beforehand. +func (o *ClientVersionCheckParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error { + var res []error + + o.HTTPRequest = r + + if runtime.HasBody(r) { + defer r.Body.Close() + var body ClientVersionCheckBody + if err := route.Consumer.Consume(r.Body, &body); err != nil { + res = append(res, errors.NewParseError("body", "body", "", err)) + } else { + // validate body object + if err := body.Validate(route.Formats); err != nil { + res = append(res, err) + } + + ctx := validate.WithOperationRequest(r.Context()) + if err := body.ContextValidate(ctx, route.Formats); err != nil { + res = append(res, err) + } + + if len(res) == 0 { + o.Body = body + } + } + } + if len(res) > 0 { + return errors.CompositeValidationError(res...) + } + return nil +} diff --git a/rest_server_zrok/operations/metadata/client_version_check_responses.go b/rest_server_zrok/operations/metadata/client_version_check_responses.go new file mode 100644 index 00000000..81e898a0 --- /dev/null +++ b/rest_server_zrok/operations/metadata/client_version_check_responses.go @@ -0,0 +1,80 @@ +// Code generated by go-swagger; DO NOT EDIT. + +package metadata + +// This file was generated by the swagger tool. +// Editing this file might prove futile when you re-run the swagger generate command + +import ( + "net/http" + + "github.com/go-openapi/runtime" +) + +// ClientVersionCheckOKCode is the HTTP code returned for type ClientVersionCheckOK +const ClientVersionCheckOKCode int = 200 + +/* +ClientVersionCheckOK compatible + +swagger:response clientVersionCheckOK +*/ +type ClientVersionCheckOK struct { +} + +// NewClientVersionCheckOK creates ClientVersionCheckOK with default headers values +func NewClientVersionCheckOK() *ClientVersionCheckOK { + + return &ClientVersionCheckOK{} +} + +// WriteResponse to the client +func (o *ClientVersionCheckOK) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { + + rw.Header().Del(runtime.HeaderContentType) //Remove Content-Type on empty responses + + rw.WriteHeader(200) +} + +// ClientVersionCheckBadRequestCode is the HTTP code returned for type ClientVersionCheckBadRequest +const ClientVersionCheckBadRequestCode int = 400 + +/* +ClientVersionCheckBadRequest not compatible + +swagger:response clientVersionCheckBadRequest +*/ +type ClientVersionCheckBadRequest struct { + + /* + In: Body + */ + Payload string `json:"body,omitempty"` +} + +// NewClientVersionCheckBadRequest creates ClientVersionCheckBadRequest with default headers values +func NewClientVersionCheckBadRequest() *ClientVersionCheckBadRequest { + + return &ClientVersionCheckBadRequest{} +} + +// WithPayload adds the payload to the client version check bad request response +func (o *ClientVersionCheckBadRequest) WithPayload(payload string) *ClientVersionCheckBadRequest { + o.Payload = payload + return o +} + +// SetPayload sets the payload to the client version check bad request response +func (o *ClientVersionCheckBadRequest) SetPayload(payload string) { + o.Payload = payload +} + +// WriteResponse to the client +func (o *ClientVersionCheckBadRequest) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { + + rw.WriteHeader(400) + payload := o.Payload + if err := producer.Produce(rw, payload); err != nil { + panic(err) // let the recovery middleware deal with this + } +} diff --git a/rest_server_zrok/operations/metadata/list_members_urlbuilder.go b/rest_server_zrok/operations/metadata/client_version_check_urlbuilder.go similarity index 60% rename from rest_server_zrok/operations/metadata/list_members_urlbuilder.go rename to rest_server_zrok/operations/metadata/client_version_check_urlbuilder.go index f191a954..b54e45cb 100644 --- a/rest_server_zrok/operations/metadata/list_members_urlbuilder.go +++ b/rest_server_zrok/operations/metadata/client_version_check_urlbuilder.go @@ -9,22 +9,17 @@ import ( "errors" "net/url" golangswaggerpaths "path" - "strings" ) -// ListMembersURL generates an URL for the list members operation -type ListMembersURL struct { - OrganizationToken string - +// ClientVersionCheckURL generates an URL for the client version check operation +type ClientVersionCheckURL struct { _basePath string - // avoid unkeyed usage - _ struct{} } // WithBasePath sets the base path for this url builder, only required when it's different from the // base path specified in the swagger spec. // When the value of the base path is an empty string -func (o *ListMembersURL) WithBasePath(bp string) *ListMembersURL { +func (o *ClientVersionCheckURL) WithBasePath(bp string) *ClientVersionCheckURL { o.SetBasePath(bp) return o } @@ -32,22 +27,15 @@ func (o *ListMembersURL) WithBasePath(bp string) *ListMembersURL { // SetBasePath sets the base path for this url builder, only required when it's different from the // base path specified in the swagger spec. // When the value of the base path is an empty string -func (o *ListMembersURL) SetBasePath(bp string) { +func (o *ClientVersionCheckURL) SetBasePath(bp string) { o._basePath = bp } // Build a url path and query string -func (o *ListMembersURL) Build() (*url.URL, error) { +func (o *ClientVersionCheckURL) Build() (*url.URL, error) { var _result url.URL - var _path = "/members/{organizationToken}" - - organizationToken := o.OrganizationToken - if organizationToken != "" { - _path = strings.Replace(_path, "{organizationToken}", organizationToken, -1) - } else { - return nil, errors.New("organizationToken is required on ListMembersURL") - } + var _path = "/version" _basePath := o._basePath if _basePath == "" { @@ -59,7 +47,7 @@ func (o *ListMembersURL) Build() (*url.URL, error) { } // Must is a helper function to panic when the url builder returns an error -func (o *ListMembersURL) Must(u *url.URL, err error) *url.URL { +func (o *ClientVersionCheckURL) Must(u *url.URL, err error) *url.URL { if err != nil { panic(err) } @@ -70,17 +58,17 @@ func (o *ListMembersURL) Must(u *url.URL, err error) *url.URL { } // String returns the string representation of the path with query string -func (o *ListMembersURL) String() string { +func (o *ClientVersionCheckURL) String() string { return o.Must(o.Build()).String() } // BuildFull builds a full url with scheme, host, path and query string -func (o *ListMembersURL) BuildFull(scheme, host string) (*url.URL, error) { +func (o *ClientVersionCheckURL) BuildFull(scheme, host string) (*url.URL, error) { if scheme == "" { - return nil, errors.New("scheme is required for a full url on ListMembersURL") + return nil, errors.New("scheme is required for a full url on ClientVersionCheckURL") } if host == "" { - return nil, errors.New("host is required for a full url on ListMembersURL") + return nil, errors.New("host is required for a full url on ClientVersionCheckURL") } base, err := o.Build() @@ -94,6 +82,6 @@ func (o *ListMembersURL) BuildFull(scheme, host string) (*url.URL, error) { } // StringFull returns the string representation of a complete url -func (o *ListMembersURL) StringFull(scheme, host string) string { +func (o *ClientVersionCheckURL) StringFull(scheme, host string) string { return o.Must(o.BuildFull(scheme, host)).String() } diff --git a/rest_server_zrok/operations/metadata/get_frontend_detail.go b/rest_server_zrok/operations/metadata/get_frontend_detail.go index c532c8f1..1ee393b2 100644 --- a/rest_server_zrok/operations/metadata/get_frontend_detail.go +++ b/rest_server_zrok/operations/metadata/get_frontend_detail.go @@ -32,7 +32,7 @@ func NewGetFrontendDetail(ctx *middleware.Context, handler GetFrontendDetailHand } /* - GetFrontendDetail swagger:route GET /detail/frontend/{feId} metadata getFrontendDetail + GetFrontendDetail swagger:route GET /detail/frontend/{frontendId} metadata getFrontendDetail GetFrontendDetail get frontend detail API */ diff --git a/rest_server_zrok/operations/metadata/get_frontend_detail_parameters.go b/rest_server_zrok/operations/metadata/get_frontend_detail_parameters.go index 14263c9c..942014ea 100644 --- a/rest_server_zrok/operations/metadata/get_frontend_detail_parameters.go +++ b/rest_server_zrok/operations/metadata/get_frontend_detail_parameters.go @@ -35,7 +35,7 @@ type GetFrontendDetailParams struct { Required: true In: path */ - FeID int64 + FrontendID int64 } // BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface @@ -47,8 +47,8 @@ func (o *GetFrontendDetailParams) BindRequest(r *http.Request, route *middleware o.HTTPRequest = r - rFeID, rhkFeID, _ := route.Params.GetOK("feId") - if err := o.bindFeID(rFeID, rhkFeID, route.Formats); err != nil { + rFrontendID, rhkFrontendID, _ := route.Params.GetOK("frontendId") + if err := o.bindFrontendID(rFrontendID, rhkFrontendID, route.Formats); err != nil { res = append(res, err) } if len(res) > 0 { @@ -57,8 +57,8 @@ func (o *GetFrontendDetailParams) BindRequest(r *http.Request, route *middleware return nil } -// bindFeID binds and validates parameter FeID from path. -func (o *GetFrontendDetailParams) bindFeID(rawData []string, hasKey bool, formats strfmt.Registry) error { +// bindFrontendID binds and validates parameter FrontendID from path. +func (o *GetFrontendDetailParams) bindFrontendID(rawData []string, hasKey bool, formats strfmt.Registry) error { var raw string if len(rawData) > 0 { raw = rawData[len(rawData)-1] @@ -69,9 +69,9 @@ func (o *GetFrontendDetailParams) bindFeID(rawData []string, hasKey bool, format value, err := swag.ConvertInt64(raw) if err != nil { - return errors.InvalidType("feId", "path", "int64", raw) + return errors.InvalidType("frontendId", "path", "int64", raw) } - o.FeID = value + o.FrontendID = value return nil } diff --git a/rest_server_zrok/operations/metadata/get_frontend_detail_urlbuilder.go b/rest_server_zrok/operations/metadata/get_frontend_detail_urlbuilder.go index ec2a9784..1d1af03a 100644 --- a/rest_server_zrok/operations/metadata/get_frontend_detail_urlbuilder.go +++ b/rest_server_zrok/operations/metadata/get_frontend_detail_urlbuilder.go @@ -16,7 +16,7 @@ import ( // GetFrontendDetailURL generates an URL for the get frontend detail operation type GetFrontendDetailURL struct { - FeID int64 + FrontendID int64 _basePath string // avoid unkeyed usage @@ -42,13 +42,13 @@ func (o *GetFrontendDetailURL) SetBasePath(bp string) { func (o *GetFrontendDetailURL) Build() (*url.URL, error) { var _result url.URL - var _path = "/detail/frontend/{feId}" + var _path = "/detail/frontend/{frontendId}" - feID := swag.FormatInt64(o.FeID) - if feID != "" { - _path = strings.Replace(_path, "{feId}", feID, -1) + frontendID := swag.FormatInt64(o.FrontendID) + if frontendID != "" { + _path = strings.Replace(_path, "{frontendId}", frontendID, -1) } else { - return nil, errors.New("feId is required on GetFrontendDetailURL") + return nil, errors.New("frontendId is required on GetFrontendDetailURL") } _basePath := o._basePath diff --git a/rest_server_zrok/operations/metadata/get_share_detail.go b/rest_server_zrok/operations/metadata/get_share_detail.go index f47d1979..57eaa1c8 100644 --- a/rest_server_zrok/operations/metadata/get_share_detail.go +++ b/rest_server_zrok/operations/metadata/get_share_detail.go @@ -32,7 +32,7 @@ func NewGetShareDetail(ctx *middleware.Context, handler GetShareDetailHandler) * } /* - GetShareDetail swagger:route GET /detail/share/{shrToken} metadata getShareDetail + GetShareDetail swagger:route GET /detail/share/{shareToken} metadata getShareDetail GetShareDetail get share detail API */ diff --git a/rest_server_zrok/operations/metadata/get_share_detail_parameters.go b/rest_server_zrok/operations/metadata/get_share_detail_parameters.go index 2d3f419f..8087b6c7 100644 --- a/rest_server_zrok/operations/metadata/get_share_detail_parameters.go +++ b/rest_server_zrok/operations/metadata/get_share_detail_parameters.go @@ -34,7 +34,7 @@ type GetShareDetailParams struct { Required: true In: path */ - ShrToken string + ShareToken string } // BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface @@ -46,8 +46,8 @@ func (o *GetShareDetailParams) BindRequest(r *http.Request, route *middleware.Ma o.HTTPRequest = r - rShrToken, rhkShrToken, _ := route.Params.GetOK("shrToken") - if err := o.bindShrToken(rShrToken, rhkShrToken, route.Formats); err != nil { + rShareToken, rhkShareToken, _ := route.Params.GetOK("shareToken") + if err := o.bindShareToken(rShareToken, rhkShareToken, route.Formats); err != nil { res = append(res, err) } if len(res) > 0 { @@ -56,8 +56,8 @@ func (o *GetShareDetailParams) BindRequest(r *http.Request, route *middleware.Ma return nil } -// bindShrToken binds and validates parameter ShrToken from path. -func (o *GetShareDetailParams) bindShrToken(rawData []string, hasKey bool, formats strfmt.Registry) error { +// bindShareToken binds and validates parameter ShareToken from path. +func (o *GetShareDetailParams) bindShareToken(rawData []string, hasKey bool, formats strfmt.Registry) error { var raw string if len(rawData) > 0 { raw = rawData[len(rawData)-1] @@ -65,7 +65,7 @@ func (o *GetShareDetailParams) bindShrToken(rawData []string, hasKey bool, forma // Required: true // Parameter is provided by construction from the route - o.ShrToken = raw + o.ShareToken = raw return nil } diff --git a/rest_server_zrok/operations/metadata/get_share_detail_urlbuilder.go b/rest_server_zrok/operations/metadata/get_share_detail_urlbuilder.go index be3b1e5c..df81e744 100644 --- a/rest_server_zrok/operations/metadata/get_share_detail_urlbuilder.go +++ b/rest_server_zrok/operations/metadata/get_share_detail_urlbuilder.go @@ -14,7 +14,7 @@ import ( // GetShareDetailURL generates an URL for the get share detail operation type GetShareDetailURL struct { - ShrToken string + ShareToken string _basePath string // avoid unkeyed usage @@ -40,13 +40,13 @@ func (o *GetShareDetailURL) SetBasePath(bp string) { func (o *GetShareDetailURL) Build() (*url.URL, error) { var _result url.URL - var _path = "/detail/share/{shrToken}" + var _path = "/detail/share/{shareToken}" - shrToken := o.ShrToken - if shrToken != "" { - _path = strings.Replace(_path, "{shrToken}", shrToken, -1) + shareToken := o.ShareToken + if shareToken != "" { + _path = strings.Replace(_path, "{shareToken}", shareToken, -1) } else { - return nil, errors.New("shrToken is required on GetShareDetailURL") + return nil, errors.New("shareToken is required on GetShareDetailURL") } _basePath := o._basePath diff --git a/rest_server_zrok/operations/metadata/get_share_metrics.go b/rest_server_zrok/operations/metadata/get_share_metrics.go index db0b2055..c2f836a2 100644 --- a/rest_server_zrok/operations/metadata/get_share_metrics.go +++ b/rest_server_zrok/operations/metadata/get_share_metrics.go @@ -32,7 +32,7 @@ func NewGetShareMetrics(ctx *middleware.Context, handler GetShareMetricsHandler) } /* - GetShareMetrics swagger:route GET /metrics/share/{shrToken} metadata getShareMetrics + GetShareMetrics swagger:route GET /metrics/share/{shareToken} metadata getShareMetrics GetShareMetrics get share metrics API */ diff --git a/rest_server_zrok/operations/metadata/get_share_metrics_parameters.go b/rest_server_zrok/operations/metadata/get_share_metrics_parameters.go index f945c949..f6df1e71 100644 --- a/rest_server_zrok/operations/metadata/get_share_metrics_parameters.go +++ b/rest_server_zrok/operations/metadata/get_share_metrics_parameters.go @@ -39,7 +39,7 @@ type GetShareMetricsParams struct { Required: true In: path */ - ShrToken string + ShareToken string } // BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface @@ -58,8 +58,8 @@ func (o *GetShareMetricsParams) BindRequest(r *http.Request, route *middleware.M res = append(res, err) } - rShrToken, rhkShrToken, _ := route.Params.GetOK("shrToken") - if err := o.bindShrToken(rShrToken, rhkShrToken, route.Formats); err != nil { + rShareToken, rhkShareToken, _ := route.Params.GetOK("shareToken") + if err := o.bindShareToken(rShareToken, rhkShareToken, route.Formats); err != nil { res = append(res, err) } if len(res) > 0 { @@ -86,8 +86,8 @@ func (o *GetShareMetricsParams) bindDuration(rawData []string, hasKey bool, form return nil } -// bindShrToken binds and validates parameter ShrToken from path. -func (o *GetShareMetricsParams) bindShrToken(rawData []string, hasKey bool, formats strfmt.Registry) error { +// bindShareToken binds and validates parameter ShareToken from path. +func (o *GetShareMetricsParams) bindShareToken(rawData []string, hasKey bool, formats strfmt.Registry) error { var raw string if len(rawData) > 0 { raw = rawData[len(rawData)-1] @@ -95,7 +95,7 @@ func (o *GetShareMetricsParams) bindShrToken(rawData []string, hasKey bool, form // Required: true // Parameter is provided by construction from the route - o.ShrToken = raw + o.ShareToken = raw return nil } diff --git a/rest_server_zrok/operations/metadata/get_share_metrics_urlbuilder.go b/rest_server_zrok/operations/metadata/get_share_metrics_urlbuilder.go index 74258138..a393c2b6 100644 --- a/rest_server_zrok/operations/metadata/get_share_metrics_urlbuilder.go +++ b/rest_server_zrok/operations/metadata/get_share_metrics_urlbuilder.go @@ -14,7 +14,7 @@ import ( // GetShareMetricsURL generates an URL for the get share metrics operation type GetShareMetricsURL struct { - ShrToken string + ShareToken string Duration *string @@ -42,13 +42,13 @@ func (o *GetShareMetricsURL) SetBasePath(bp string) { func (o *GetShareMetricsURL) Build() (*url.URL, error) { var _result url.URL - var _path = "/metrics/share/{shrToken}" + var _path = "/metrics/share/{shareToken}" - shrToken := o.ShrToken - if shrToken != "" { - _path = strings.Replace(_path, "{shrToken}", shrToken, -1) + shareToken := o.ShareToken + if shareToken != "" { + _path = strings.Replace(_path, "{shareToken}", shareToken, -1) } else { - return nil, errors.New("shrToken is required on GetShareMetricsURL") + return nil, errors.New("shareToken is required on GetShareMetricsURL") } _basePath := o._basePath diff --git a/rest_server_zrok/operations/metadata/get_sparklines.go b/rest_server_zrok/operations/metadata/get_sparklines.go new file mode 100644 index 00000000..e377afd0 --- /dev/null +++ b/rest_server_zrok/operations/metadata/get_sparklines.go @@ -0,0 +1,225 @@ +// Code generated by go-swagger; DO NOT EDIT. + +package metadata + +// This file was generated by the swagger tool. +// Editing this file might prove futile when you re-run the generate command + +import ( + "context" + "net/http" + "strconv" + + "github.com/go-openapi/errors" + "github.com/go-openapi/runtime/middleware" + "github.com/go-openapi/strfmt" + "github.com/go-openapi/swag" + + "github.com/openziti/zrok/rest_model_zrok" +) + +// GetSparklinesHandlerFunc turns a function with the right signature into a get sparklines handler +type GetSparklinesHandlerFunc func(GetSparklinesParams, *rest_model_zrok.Principal) middleware.Responder + +// Handle executing the request and returning a response +func (fn GetSparklinesHandlerFunc) Handle(params GetSparklinesParams, principal *rest_model_zrok.Principal) middleware.Responder { + return fn(params, principal) +} + +// GetSparklinesHandler interface for that can handle valid get sparklines params +type GetSparklinesHandler interface { + Handle(GetSparklinesParams, *rest_model_zrok.Principal) middleware.Responder +} + +// NewGetSparklines creates a new http.Handler for the get sparklines operation +func NewGetSparklines(ctx *middleware.Context, handler GetSparklinesHandler) *GetSparklines { + return &GetSparklines{Context: ctx, Handler: handler} +} + +/* + GetSparklines swagger:route POST /sparklines metadata getSparklines + +GetSparklines get sparklines API +*/ +type GetSparklines struct { + Context *middleware.Context + Handler GetSparklinesHandler +} + +func (o *GetSparklines) ServeHTTP(rw http.ResponseWriter, r *http.Request) { + route, rCtx, _ := o.Context.RouteInfo(r) + if rCtx != nil { + *r = *rCtx + } + var Params = NewGetSparklinesParams() + uprinc, aCtx, err := o.Context.Authorize(r, route) + if err != nil { + o.Context.Respond(rw, r, route.Produces, route, err) + return + } + if aCtx != nil { + *r = *aCtx + } + var principal *rest_model_zrok.Principal + if uprinc != nil { + principal = uprinc.(*rest_model_zrok.Principal) // this is really a rest_model_zrok.Principal, I promise + } + + if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params + o.Context.Respond(rw, r, route.Produces, route, err) + return + } + + res := o.Handler.Handle(Params, principal) // actually handle the request + o.Context.Respond(rw, r, route.Produces, route, res) + +} + +// GetSparklinesBody get sparklines body +// +// swagger:model GetSparklinesBody +type GetSparklinesBody struct { + + // account + Account bool `json:"account,omitempty"` + + // environments + Environments []string `json:"environments"` + + // shares + Shares []string `json:"shares"` +} + +// Validate validates this get sparklines body +func (o *GetSparklinesBody) Validate(formats strfmt.Registry) error { + return nil +} + +// ContextValidate validates this get sparklines body based on context it is used +func (o *GetSparklinesBody) ContextValidate(ctx context.Context, formats strfmt.Registry) error { + return nil +} + +// MarshalBinary interface implementation +func (o *GetSparklinesBody) MarshalBinary() ([]byte, error) { + if o == nil { + return nil, nil + } + return swag.WriteJSON(o) +} + +// UnmarshalBinary interface implementation +func (o *GetSparklinesBody) UnmarshalBinary(b []byte) error { + var res GetSparklinesBody + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *o = res + return nil +} + +// GetSparklinesOKBody get sparklines o k body +// +// swagger:model GetSparklinesOKBody +type GetSparklinesOKBody struct { + + // sparklines + Sparklines []*rest_model_zrok.Metrics `json:"sparklines"` +} + +// Validate validates this get sparklines o k body +func (o *GetSparklinesOKBody) Validate(formats strfmt.Registry) error { + var res []error + + if err := o.validateSparklines(formats); err != nil { + res = append(res, err) + } + + if len(res) > 0 { + return errors.CompositeValidationError(res...) + } + return nil +} + +func (o *GetSparklinesOKBody) validateSparklines(formats strfmt.Registry) error { + if swag.IsZero(o.Sparklines) { // not required + return nil + } + + for i := 0; i < len(o.Sparklines); i++ { + if swag.IsZero(o.Sparklines[i]) { // not required + continue + } + + if o.Sparklines[i] != nil { + if err := o.Sparklines[i].Validate(formats); err != nil { + if ve, ok := err.(*errors.Validation); ok { + return ve.ValidateName("getSparklinesOK" + "." + "sparklines" + "." + strconv.Itoa(i)) + } else if ce, ok := err.(*errors.CompositeError); ok { + return ce.ValidateName("getSparklinesOK" + "." + "sparklines" + "." + strconv.Itoa(i)) + } + return err + } + } + + } + + return nil +} + +// ContextValidate validate this get sparklines o k body based on the context it is used +func (o *GetSparklinesOKBody) ContextValidate(ctx context.Context, formats strfmt.Registry) error { + var res []error + + if err := o.contextValidateSparklines(ctx, formats); err != nil { + res = append(res, err) + } + + if len(res) > 0 { + return errors.CompositeValidationError(res...) + } + return nil +} + +func (o *GetSparklinesOKBody) contextValidateSparklines(ctx context.Context, formats strfmt.Registry) error { + + for i := 0; i < len(o.Sparklines); i++ { + + if o.Sparklines[i] != nil { + + if swag.IsZero(o.Sparklines[i]) { // not required + return nil + } + + if err := o.Sparklines[i].ContextValidate(ctx, formats); err != nil { + if ve, ok := err.(*errors.Validation); ok { + return ve.ValidateName("getSparklinesOK" + "." + "sparklines" + "." + strconv.Itoa(i)) + } else if ce, ok := err.(*errors.CompositeError); ok { + return ce.ValidateName("getSparklinesOK" + "." + "sparklines" + "." + strconv.Itoa(i)) + } + return err + } + } + + } + + return nil +} + +// MarshalBinary interface implementation +func (o *GetSparklinesOKBody) MarshalBinary() ([]byte, error) { + if o == nil { + return nil, nil + } + return swag.WriteJSON(o) +} + +// UnmarshalBinary interface implementation +func (o *GetSparklinesOKBody) UnmarshalBinary(b []byte) error { + var res GetSparklinesOKBody + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *o = res + return nil +} diff --git a/rest_server_zrok/operations/account/regenerate_token_parameters.go b/rest_server_zrok/operations/metadata/get_sparklines_parameters.go similarity index 72% rename from rest_server_zrok/operations/account/regenerate_token_parameters.go rename to rest_server_zrok/operations/metadata/get_sparklines_parameters.go index d5422b32..b8b03d09 100644 --- a/rest_server_zrok/operations/account/regenerate_token_parameters.go +++ b/rest_server_zrok/operations/metadata/get_sparklines_parameters.go @@ -1,6 +1,6 @@ // Code generated by go-swagger; DO NOT EDIT. -package account +package metadata // This file was generated by the swagger tool. // Editing this file might prove futile when you re-run the swagger generate command @@ -14,19 +14,19 @@ import ( "github.com/go-openapi/validate" ) -// NewRegenerateTokenParams creates a new RegenerateTokenParams object +// NewGetSparklinesParams creates a new GetSparklinesParams object // // There are no default values defined in the spec. -func NewRegenerateTokenParams() RegenerateTokenParams { +func NewGetSparklinesParams() GetSparklinesParams { - return RegenerateTokenParams{} + return GetSparklinesParams{} } -// RegenerateTokenParams contains all the bound params for the regenerate token operation +// GetSparklinesParams contains all the bound params for the get sparklines operation // typically these are obtained from a http.Request // -// swagger:parameters regenerateToken -type RegenerateTokenParams struct { +// swagger:parameters getSparklines +type GetSparklinesParams struct { // HTTP Request Object HTTPRequest *http.Request `json:"-"` @@ -34,21 +34,21 @@ type RegenerateTokenParams struct { /* In: body */ - Body RegenerateTokenBody + Body GetSparklinesBody } // BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface // for simple values it will use straight method calls. // -// To ensure default values, the struct must have been initialized with NewRegenerateTokenParams() beforehand. -func (o *RegenerateTokenParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error { +// To ensure default values, the struct must have been initialized with NewGetSparklinesParams() beforehand. +func (o *GetSparklinesParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error { var res []error o.HTTPRequest = r if runtime.HasBody(r) { defer r.Body.Close() - var body RegenerateTokenBody + var body GetSparklinesBody if err := route.Consumer.Consume(r.Body, &body); err != nil { res = append(res, errors.NewParseError("body", "body", "", err)) } else { diff --git a/rest_server_zrok/operations/metadata/get_sparklines_responses.go b/rest_server_zrok/operations/metadata/get_sparklines_responses.go new file mode 100644 index 00000000..da5ec847 --- /dev/null +++ b/rest_server_zrok/operations/metadata/get_sparklines_responses.go @@ -0,0 +1,107 @@ +// Code generated by go-swagger; DO NOT EDIT. + +package metadata + +// This file was generated by the swagger tool. +// Editing this file might prove futile when you re-run the swagger generate command + +import ( + "net/http" + + "github.com/go-openapi/runtime" +) + +// GetSparklinesOKCode is the HTTP code returned for type GetSparklinesOK +const GetSparklinesOKCode int = 200 + +/* +GetSparklinesOK sparklines data + +swagger:response getSparklinesOK +*/ +type GetSparklinesOK struct { + + /* + In: Body + */ + Payload *GetSparklinesOKBody `json:"body,omitempty"` +} + +// NewGetSparklinesOK creates GetSparklinesOK with default headers values +func NewGetSparklinesOK() *GetSparklinesOK { + + return &GetSparklinesOK{} +} + +// WithPayload adds the payload to the get sparklines o k response +func (o *GetSparklinesOK) WithPayload(payload *GetSparklinesOKBody) *GetSparklinesOK { + o.Payload = payload + return o +} + +// SetPayload sets the payload to the get sparklines o k response +func (o *GetSparklinesOK) SetPayload(payload *GetSparklinesOKBody) { + o.Payload = payload +} + +// WriteResponse to the client +func (o *GetSparklinesOK) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { + + rw.WriteHeader(200) + if o.Payload != nil { + payload := o.Payload + if err := producer.Produce(rw, payload); err != nil { + panic(err) // let the recovery middleware deal with this + } + } +} + +// GetSparklinesUnauthorizedCode is the HTTP code returned for type GetSparklinesUnauthorized +const GetSparklinesUnauthorizedCode int = 401 + +/* +GetSparklinesUnauthorized unauthorized + +swagger:response getSparklinesUnauthorized +*/ +type GetSparklinesUnauthorized struct { +} + +// NewGetSparklinesUnauthorized creates GetSparklinesUnauthorized with default headers values +func NewGetSparklinesUnauthorized() *GetSparklinesUnauthorized { + + return &GetSparklinesUnauthorized{} +} + +// WriteResponse to the client +func (o *GetSparklinesUnauthorized) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { + + rw.Header().Del(runtime.HeaderContentType) //Remove Content-Type on empty responses + + rw.WriteHeader(401) +} + +// GetSparklinesInternalServerErrorCode is the HTTP code returned for type GetSparklinesInternalServerError +const GetSparklinesInternalServerErrorCode int = 500 + +/* +GetSparklinesInternalServerError internal server error + +swagger:response getSparklinesInternalServerError +*/ +type GetSparklinesInternalServerError struct { +} + +// NewGetSparklinesInternalServerError creates GetSparklinesInternalServerError with default headers values +func NewGetSparklinesInternalServerError() *GetSparklinesInternalServerError { + + return &GetSparklinesInternalServerError{} +} + +// WriteResponse to the client +func (o *GetSparklinesInternalServerError) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { + + rw.Header().Del(runtime.HeaderContentType) //Remove Content-Type on empty responses + + rw.WriteHeader(500) +} diff --git a/rest_server_zrok/operations/metrics/get_account_metrics_urlbuilder.go b/rest_server_zrok/operations/metadata/get_sparklines_urlbuilder.go similarity index 63% rename from rest_server_zrok/operations/metrics/get_account_metrics_urlbuilder.go rename to rest_server_zrok/operations/metadata/get_sparklines_urlbuilder.go index 79001f68..125f9867 100644 --- a/rest_server_zrok/operations/metrics/get_account_metrics_urlbuilder.go +++ b/rest_server_zrok/operations/metadata/get_sparklines_urlbuilder.go @@ -1,6 +1,6 @@ // Code generated by go-swagger; DO NOT EDIT. -package metrics +package metadata // This file was generated by the swagger tool. // Editing this file might prove futile when you re-run the generate command @@ -9,23 +9,17 @@ import ( "errors" "net/url" golangswaggerpaths "path" - - "github.com/go-openapi/swag" ) -// GetAccountMetricsURL generates an URL for the get account metrics operation -type GetAccountMetricsURL struct { - Duration *float64 - +// GetSparklinesURL generates an URL for the get sparklines operation +type GetSparklinesURL struct { _basePath string - // avoid unkeyed usage - _ struct{} } // WithBasePath sets the base path for this url builder, only required when it's different from the // base path specified in the swagger spec. // When the value of the base path is an empty string -func (o *GetAccountMetricsURL) WithBasePath(bp string) *GetAccountMetricsURL { +func (o *GetSparklinesURL) WithBasePath(bp string) *GetSparklinesURL { o.SetBasePath(bp) return o } @@ -33,15 +27,15 @@ func (o *GetAccountMetricsURL) WithBasePath(bp string) *GetAccountMetricsURL { // SetBasePath sets the base path for this url builder, only required when it's different from the // base path specified in the swagger spec. // When the value of the base path is an empty string -func (o *GetAccountMetricsURL) SetBasePath(bp string) { +func (o *GetSparklinesURL) SetBasePath(bp string) { o._basePath = bp } // Build a url path and query string -func (o *GetAccountMetricsURL) Build() (*url.URL, error) { +func (o *GetSparklinesURL) Build() (*url.URL, error) { var _result url.URL - var _path = "/metrics/account" + var _path = "/sparklines" _basePath := o._basePath if _basePath == "" { @@ -49,23 +43,11 @@ func (o *GetAccountMetricsURL) Build() (*url.URL, error) { } _result.Path = golangswaggerpaths.Join(_basePath, _path) - qs := make(url.Values) - - var durationQ string - if o.Duration != nil { - durationQ = swag.FormatFloat64(*o.Duration) - } - if durationQ != "" { - qs.Set("duration", durationQ) - } - - _result.RawQuery = qs.Encode() - return &_result, nil } // Must is a helper function to panic when the url builder returns an error -func (o *GetAccountMetricsURL) Must(u *url.URL, err error) *url.URL { +func (o *GetSparklinesURL) Must(u *url.URL, err error) *url.URL { if err != nil { panic(err) } @@ -76,17 +58,17 @@ func (o *GetAccountMetricsURL) Must(u *url.URL, err error) *url.URL { } // String returns the string representation of the path with query string -func (o *GetAccountMetricsURL) String() string { +func (o *GetSparklinesURL) String() string { return o.Must(o.Build()).String() } // BuildFull builds a full url with scheme, host, path and query string -func (o *GetAccountMetricsURL) BuildFull(scheme, host string) (*url.URL, error) { +func (o *GetSparklinesURL) BuildFull(scheme, host string) (*url.URL, error) { if scheme == "" { - return nil, errors.New("scheme is required for a full url on GetAccountMetricsURL") + return nil, errors.New("scheme is required for a full url on GetSparklinesURL") } if host == "" { - return nil, errors.New("host is required for a full url on GetAccountMetricsURL") + return nil, errors.New("host is required for a full url on GetSparklinesURL") } base, err := o.Build() @@ -100,6 +82,6 @@ func (o *GetAccountMetricsURL) BuildFull(scheme, host string) (*url.URL, error) } // StringFull returns the string representation of a complete url -func (o *GetAccountMetricsURL) StringFull(scheme, host string) string { +func (o *GetSparklinesURL) StringFull(scheme, host string) string { return o.Must(o.BuildFull(scheme, host)).String() } diff --git a/rest_server_zrok/operations/metadata/list_members.go b/rest_server_zrok/operations/metadata/list_members.go deleted file mode 100644 index 8a841a79..00000000 --- a/rest_server_zrok/operations/metadata/list_members.go +++ /dev/null @@ -1,222 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -package metadata - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "context" - "net/http" - "strconv" - - "github.com/go-openapi/errors" - "github.com/go-openapi/runtime/middleware" - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" - - "github.com/openziti/zrok/rest_model_zrok" -) - -// ListMembersHandlerFunc turns a function with the right signature into a list members handler -type ListMembersHandlerFunc func(ListMembersParams, *rest_model_zrok.Principal) middleware.Responder - -// Handle executing the request and returning a response -func (fn ListMembersHandlerFunc) Handle(params ListMembersParams, principal *rest_model_zrok.Principal) middleware.Responder { - return fn(params, principal) -} - -// ListMembersHandler interface for that can handle valid list members params -type ListMembersHandler interface { - Handle(ListMembersParams, *rest_model_zrok.Principal) middleware.Responder -} - -// NewListMembers creates a new http.Handler for the list members operation -func NewListMembers(ctx *middleware.Context, handler ListMembersHandler) *ListMembers { - return &ListMembers{Context: ctx, Handler: handler} -} - -/* - ListMembers swagger:route GET /members/{organizationToken} metadata listMembers - -ListMembers list members API -*/ -type ListMembers struct { - Context *middleware.Context - Handler ListMembersHandler -} - -func (o *ListMembers) ServeHTTP(rw http.ResponseWriter, r *http.Request) { - route, rCtx, _ := o.Context.RouteInfo(r) - if rCtx != nil { - *r = *rCtx - } - var Params = NewListMembersParams() - uprinc, aCtx, err := o.Context.Authorize(r, route) - if err != nil { - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - if aCtx != nil { - *r = *aCtx - } - var principal *rest_model_zrok.Principal - if uprinc != nil { - principal = uprinc.(*rest_model_zrok.Principal) // this is really a rest_model_zrok.Principal, I promise - } - - if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - - res := o.Handler.Handle(Params, principal) // actually handle the request - o.Context.Respond(rw, r, route.Produces, route, res) - -} - -// ListMembersOKBody list members o k body -// -// swagger:model ListMembersOKBody -type ListMembersOKBody struct { - - // members - Members []*ListMembersOKBodyMembersItems0 `json:"members"` -} - -// Validate validates this list members o k body -func (o *ListMembersOKBody) Validate(formats strfmt.Registry) error { - var res []error - - if err := o.validateMembers(formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (o *ListMembersOKBody) validateMembers(formats strfmt.Registry) error { - if swag.IsZero(o.Members) { // not required - return nil - } - - for i := 0; i < len(o.Members); i++ { - if swag.IsZero(o.Members[i]) { // not required - continue - } - - if o.Members[i] != nil { - if err := o.Members[i].Validate(formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("listMembersOK" + "." + "members" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("listMembersOK" + "." + "members" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -// ContextValidate validate this list members o k body based on the context it is used -func (o *ListMembersOKBody) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - var res []error - - if err := o.contextValidateMembers(ctx, formats); err != nil { - res = append(res, err) - } - - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -func (o *ListMembersOKBody) contextValidateMembers(ctx context.Context, formats strfmt.Registry) error { - - for i := 0; i < len(o.Members); i++ { - - if o.Members[i] != nil { - - if swag.IsZero(o.Members[i]) { // not required - return nil - } - - if err := o.Members[i].ContextValidate(ctx, formats); err != nil { - if ve, ok := err.(*errors.Validation); ok { - return ve.ValidateName("listMembersOK" + "." + "members" + "." + strconv.Itoa(i)) - } else if ce, ok := err.(*errors.CompositeError); ok { - return ce.ValidateName("listMembersOK" + "." + "members" + "." + strconv.Itoa(i)) - } - return err - } - } - - } - - return nil -} - -// MarshalBinary interface implementation -func (o *ListMembersOKBody) MarshalBinary() ([]byte, error) { - if o == nil { - return nil, nil - } - return swag.WriteJSON(o) -} - -// UnmarshalBinary interface implementation -func (o *ListMembersOKBody) UnmarshalBinary(b []byte) error { - var res ListMembersOKBody - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *o = res - return nil -} - -// ListMembersOKBodyMembersItems0 list members o k body members items0 -// -// swagger:model ListMembersOKBodyMembersItems0 -type ListMembersOKBodyMembersItems0 struct { - - // admin - Admin bool `json:"admin,omitempty"` - - // email - Email string `json:"email,omitempty"` -} - -// Validate validates this list members o k body members items0 -func (o *ListMembersOKBodyMembersItems0) Validate(formats strfmt.Registry) error { - return nil -} - -// ContextValidate validates this list members o k body members items0 based on context it is used -func (o *ListMembersOKBodyMembersItems0) ContextValidate(ctx context.Context, formats strfmt.Registry) error { - return nil -} - -// MarshalBinary interface implementation -func (o *ListMembersOKBodyMembersItems0) MarshalBinary() ([]byte, error) { - if o == nil { - return nil, nil - } - return swag.WriteJSON(o) -} - -// UnmarshalBinary interface implementation -func (o *ListMembersOKBodyMembersItems0) UnmarshalBinary(b []byte) error { - var res ListMembersOKBodyMembersItems0 - if err := swag.ReadJSON(b, &res); err != nil { - return err - } - *o = res - return nil -} diff --git a/rest_server_zrok/operations/metadata/list_members_parameters.go b/rest_server_zrok/operations/metadata/list_members_parameters.go deleted file mode 100644 index 6ab6b2b2..00000000 --- a/rest_server_zrok/operations/metadata/list_members_parameters.go +++ /dev/null @@ -1,71 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -package metadata - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/errors" - "github.com/go-openapi/runtime/middleware" - "github.com/go-openapi/strfmt" -) - -// NewListMembersParams creates a new ListMembersParams object -// -// There are no default values defined in the spec. -func NewListMembersParams() ListMembersParams { - - return ListMembersParams{} -} - -// ListMembersParams contains all the bound params for the list members operation -// typically these are obtained from a http.Request -// -// swagger:parameters listMembers -type ListMembersParams struct { - - // HTTP Request Object - HTTPRequest *http.Request `json:"-"` - - /* - Required: true - In: path - */ - OrganizationToken string -} - -// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface -// for simple values it will use straight method calls. -// -// To ensure default values, the struct must have been initialized with NewListMembersParams() beforehand. -func (o *ListMembersParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error { - var res []error - - o.HTTPRequest = r - - rOrganizationToken, rhkOrganizationToken, _ := route.Params.GetOK("organizationToken") - if err := o.bindOrganizationToken(rOrganizationToken, rhkOrganizationToken, route.Formats); err != nil { - res = append(res, err) - } - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -// bindOrganizationToken binds and validates parameter OrganizationToken from path. -func (o *ListMembersParams) bindOrganizationToken(rawData []string, hasKey bool, formats strfmt.Registry) error { - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: true - // Parameter is provided by construction from the route - o.OrganizationToken = raw - - return nil -} diff --git a/rest_server_zrok/operations/metadata/list_members_responses.go b/rest_server_zrok/operations/metadata/list_members_responses.go deleted file mode 100644 index be67d254..00000000 --- a/rest_server_zrok/operations/metadata/list_members_responses.go +++ /dev/null @@ -1,107 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -package metadata - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime" -) - -// ListMembersOKCode is the HTTP code returned for type ListMembersOK -const ListMembersOKCode int = 200 - -/* -ListMembersOK ok - -swagger:response listMembersOK -*/ -type ListMembersOK struct { - - /* - In: Body - */ - Payload *ListMembersOKBody `json:"body,omitempty"` -} - -// NewListMembersOK creates ListMembersOK with default headers values -func NewListMembersOK() *ListMembersOK { - - return &ListMembersOK{} -} - -// WithPayload adds the payload to the list members o k response -func (o *ListMembersOK) WithPayload(payload *ListMembersOKBody) *ListMembersOK { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the list members o k response -func (o *ListMembersOK) SetPayload(payload *ListMembersOKBody) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *ListMembersOK) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(200) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} - -// ListMembersNotFoundCode is the HTTP code returned for type ListMembersNotFound -const ListMembersNotFoundCode int = 404 - -/* -ListMembersNotFound not found - -swagger:response listMembersNotFound -*/ -type ListMembersNotFound struct { -} - -// NewListMembersNotFound creates ListMembersNotFound with default headers values -func NewListMembersNotFound() *ListMembersNotFound { - - return &ListMembersNotFound{} -} - -// WriteResponse to the client -func (o *ListMembersNotFound) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.Header().Del(runtime.HeaderContentType) //Remove Content-Type on empty responses - - rw.WriteHeader(404) -} - -// ListMembersInternalServerErrorCode is the HTTP code returned for type ListMembersInternalServerError -const ListMembersInternalServerErrorCode int = 500 - -/* -ListMembersInternalServerError internal server error - -swagger:response listMembersInternalServerError -*/ -type ListMembersInternalServerError struct { -} - -// NewListMembersInternalServerError creates ListMembersInternalServerError with default headers values -func NewListMembersInternalServerError() *ListMembersInternalServerError { - - return &ListMembersInternalServerError{} -} - -// WriteResponse to the client -func (o *ListMembersInternalServerError) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.Header().Del(runtime.HeaderContentType) //Remove Content-Type on empty responses - - rw.WriteHeader(500) -} diff --git a/rest_server_zrok/operations/metadata/list_memberships.go b/rest_server_zrok/operations/metadata/list_memberships.go index 985140cc..d651433a 100644 --- a/rest_server_zrok/operations/metadata/list_memberships.go +++ b/rest_server_zrok/operations/metadata/list_memberships.go @@ -192,8 +192,8 @@ type ListMembershipsOKBodyMembershipsItems0 struct { // description Description string `json:"description,omitempty"` - // token - Token string `json:"token,omitempty"` + // organization token + OrganizationToken string `json:"organizationToken,omitempty"` } // Validate validates this list memberships o k body memberships items0 diff --git a/rest_server_zrok/operations/metadata/version_responses.go b/rest_server_zrok/operations/metadata/version_responses.go index a48a43e0..95244c10 100644 --- a/rest_server_zrok/operations/metadata/version_responses.go +++ b/rest_server_zrok/operations/metadata/version_responses.go @@ -17,7 +17,7 @@ import ( const VersionOKCode int = 200 /* -VersionOK current server version +VersionOK legacy upgrade required swagger:response versionOK */ diff --git a/rest_server_zrok/operations/metrics/get_account_metrics.go b/rest_server_zrok/operations/metrics/get_account_metrics.go deleted file mode 100644 index d3fcab7f..00000000 --- a/rest_server_zrok/operations/metrics/get_account_metrics.go +++ /dev/null @@ -1,71 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -package metrics - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime/middleware" - - "github.com/openziti/zrok/rest_model_zrok" -) - -// GetAccountMetricsHandlerFunc turns a function with the right signature into a get account metrics handler -type GetAccountMetricsHandlerFunc func(GetAccountMetricsParams, *rest_model_zrok.Principal) middleware.Responder - -// Handle executing the request and returning a response -func (fn GetAccountMetricsHandlerFunc) Handle(params GetAccountMetricsParams, principal *rest_model_zrok.Principal) middleware.Responder { - return fn(params, principal) -} - -// GetAccountMetricsHandler interface for that can handle valid get account metrics params -type GetAccountMetricsHandler interface { - Handle(GetAccountMetricsParams, *rest_model_zrok.Principal) middleware.Responder -} - -// NewGetAccountMetrics creates a new http.Handler for the get account metrics operation -func NewGetAccountMetrics(ctx *middleware.Context, handler GetAccountMetricsHandler) *GetAccountMetrics { - return &GetAccountMetrics{Context: ctx, Handler: handler} -} - -/* - GetAccountMetrics swagger:route GET /metrics/account metrics getAccountMetrics - -GetAccountMetrics get account metrics API -*/ -type GetAccountMetrics struct { - Context *middleware.Context - Handler GetAccountMetricsHandler -} - -func (o *GetAccountMetrics) ServeHTTP(rw http.ResponseWriter, r *http.Request) { - route, rCtx, _ := o.Context.RouteInfo(r) - if rCtx != nil { - *r = *rCtx - } - var Params = NewGetAccountMetricsParams() - uprinc, aCtx, err := o.Context.Authorize(r, route) - if err != nil { - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - if aCtx != nil { - *r = *aCtx - } - var principal *rest_model_zrok.Principal - if uprinc != nil { - principal = uprinc.(*rest_model_zrok.Principal) // this is really a rest_model_zrok.Principal, I promise - } - - if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - - res := o.Handler.Handle(Params, principal) // actually handle the request - o.Context.Respond(rw, r, route.Produces, route, res) - -} diff --git a/rest_server_zrok/operations/metrics/get_account_metrics_parameters.go b/rest_server_zrok/operations/metrics/get_account_metrics_parameters.go deleted file mode 100644 index afe23af1..00000000 --- a/rest_server_zrok/operations/metrics/get_account_metrics_parameters.go +++ /dev/null @@ -1,83 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -package metrics - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/errors" - "github.com/go-openapi/runtime" - "github.com/go-openapi/runtime/middleware" - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// NewGetAccountMetricsParams creates a new GetAccountMetricsParams object -// -// There are no default values defined in the spec. -func NewGetAccountMetricsParams() GetAccountMetricsParams { - - return GetAccountMetricsParams{} -} - -// GetAccountMetricsParams contains all the bound params for the get account metrics operation -// typically these are obtained from a http.Request -// -// swagger:parameters getAccountMetrics -type GetAccountMetricsParams struct { - - // HTTP Request Object - HTTPRequest *http.Request `json:"-"` - - /* - In: query - */ - Duration *float64 -} - -// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface -// for simple values it will use straight method calls. -// -// To ensure default values, the struct must have been initialized with NewGetAccountMetricsParams() beforehand. -func (o *GetAccountMetricsParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error { - var res []error - - o.HTTPRequest = r - - qs := runtime.Values(r.URL.Query()) - - qDuration, qhkDuration, _ := qs.GetOK("duration") - if err := o.bindDuration(qDuration, qhkDuration, route.Formats); err != nil { - res = append(res, err) - } - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -// bindDuration binds and validates parameter Duration from query. -func (o *GetAccountMetricsParams) bindDuration(rawData []string, hasKey bool, formats strfmt.Registry) error { - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: false - // AllowEmptyValue: false - - if raw == "" { // empty values pass all other validations - return nil - } - - value, err := swag.ConvertFloat64(raw) - if err != nil { - return errors.InvalidType("duration", "query", "float64", raw) - } - o.Duration = &value - - return nil -} diff --git a/rest_server_zrok/operations/metrics/get_account_metrics_responses.go b/rest_server_zrok/operations/metrics/get_account_metrics_responses.go deleted file mode 100644 index 78480b51..00000000 --- a/rest_server_zrok/operations/metrics/get_account_metrics_responses.go +++ /dev/null @@ -1,59 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -package metrics - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime" - - "github.com/openziti/zrok/rest_model_zrok" -) - -// GetAccountMetricsOKCode is the HTTP code returned for type GetAccountMetricsOK -const GetAccountMetricsOKCode int = 200 - -/* -GetAccountMetricsOK account metrics - -swagger:response getAccountMetricsOK -*/ -type GetAccountMetricsOK struct { - - /* - In: Body - */ - Payload *rest_model_zrok.Metrics `json:"body,omitempty"` -} - -// NewGetAccountMetricsOK creates GetAccountMetricsOK with default headers values -func NewGetAccountMetricsOK() *GetAccountMetricsOK { - - return &GetAccountMetricsOK{} -} - -// WithPayload adds the payload to the get account metrics o k response -func (o *GetAccountMetricsOK) WithPayload(payload *rest_model_zrok.Metrics) *GetAccountMetricsOK { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the get account metrics o k response -func (o *GetAccountMetricsOK) SetPayload(payload *rest_model_zrok.Metrics) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *GetAccountMetricsOK) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(200) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} diff --git a/rest_server_zrok/operations/metrics/get_environment_metrics.go b/rest_server_zrok/operations/metrics/get_environment_metrics.go deleted file mode 100644 index b26b7535..00000000 --- a/rest_server_zrok/operations/metrics/get_environment_metrics.go +++ /dev/null @@ -1,71 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -package metrics - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime/middleware" - - "github.com/openziti/zrok/rest_model_zrok" -) - -// GetEnvironmentMetricsHandlerFunc turns a function with the right signature into a get environment metrics handler -type GetEnvironmentMetricsHandlerFunc func(GetEnvironmentMetricsParams, *rest_model_zrok.Principal) middleware.Responder - -// Handle executing the request and returning a response -func (fn GetEnvironmentMetricsHandlerFunc) Handle(params GetEnvironmentMetricsParams, principal *rest_model_zrok.Principal) middleware.Responder { - return fn(params, principal) -} - -// GetEnvironmentMetricsHandler interface for that can handle valid get environment metrics params -type GetEnvironmentMetricsHandler interface { - Handle(GetEnvironmentMetricsParams, *rest_model_zrok.Principal) middleware.Responder -} - -// NewGetEnvironmentMetrics creates a new http.Handler for the get environment metrics operation -func NewGetEnvironmentMetrics(ctx *middleware.Context, handler GetEnvironmentMetricsHandler) *GetEnvironmentMetrics { - return &GetEnvironmentMetrics{Context: ctx, Handler: handler} -} - -/* - GetEnvironmentMetrics swagger:route GET /metrics/environment/{envId} metrics getEnvironmentMetrics - -GetEnvironmentMetrics get environment metrics API -*/ -type GetEnvironmentMetrics struct { - Context *middleware.Context - Handler GetEnvironmentMetricsHandler -} - -func (o *GetEnvironmentMetrics) ServeHTTP(rw http.ResponseWriter, r *http.Request) { - route, rCtx, _ := o.Context.RouteInfo(r) - if rCtx != nil { - *r = *rCtx - } - var Params = NewGetEnvironmentMetricsParams() - uprinc, aCtx, err := o.Context.Authorize(r, route) - if err != nil { - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - if aCtx != nil { - *r = *aCtx - } - var principal *rest_model_zrok.Principal - if uprinc != nil { - principal = uprinc.(*rest_model_zrok.Principal) // this is really a rest_model_zrok.Principal, I promise - } - - if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - - res := o.Handler.Handle(Params, principal) // actually handle the request - o.Context.Respond(rw, r, route.Produces, route, res) - -} diff --git a/rest_server_zrok/operations/metrics/get_environment_metrics_parameters.go b/rest_server_zrok/operations/metrics/get_environment_metrics_parameters.go deleted file mode 100644 index 69bfb627..00000000 --- a/rest_server_zrok/operations/metrics/get_environment_metrics_parameters.go +++ /dev/null @@ -1,107 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -package metrics - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/errors" - "github.com/go-openapi/runtime" - "github.com/go-openapi/runtime/middleware" - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// NewGetEnvironmentMetricsParams creates a new GetEnvironmentMetricsParams object -// -// There are no default values defined in the spec. -func NewGetEnvironmentMetricsParams() GetEnvironmentMetricsParams { - - return GetEnvironmentMetricsParams{} -} - -// GetEnvironmentMetricsParams contains all the bound params for the get environment metrics operation -// typically these are obtained from a http.Request -// -// swagger:parameters getEnvironmentMetrics -type GetEnvironmentMetricsParams struct { - - // HTTP Request Object - HTTPRequest *http.Request `json:"-"` - - /* - In: query - */ - Duration *float64 - /* - Required: true - In: path - */ - EnvID string -} - -// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface -// for simple values it will use straight method calls. -// -// To ensure default values, the struct must have been initialized with NewGetEnvironmentMetricsParams() beforehand. -func (o *GetEnvironmentMetricsParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error { - var res []error - - o.HTTPRequest = r - - qs := runtime.Values(r.URL.Query()) - - qDuration, qhkDuration, _ := qs.GetOK("duration") - if err := o.bindDuration(qDuration, qhkDuration, route.Formats); err != nil { - res = append(res, err) - } - - rEnvID, rhkEnvID, _ := route.Params.GetOK("envId") - if err := o.bindEnvID(rEnvID, rhkEnvID, route.Formats); err != nil { - res = append(res, err) - } - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -// bindDuration binds and validates parameter Duration from query. -func (o *GetEnvironmentMetricsParams) bindDuration(rawData []string, hasKey bool, formats strfmt.Registry) error { - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: false - // AllowEmptyValue: false - - if raw == "" { // empty values pass all other validations - return nil - } - - value, err := swag.ConvertFloat64(raw) - if err != nil { - return errors.InvalidType("duration", "query", "float64", raw) - } - o.Duration = &value - - return nil -} - -// bindEnvID binds and validates parameter EnvID from path. -func (o *GetEnvironmentMetricsParams) bindEnvID(rawData []string, hasKey bool, formats strfmt.Registry) error { - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: true - // Parameter is provided by construction from the route - o.EnvID = raw - - return nil -} diff --git a/rest_server_zrok/operations/metrics/get_environment_metrics_responses.go b/rest_server_zrok/operations/metrics/get_environment_metrics_responses.go deleted file mode 100644 index d5e9897c..00000000 --- a/rest_server_zrok/operations/metrics/get_environment_metrics_responses.go +++ /dev/null @@ -1,84 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -package metrics - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime" - - "github.com/openziti/zrok/rest_model_zrok" -) - -// GetEnvironmentMetricsOKCode is the HTTP code returned for type GetEnvironmentMetricsOK -const GetEnvironmentMetricsOKCode int = 200 - -/* -GetEnvironmentMetricsOK environment metrics - -swagger:response getEnvironmentMetricsOK -*/ -type GetEnvironmentMetricsOK struct { - - /* - In: Body - */ - Payload *rest_model_zrok.Metrics `json:"body,omitempty"` -} - -// NewGetEnvironmentMetricsOK creates GetEnvironmentMetricsOK with default headers values -func NewGetEnvironmentMetricsOK() *GetEnvironmentMetricsOK { - - return &GetEnvironmentMetricsOK{} -} - -// WithPayload adds the payload to the get environment metrics o k response -func (o *GetEnvironmentMetricsOK) WithPayload(payload *rest_model_zrok.Metrics) *GetEnvironmentMetricsOK { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the get environment metrics o k response -func (o *GetEnvironmentMetricsOK) SetPayload(payload *rest_model_zrok.Metrics) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *GetEnvironmentMetricsOK) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(200) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} - -// GetEnvironmentMetricsUnauthorizedCode is the HTTP code returned for type GetEnvironmentMetricsUnauthorized -const GetEnvironmentMetricsUnauthorizedCode int = 401 - -/* -GetEnvironmentMetricsUnauthorized unauthorized - -swagger:response getEnvironmentMetricsUnauthorized -*/ -type GetEnvironmentMetricsUnauthorized struct { -} - -// NewGetEnvironmentMetricsUnauthorized creates GetEnvironmentMetricsUnauthorized with default headers values -func NewGetEnvironmentMetricsUnauthorized() *GetEnvironmentMetricsUnauthorized { - - return &GetEnvironmentMetricsUnauthorized{} -} - -// WriteResponse to the client -func (o *GetEnvironmentMetricsUnauthorized) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.Header().Del(runtime.HeaderContentType) //Remove Content-Type on empty responses - - rw.WriteHeader(401) -} diff --git a/rest_server_zrok/operations/metrics/get_environment_metrics_urlbuilder.go b/rest_server_zrok/operations/metrics/get_environment_metrics_urlbuilder.go deleted file mode 100644 index 9693cf12..00000000 --- a/rest_server_zrok/operations/metrics/get_environment_metrics_urlbuilder.go +++ /dev/null @@ -1,115 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -package metrics - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "errors" - "net/url" - golangswaggerpaths "path" - "strings" - - "github.com/go-openapi/swag" -) - -// GetEnvironmentMetricsURL generates an URL for the get environment metrics operation -type GetEnvironmentMetricsURL struct { - EnvID string - - Duration *float64 - - _basePath string - // avoid unkeyed usage - _ struct{} -} - -// WithBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *GetEnvironmentMetricsURL) WithBasePath(bp string) *GetEnvironmentMetricsURL { - o.SetBasePath(bp) - return o -} - -// SetBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *GetEnvironmentMetricsURL) SetBasePath(bp string) { - o._basePath = bp -} - -// Build a url path and query string -func (o *GetEnvironmentMetricsURL) Build() (*url.URL, error) { - var _result url.URL - - var _path = "/metrics/environment/{envId}" - - envID := o.EnvID - if envID != "" { - _path = strings.Replace(_path, "{envId}", envID, -1) - } else { - return nil, errors.New("envId is required on GetEnvironmentMetricsURL") - } - - _basePath := o._basePath - if _basePath == "" { - _basePath = "/api/v1" - } - _result.Path = golangswaggerpaths.Join(_basePath, _path) - - qs := make(url.Values) - - var durationQ string - if o.Duration != nil { - durationQ = swag.FormatFloat64(*o.Duration) - } - if durationQ != "" { - qs.Set("duration", durationQ) - } - - _result.RawQuery = qs.Encode() - - return &_result, nil -} - -// Must is a helper function to panic when the url builder returns an error -func (o *GetEnvironmentMetricsURL) Must(u *url.URL, err error) *url.URL { - if err != nil { - panic(err) - } - if u == nil { - panic("url can't be nil") - } - return u -} - -// String returns the string representation of the path with query string -func (o *GetEnvironmentMetricsURL) String() string { - return o.Must(o.Build()).String() -} - -// BuildFull builds a full url with scheme, host, path and query string -func (o *GetEnvironmentMetricsURL) BuildFull(scheme, host string) (*url.URL, error) { - if scheme == "" { - return nil, errors.New("scheme is required for a full url on GetEnvironmentMetricsURL") - } - if host == "" { - return nil, errors.New("host is required for a full url on GetEnvironmentMetricsURL") - } - - base, err := o.Build() - if err != nil { - return nil, err - } - - base.Scheme = scheme - base.Host = host - return base, nil -} - -// StringFull returns the string representation of a complete url -func (o *GetEnvironmentMetricsURL) StringFull(scheme, host string) string { - return o.Must(o.BuildFull(scheme, host)).String() -} diff --git a/rest_server_zrok/operations/metrics/get_share_metrics.go b/rest_server_zrok/operations/metrics/get_share_metrics.go deleted file mode 100644 index 67470dfa..00000000 --- a/rest_server_zrok/operations/metrics/get_share_metrics.go +++ /dev/null @@ -1,71 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -package metrics - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime/middleware" - - "github.com/openziti/zrok/rest_model_zrok" -) - -// GetShareMetricsHandlerFunc turns a function with the right signature into a get share metrics handler -type GetShareMetricsHandlerFunc func(GetShareMetricsParams, *rest_model_zrok.Principal) middleware.Responder - -// Handle executing the request and returning a response -func (fn GetShareMetricsHandlerFunc) Handle(params GetShareMetricsParams, principal *rest_model_zrok.Principal) middleware.Responder { - return fn(params, principal) -} - -// GetShareMetricsHandler interface for that can handle valid get share metrics params -type GetShareMetricsHandler interface { - Handle(GetShareMetricsParams, *rest_model_zrok.Principal) middleware.Responder -} - -// NewGetShareMetrics creates a new http.Handler for the get share metrics operation -func NewGetShareMetrics(ctx *middleware.Context, handler GetShareMetricsHandler) *GetShareMetrics { - return &GetShareMetrics{Context: ctx, Handler: handler} -} - -/* - GetShareMetrics swagger:route GET /metrics/share/{shrToken} metrics getShareMetrics - -GetShareMetrics get share metrics API -*/ -type GetShareMetrics struct { - Context *middleware.Context - Handler GetShareMetricsHandler -} - -func (o *GetShareMetrics) ServeHTTP(rw http.ResponseWriter, r *http.Request) { - route, rCtx, _ := o.Context.RouteInfo(r) - if rCtx != nil { - *r = *rCtx - } - var Params = NewGetShareMetricsParams() - uprinc, aCtx, err := o.Context.Authorize(r, route) - if err != nil { - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - if aCtx != nil { - *r = *aCtx - } - var principal *rest_model_zrok.Principal - if uprinc != nil { - principal = uprinc.(*rest_model_zrok.Principal) // this is really a rest_model_zrok.Principal, I promise - } - - if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - - res := o.Handler.Handle(Params, principal) // actually handle the request - o.Context.Respond(rw, r, route.Produces, route, res) - -} diff --git a/rest_server_zrok/operations/metrics/get_share_metrics_parameters.go b/rest_server_zrok/operations/metrics/get_share_metrics_parameters.go deleted file mode 100644 index efc3d81d..00000000 --- a/rest_server_zrok/operations/metrics/get_share_metrics_parameters.go +++ /dev/null @@ -1,107 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -package metrics - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/errors" - "github.com/go-openapi/runtime" - "github.com/go-openapi/runtime/middleware" - "github.com/go-openapi/strfmt" - "github.com/go-openapi/swag" -) - -// NewGetShareMetricsParams creates a new GetShareMetricsParams object -// -// There are no default values defined in the spec. -func NewGetShareMetricsParams() GetShareMetricsParams { - - return GetShareMetricsParams{} -} - -// GetShareMetricsParams contains all the bound params for the get share metrics operation -// typically these are obtained from a http.Request -// -// swagger:parameters getShareMetrics -type GetShareMetricsParams struct { - - // HTTP Request Object - HTTPRequest *http.Request `json:"-"` - - /* - In: query - */ - Duration *float64 - /* - Required: true - In: path - */ - ShrToken string -} - -// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface -// for simple values it will use straight method calls. -// -// To ensure default values, the struct must have been initialized with NewGetShareMetricsParams() beforehand. -func (o *GetShareMetricsParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error { - var res []error - - o.HTTPRequest = r - - qs := runtime.Values(r.URL.Query()) - - qDuration, qhkDuration, _ := qs.GetOK("duration") - if err := o.bindDuration(qDuration, qhkDuration, route.Formats); err != nil { - res = append(res, err) - } - - rShrToken, rhkShrToken, _ := route.Params.GetOK("shrToken") - if err := o.bindShrToken(rShrToken, rhkShrToken, route.Formats); err != nil { - res = append(res, err) - } - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -// bindDuration binds and validates parameter Duration from query. -func (o *GetShareMetricsParams) bindDuration(rawData []string, hasKey bool, formats strfmt.Registry) error { - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: false - // AllowEmptyValue: false - - if raw == "" { // empty values pass all other validations - return nil - } - - value, err := swag.ConvertFloat64(raw) - if err != nil { - return errors.InvalidType("duration", "query", "float64", raw) - } - o.Duration = &value - - return nil -} - -// bindShrToken binds and validates parameter ShrToken from path. -func (o *GetShareMetricsParams) bindShrToken(rawData []string, hasKey bool, formats strfmt.Registry) error { - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: true - // Parameter is provided by construction from the route - o.ShrToken = raw - - return nil -} diff --git a/rest_server_zrok/operations/metrics/get_share_metrics_responses.go b/rest_server_zrok/operations/metrics/get_share_metrics_responses.go deleted file mode 100644 index 70e0c0e1..00000000 --- a/rest_server_zrok/operations/metrics/get_share_metrics_responses.go +++ /dev/null @@ -1,84 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -package metrics - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime" - - "github.com/openziti/zrok/rest_model_zrok" -) - -// GetShareMetricsOKCode is the HTTP code returned for type GetShareMetricsOK -const GetShareMetricsOKCode int = 200 - -/* -GetShareMetricsOK share metrics - -swagger:response getShareMetricsOK -*/ -type GetShareMetricsOK struct { - - /* - In: Body - */ - Payload *rest_model_zrok.Metrics `json:"body,omitempty"` -} - -// NewGetShareMetricsOK creates GetShareMetricsOK with default headers values -func NewGetShareMetricsOK() *GetShareMetricsOK { - - return &GetShareMetricsOK{} -} - -// WithPayload adds the payload to the get share metrics o k response -func (o *GetShareMetricsOK) WithPayload(payload *rest_model_zrok.Metrics) *GetShareMetricsOK { - o.Payload = payload - return o -} - -// SetPayload sets the payload to the get share metrics o k response -func (o *GetShareMetricsOK) SetPayload(payload *rest_model_zrok.Metrics) { - o.Payload = payload -} - -// WriteResponse to the client -func (o *GetShareMetricsOK) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.WriteHeader(200) - if o.Payload != nil { - payload := o.Payload - if err := producer.Produce(rw, payload); err != nil { - panic(err) // let the recovery middleware deal with this - } - } -} - -// GetShareMetricsUnauthorizedCode is the HTTP code returned for type GetShareMetricsUnauthorized -const GetShareMetricsUnauthorizedCode int = 401 - -/* -GetShareMetricsUnauthorized unauthorized - -swagger:response getShareMetricsUnauthorized -*/ -type GetShareMetricsUnauthorized struct { -} - -// NewGetShareMetricsUnauthorized creates GetShareMetricsUnauthorized with default headers values -func NewGetShareMetricsUnauthorized() *GetShareMetricsUnauthorized { - - return &GetShareMetricsUnauthorized{} -} - -// WriteResponse to the client -func (o *GetShareMetricsUnauthorized) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.Header().Del(runtime.HeaderContentType) //Remove Content-Type on empty responses - - rw.WriteHeader(401) -} diff --git a/rest_server_zrok/operations/metrics/get_share_metrics_urlbuilder.go b/rest_server_zrok/operations/metrics/get_share_metrics_urlbuilder.go deleted file mode 100644 index 3477a21a..00000000 --- a/rest_server_zrok/operations/metrics/get_share_metrics_urlbuilder.go +++ /dev/null @@ -1,115 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -package metrics - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "errors" - "net/url" - golangswaggerpaths "path" - "strings" - - "github.com/go-openapi/swag" -) - -// GetShareMetricsURL generates an URL for the get share metrics operation -type GetShareMetricsURL struct { - ShrToken string - - Duration *float64 - - _basePath string - // avoid unkeyed usage - _ struct{} -} - -// WithBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *GetShareMetricsURL) WithBasePath(bp string) *GetShareMetricsURL { - o.SetBasePath(bp) - return o -} - -// SetBasePath sets the base path for this url builder, only required when it's different from the -// base path specified in the swagger spec. -// When the value of the base path is an empty string -func (o *GetShareMetricsURL) SetBasePath(bp string) { - o._basePath = bp -} - -// Build a url path and query string -func (o *GetShareMetricsURL) Build() (*url.URL, error) { - var _result url.URL - - var _path = "/metrics/share/{shrToken}" - - shrToken := o.ShrToken - if shrToken != "" { - _path = strings.Replace(_path, "{shrToken}", shrToken, -1) - } else { - return nil, errors.New("shrToken is required on GetShareMetricsURL") - } - - _basePath := o._basePath - if _basePath == "" { - _basePath = "/api/v1" - } - _result.Path = golangswaggerpaths.Join(_basePath, _path) - - qs := make(url.Values) - - var durationQ string - if o.Duration != nil { - durationQ = swag.FormatFloat64(*o.Duration) - } - if durationQ != "" { - qs.Set("duration", durationQ) - } - - _result.RawQuery = qs.Encode() - - return &_result, nil -} - -// Must is a helper function to panic when the url builder returns an error -func (o *GetShareMetricsURL) Must(u *url.URL, err error) *url.URL { - if err != nil { - panic(err) - } - if u == nil { - panic("url can't be nil") - } - return u -} - -// String returns the string representation of the path with query string -func (o *GetShareMetricsURL) String() string { - return o.Must(o.Build()).String() -} - -// BuildFull builds a full url with scheme, host, path and query string -func (o *GetShareMetricsURL) BuildFull(scheme, host string) (*url.URL, error) { - if scheme == "" { - return nil, errors.New("scheme is required for a full url on GetShareMetricsURL") - } - if host == "" { - return nil, errors.New("host is required for a full url on GetShareMetricsURL") - } - - base, err := o.Build() - if err != nil { - return nil, err - } - - base.Scheme = scheme - base.Host = host - return base, nil -} - -// StringFull returns the string representation of a complete url -func (o *GetShareMetricsURL) StringFull(scheme, host string) string { - return o.Must(o.BuildFull(scheme, host)).String() -} diff --git a/rest_server_zrok/operations/share/access.go b/rest_server_zrok/operations/share/access.go index b25daf61..83b71399 100644 --- a/rest_server_zrok/operations/share/access.go +++ b/rest_server_zrok/operations/share/access.go @@ -6,9 +6,12 @@ package share // Editing this file might prove futile when you re-run the generate command import ( + "context" "net/http" "github.com/go-openapi/runtime/middleware" + "github.com/go-openapi/strfmt" + "github.com/go-openapi/swag" "github.com/openziti/zrok/rest_model_zrok" ) @@ -69,3 +72,89 @@ func (o *Access) ServeHTTP(rw http.ResponseWriter, r *http.Request) { o.Context.Respond(rw, r, route.Produces, route, res) } + +// AccessBody access body +// +// swagger:model AccessBody +type AccessBody struct { + + // bind address + BindAddress string `json:"bindAddress,omitempty"` + + // description + Description string `json:"description,omitempty"` + + // env z Id + EnvZID string `json:"envZId,omitempty"` + + // share token + ShareToken string `json:"shareToken,omitempty"` +} + +// Validate validates this access body +func (o *AccessBody) Validate(formats strfmt.Registry) error { + return nil +} + +// ContextValidate validates this access body based on context it is used +func (o *AccessBody) ContextValidate(ctx context.Context, formats strfmt.Registry) error { + return nil +} + +// MarshalBinary interface implementation +func (o *AccessBody) MarshalBinary() ([]byte, error) { + if o == nil { + return nil, nil + } + return swag.WriteJSON(o) +} + +// UnmarshalBinary interface implementation +func (o *AccessBody) UnmarshalBinary(b []byte) error { + var res AccessBody + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *o = res + return nil +} + +// AccessCreatedBody access created body +// +// swagger:model AccessCreatedBody +type AccessCreatedBody struct { + + // backend mode + BackendMode string `json:"backendMode,omitempty"` + + // frontend token + FrontendToken string `json:"frontendToken,omitempty"` +} + +// Validate validates this access created body +func (o *AccessCreatedBody) Validate(formats strfmt.Registry) error { + return nil +} + +// ContextValidate validates this access created body based on context it is used +func (o *AccessCreatedBody) ContextValidate(ctx context.Context, formats strfmt.Registry) error { + return nil +} + +// MarshalBinary interface implementation +func (o *AccessCreatedBody) MarshalBinary() ([]byte, error) { + if o == nil { + return nil, nil + } + return swag.WriteJSON(o) +} + +// UnmarshalBinary interface implementation +func (o *AccessCreatedBody) UnmarshalBinary(b []byte) error { + var res AccessCreatedBody + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *o = res + return nil +} diff --git a/rest_server_zrok/operations/share/access_parameters.go b/rest_server_zrok/operations/share/access_parameters.go index 7e212a6d..d62bce7f 100644 --- a/rest_server_zrok/operations/share/access_parameters.go +++ b/rest_server_zrok/operations/share/access_parameters.go @@ -12,8 +12,6 @@ import ( "github.com/go-openapi/runtime" "github.com/go-openapi/runtime/middleware" "github.com/go-openapi/validate" - - "github.com/openziti/zrok/rest_model_zrok" ) // NewAccessParams creates a new AccessParams object @@ -36,7 +34,7 @@ type AccessParams struct { /* In: body */ - Body *rest_model_zrok.AccessRequest + Body AccessBody } // BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface @@ -50,7 +48,7 @@ func (o *AccessParams) BindRequest(r *http.Request, route *middleware.MatchedRou if runtime.HasBody(r) { defer r.Body.Close() - var body rest_model_zrok.AccessRequest + var body AccessBody if err := route.Consumer.Consume(r.Body, &body); err != nil { res = append(res, errors.NewParseError("body", "body", "", err)) } else { @@ -65,7 +63,7 @@ func (o *AccessParams) BindRequest(r *http.Request, route *middleware.MatchedRou } if len(res) == 0 { - o.Body = &body + o.Body = body } } } diff --git a/rest_server_zrok/operations/share/access_responses.go b/rest_server_zrok/operations/share/access_responses.go index d6b663d5..55bc33b8 100644 --- a/rest_server_zrok/operations/share/access_responses.go +++ b/rest_server_zrok/operations/share/access_responses.go @@ -9,8 +9,6 @@ import ( "net/http" "github.com/go-openapi/runtime" - - "github.com/openziti/zrok/rest_model_zrok" ) // AccessCreatedCode is the HTTP code returned for type AccessCreated @@ -26,7 +24,7 @@ type AccessCreated struct { /* In: Body */ - Payload *rest_model_zrok.AccessResponse `json:"body,omitempty"` + Payload *AccessCreatedBody `json:"body,omitempty"` } // NewAccessCreated creates AccessCreated with default headers values @@ -36,13 +34,13 @@ func NewAccessCreated() *AccessCreated { } // WithPayload adds the payload to the access created response -func (o *AccessCreated) WithPayload(payload *rest_model_zrok.AccessResponse) *AccessCreated { +func (o *AccessCreated) WithPayload(payload *AccessCreatedBody) *AccessCreated { o.Payload = payload return o } // SetPayload sets the payload to the access created response -func (o *AccessCreated) SetPayload(payload *rest_model_zrok.AccessResponse) { +func (o *AccessCreated) SetPayload(payload *AccessCreatedBody) { o.Payload = payload } diff --git a/rest_server_zrok/operations/share/oauth_authenticate.go b/rest_server_zrok/operations/share/oauth_authenticate.go deleted file mode 100644 index 8384df4b..00000000 --- a/rest_server_zrok/operations/share/oauth_authenticate.go +++ /dev/null @@ -1,56 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -package share - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime/middleware" -) - -// OauthAuthenticateHandlerFunc turns a function with the right signature into a oauth authenticate handler -type OauthAuthenticateHandlerFunc func(OauthAuthenticateParams) middleware.Responder - -// Handle executing the request and returning a response -func (fn OauthAuthenticateHandlerFunc) Handle(params OauthAuthenticateParams) middleware.Responder { - return fn(params) -} - -// OauthAuthenticateHandler interface for that can handle valid oauth authenticate params -type OauthAuthenticateHandler interface { - Handle(OauthAuthenticateParams) middleware.Responder -} - -// NewOauthAuthenticate creates a new http.Handler for the oauth authenticate operation -func NewOauthAuthenticate(ctx *middleware.Context, handler OauthAuthenticateHandler) *OauthAuthenticate { - return &OauthAuthenticate{Context: ctx, Handler: handler} -} - -/* - OauthAuthenticate swagger:route GET /oauth/authorize share oauthAuthenticate - -OauthAuthenticate oauth authenticate API -*/ -type OauthAuthenticate struct { - Context *middleware.Context - Handler OauthAuthenticateHandler -} - -func (o *OauthAuthenticate) ServeHTTP(rw http.ResponseWriter, r *http.Request) { - route, rCtx, _ := o.Context.RouteInfo(r) - if rCtx != nil { - *r = *rCtx - } - var Params = NewOauthAuthenticateParams() - if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params - o.Context.Respond(rw, r, route.Produces, route, err) - return - } - - res := o.Handler.Handle(Params) // actually handle the request - o.Context.Respond(rw, r, route.Produces, route, res) - -} diff --git a/rest_server_zrok/operations/share/oauth_authenticate_parameters.go b/rest_server_zrok/operations/share/oauth_authenticate_parameters.go deleted file mode 100644 index e7fe0e18..00000000 --- a/rest_server_zrok/operations/share/oauth_authenticate_parameters.go +++ /dev/null @@ -1,109 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -package share - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/errors" - "github.com/go-openapi/runtime" - "github.com/go-openapi/runtime/middleware" - "github.com/go-openapi/strfmt" - "github.com/go-openapi/validate" -) - -// NewOauthAuthenticateParams creates a new OauthAuthenticateParams object -// -// There are no default values defined in the spec. -func NewOauthAuthenticateParams() OauthAuthenticateParams { - - return OauthAuthenticateParams{} -} - -// OauthAuthenticateParams contains all the bound params for the oauth authenticate operation -// typically these are obtained from a http.Request -// -// swagger:parameters oauthAuthenticate -type OauthAuthenticateParams struct { - - // HTTP Request Object - HTTPRequest *http.Request `json:"-"` - - /* - Required: true - In: query - */ - Code string - /* - In: query - */ - State *string -} - -// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface -// for simple values it will use straight method calls. -// -// To ensure default values, the struct must have been initialized with NewOauthAuthenticateParams() beforehand. -func (o *OauthAuthenticateParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error { - var res []error - - o.HTTPRequest = r - - qs := runtime.Values(r.URL.Query()) - - qCode, qhkCode, _ := qs.GetOK("code") - if err := o.bindCode(qCode, qhkCode, route.Formats); err != nil { - res = append(res, err) - } - - qState, qhkState, _ := qs.GetOK("state") - if err := o.bindState(qState, qhkState, route.Formats); err != nil { - res = append(res, err) - } - if len(res) > 0 { - return errors.CompositeValidationError(res...) - } - return nil -} - -// bindCode binds and validates parameter Code from query. -func (o *OauthAuthenticateParams) bindCode(rawData []string, hasKey bool, formats strfmt.Registry) error { - if !hasKey { - return errors.Required("code", "query", rawData) - } - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: true - // AllowEmptyValue: false - - if err := validate.RequiredString("code", "query", raw); err != nil { - return err - } - o.Code = raw - - return nil -} - -// bindState binds and validates parameter State from query. -func (o *OauthAuthenticateParams) bindState(rawData []string, hasKey bool, formats strfmt.Registry) error { - var raw string - if len(rawData) > 0 { - raw = rawData[len(rawData)-1] - } - - // Required: false - // AllowEmptyValue: false - - if raw == "" { // empty values pass all other validations - return nil - } - o.State = &raw - - return nil -} diff --git a/rest_server_zrok/operations/share/oauth_authenticate_responses.go b/rest_server_zrok/operations/share/oauth_authenticate_responses.go deleted file mode 100644 index 7965c0b0..00000000 --- a/rest_server_zrok/operations/share/oauth_authenticate_responses.go +++ /dev/null @@ -1,109 +0,0 @@ -// Code generated by go-swagger; DO NOT EDIT. - -package share - -// This file was generated by the swagger tool. -// Editing this file might prove futile when you re-run the swagger generate command - -import ( - "net/http" - - "github.com/go-openapi/runtime" -) - -// OauthAuthenticateOKCode is the HTTP code returned for type OauthAuthenticateOK -const OauthAuthenticateOKCode int = 200 - -/* -OauthAuthenticateOK testing - -swagger:response oauthAuthenticateOK -*/ -type OauthAuthenticateOK struct { -} - -// NewOauthAuthenticateOK creates OauthAuthenticateOK with default headers values -func NewOauthAuthenticateOK() *OauthAuthenticateOK { - - return &OauthAuthenticateOK{} -} - -// WriteResponse to the client -func (o *OauthAuthenticateOK) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.Header().Del(runtime.HeaderContentType) //Remove Content-Type on empty responses - - rw.WriteHeader(200) -} - -// OauthAuthenticateFoundCode is the HTTP code returned for type OauthAuthenticateFound -const OauthAuthenticateFoundCode int = 302 - -/* -OauthAuthenticateFound redirect back to share - -swagger:response oauthAuthenticateFound -*/ -type OauthAuthenticateFound struct { - /*Redirect URL - - */ - Location string `json:"location"` -} - -// NewOauthAuthenticateFound creates OauthAuthenticateFound with default headers values -func NewOauthAuthenticateFound() *OauthAuthenticateFound { - - return &OauthAuthenticateFound{} -} - -// WithLocation adds the location to the oauth authenticate found response -func (o *OauthAuthenticateFound) WithLocation(location string) *OauthAuthenticateFound { - o.Location = location - return o -} - -// SetLocation sets the location to the oauth authenticate found response -func (o *OauthAuthenticateFound) SetLocation(location string) { - o.Location = location -} - -// WriteResponse to the client -func (o *OauthAuthenticateFound) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - // response header location - - location := o.Location - if location != "" { - rw.Header().Set("location", location) - } - - rw.Header().Del(runtime.HeaderContentType) //Remove Content-Type on empty responses - - rw.WriteHeader(302) -} - -// OauthAuthenticateInternalServerErrorCode is the HTTP code returned for type OauthAuthenticateInternalServerError -const OauthAuthenticateInternalServerErrorCode int = 500 - -/* -OauthAuthenticateInternalServerError internal server error - -swagger:response oauthAuthenticateInternalServerError -*/ -type OauthAuthenticateInternalServerError struct { -} - -// NewOauthAuthenticateInternalServerError creates OauthAuthenticateInternalServerError with default headers values -func NewOauthAuthenticateInternalServerError() *OauthAuthenticateInternalServerError { - - return &OauthAuthenticateInternalServerError{} -} - -// WriteResponse to the client -func (o *OauthAuthenticateInternalServerError) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { - - rw.Header().Del(runtime.HeaderContentType) //Remove Content-Type on empty responses - - rw.WriteHeader(500) -} diff --git a/rest_server_zrok/operations/share/unaccess.go b/rest_server_zrok/operations/share/unaccess.go index 7003a681..f7c677f4 100644 --- a/rest_server_zrok/operations/share/unaccess.go +++ b/rest_server_zrok/operations/share/unaccess.go @@ -6,9 +6,12 @@ package share // Editing this file might prove futile when you re-run the generate command import ( + "context" "net/http" "github.com/go-openapi/runtime/middleware" + "github.com/go-openapi/strfmt" + "github.com/go-openapi/swag" "github.com/openziti/zrok/rest_model_zrok" ) @@ -69,3 +72,46 @@ func (o *Unaccess) ServeHTTP(rw http.ResponseWriter, r *http.Request) { o.Context.Respond(rw, r, route.Produces, route, res) } + +// UnaccessBody unaccess body +// +// swagger:model UnaccessBody +type UnaccessBody struct { + + // env z Id + EnvZID string `json:"envZId,omitempty"` + + // frontend token + FrontendToken string `json:"frontendToken,omitempty"` + + // share token + ShareToken string `json:"shareToken,omitempty"` +} + +// Validate validates this unaccess body +func (o *UnaccessBody) Validate(formats strfmt.Registry) error { + return nil +} + +// ContextValidate validates this unaccess body based on context it is used +func (o *UnaccessBody) ContextValidate(ctx context.Context, formats strfmt.Registry) error { + return nil +} + +// MarshalBinary interface implementation +func (o *UnaccessBody) MarshalBinary() ([]byte, error) { + if o == nil { + return nil, nil + } + return swag.WriteJSON(o) +} + +// UnmarshalBinary interface implementation +func (o *UnaccessBody) UnmarshalBinary(b []byte) error { + var res UnaccessBody + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *o = res + return nil +} diff --git a/rest_server_zrok/operations/share/unaccess_parameters.go b/rest_server_zrok/operations/share/unaccess_parameters.go index 5685787a..93185fd1 100644 --- a/rest_server_zrok/operations/share/unaccess_parameters.go +++ b/rest_server_zrok/operations/share/unaccess_parameters.go @@ -12,8 +12,6 @@ import ( "github.com/go-openapi/runtime" "github.com/go-openapi/runtime/middleware" "github.com/go-openapi/validate" - - "github.com/openziti/zrok/rest_model_zrok" ) // NewUnaccessParams creates a new UnaccessParams object @@ -36,7 +34,7 @@ type UnaccessParams struct { /* In: body */ - Body *rest_model_zrok.UnaccessRequest + Body UnaccessBody } // BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface @@ -50,7 +48,7 @@ func (o *UnaccessParams) BindRequest(r *http.Request, route *middleware.MatchedR if runtime.HasBody(r) { defer r.Body.Close() - var body rest_model_zrok.UnaccessRequest + var body UnaccessBody if err := route.Consumer.Consume(r.Body, &body); err != nil { res = append(res, errors.NewParseError("body", "body", "", err)) } else { @@ -65,7 +63,7 @@ func (o *UnaccessParams) BindRequest(r *http.Request, route *middleware.MatchedR } if len(res) == 0 { - o.Body = &body + o.Body = body } } } diff --git a/rest_server_zrok/operations/share/unshare.go b/rest_server_zrok/operations/share/unshare.go index 2d2907aa..5d0a3667 100644 --- a/rest_server_zrok/operations/share/unshare.go +++ b/rest_server_zrok/operations/share/unshare.go @@ -6,9 +6,12 @@ package share // Editing this file might prove futile when you re-run the generate command import ( + "context" "net/http" "github.com/go-openapi/runtime/middleware" + "github.com/go-openapi/strfmt" + "github.com/go-openapi/swag" "github.com/openziti/zrok/rest_model_zrok" ) @@ -69,3 +72,46 @@ func (o *Unshare) ServeHTTP(rw http.ResponseWriter, r *http.Request) { o.Context.Respond(rw, r, route.Produces, route, res) } + +// UnshareBody unshare body +// +// swagger:model UnshareBody +type UnshareBody struct { + + // env z Id + EnvZID string `json:"envZId,omitempty"` + + // reserved + Reserved bool `json:"reserved,omitempty"` + + // share token + ShareToken string `json:"shareToken,omitempty"` +} + +// Validate validates this unshare body +func (o *UnshareBody) Validate(formats strfmt.Registry) error { + return nil +} + +// ContextValidate validates this unshare body based on context it is used +func (o *UnshareBody) ContextValidate(ctx context.Context, formats strfmt.Registry) error { + return nil +} + +// MarshalBinary interface implementation +func (o *UnshareBody) MarshalBinary() ([]byte, error) { + if o == nil { + return nil, nil + } + return swag.WriteJSON(o) +} + +// UnmarshalBinary interface implementation +func (o *UnshareBody) UnmarshalBinary(b []byte) error { + var res UnshareBody + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *o = res + return nil +} diff --git a/rest_server_zrok/operations/share/unshare_parameters.go b/rest_server_zrok/operations/share/unshare_parameters.go index 16182936..f808f9ab 100644 --- a/rest_server_zrok/operations/share/unshare_parameters.go +++ b/rest_server_zrok/operations/share/unshare_parameters.go @@ -12,8 +12,6 @@ import ( "github.com/go-openapi/runtime" "github.com/go-openapi/runtime/middleware" "github.com/go-openapi/validate" - - "github.com/openziti/zrok/rest_model_zrok" ) // NewUnshareParams creates a new UnshareParams object @@ -36,7 +34,7 @@ type UnshareParams struct { /* In: body */ - Body *rest_model_zrok.UnshareRequest + Body UnshareBody } // BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface @@ -50,7 +48,7 @@ func (o *UnshareParams) BindRequest(r *http.Request, route *middleware.MatchedRo if runtime.HasBody(r) { defer r.Body.Close() - var body rest_model_zrok.UnshareRequest + var body UnshareBody if err := route.Consumer.Consume(r.Body, &body); err != nil { res = append(res, errors.NewParseError("body", "body", "", err)) } else { @@ -65,7 +63,7 @@ func (o *UnshareParams) BindRequest(r *http.Request, route *middleware.MatchedRo } if len(res) == 0 { - o.Body = &body + o.Body = body } } } diff --git a/rest_server_zrok/operations/share/update_access.go b/rest_server_zrok/operations/share/update_access.go new file mode 100644 index 00000000..7c28bbee --- /dev/null +++ b/rest_server_zrok/operations/share/update_access.go @@ -0,0 +1,117 @@ +// Code generated by go-swagger; DO NOT EDIT. + +package share + +// This file was generated by the swagger tool. +// Editing this file might prove futile when you re-run the generate command + +import ( + "context" + "net/http" + + "github.com/go-openapi/runtime/middleware" + "github.com/go-openapi/strfmt" + "github.com/go-openapi/swag" + + "github.com/openziti/zrok/rest_model_zrok" +) + +// UpdateAccessHandlerFunc turns a function with the right signature into a update access handler +type UpdateAccessHandlerFunc func(UpdateAccessParams, *rest_model_zrok.Principal) middleware.Responder + +// Handle executing the request and returning a response +func (fn UpdateAccessHandlerFunc) Handle(params UpdateAccessParams, principal *rest_model_zrok.Principal) middleware.Responder { + return fn(params, principal) +} + +// UpdateAccessHandler interface for that can handle valid update access params +type UpdateAccessHandler interface { + Handle(UpdateAccessParams, *rest_model_zrok.Principal) middleware.Responder +} + +// NewUpdateAccess creates a new http.Handler for the update access operation +func NewUpdateAccess(ctx *middleware.Context, handler UpdateAccessHandler) *UpdateAccess { + return &UpdateAccess{Context: ctx, Handler: handler} +} + +/* + UpdateAccess swagger:route PATCH /access share updateAccess + +UpdateAccess update access API +*/ +type UpdateAccess struct { + Context *middleware.Context + Handler UpdateAccessHandler +} + +func (o *UpdateAccess) ServeHTTP(rw http.ResponseWriter, r *http.Request) { + route, rCtx, _ := o.Context.RouteInfo(r) + if rCtx != nil { + *r = *rCtx + } + var Params = NewUpdateAccessParams() + uprinc, aCtx, err := o.Context.Authorize(r, route) + if err != nil { + o.Context.Respond(rw, r, route.Produces, route, err) + return + } + if aCtx != nil { + *r = *aCtx + } + var principal *rest_model_zrok.Principal + if uprinc != nil { + principal = uprinc.(*rest_model_zrok.Principal) // this is really a rest_model_zrok.Principal, I promise + } + + if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params + o.Context.Respond(rw, r, route.Produces, route, err) + return + } + + res := o.Handler.Handle(Params, principal) // actually handle the request + o.Context.Respond(rw, r, route.Produces, route, res) + +} + +// UpdateAccessBody update access body +// +// swagger:model UpdateAccessBody +type UpdateAccessBody struct { + + // bind address + BindAddress string `json:"bindAddress,omitempty"` + + // description + Description string `json:"description,omitempty"` + + // frontend token + FrontendToken string `json:"frontendToken,omitempty"` +} + +// Validate validates this update access body +func (o *UpdateAccessBody) Validate(formats strfmt.Registry) error { + return nil +} + +// ContextValidate validates this update access body based on context it is used +func (o *UpdateAccessBody) ContextValidate(ctx context.Context, formats strfmt.Registry) error { + return nil +} + +// MarshalBinary interface implementation +func (o *UpdateAccessBody) MarshalBinary() ([]byte, error) { + if o == nil { + return nil, nil + } + return swag.WriteJSON(o) +} + +// UnmarshalBinary interface implementation +func (o *UpdateAccessBody) UnmarshalBinary(b []byte) error { + var res UpdateAccessBody + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *o = res + return nil +} diff --git a/rest_server_zrok/operations/share/update_access_parameters.go b/rest_server_zrok/operations/share/update_access_parameters.go new file mode 100644 index 00000000..4ae7400a --- /dev/null +++ b/rest_server_zrok/operations/share/update_access_parameters.go @@ -0,0 +1,74 @@ +// Code generated by go-swagger; DO NOT EDIT. + +package share + +// This file was generated by the swagger tool. +// Editing this file might prove futile when you re-run the swagger generate command + +import ( + "net/http" + + "github.com/go-openapi/errors" + "github.com/go-openapi/runtime" + "github.com/go-openapi/runtime/middleware" + "github.com/go-openapi/validate" +) + +// NewUpdateAccessParams creates a new UpdateAccessParams object +// +// There are no default values defined in the spec. +func NewUpdateAccessParams() UpdateAccessParams { + + return UpdateAccessParams{} +} + +// UpdateAccessParams contains all the bound params for the update access operation +// typically these are obtained from a http.Request +// +// swagger:parameters updateAccess +type UpdateAccessParams struct { + + // HTTP Request Object + HTTPRequest *http.Request `json:"-"` + + /* + In: body + */ + Body UpdateAccessBody +} + +// BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface +// for simple values it will use straight method calls. +// +// To ensure default values, the struct must have been initialized with NewUpdateAccessParams() beforehand. +func (o *UpdateAccessParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error { + var res []error + + o.HTTPRequest = r + + if runtime.HasBody(r) { + defer r.Body.Close() + var body UpdateAccessBody + if err := route.Consumer.Consume(r.Body, &body); err != nil { + res = append(res, errors.NewParseError("body", "body", "", err)) + } else { + // validate body object + if err := body.Validate(route.Formats); err != nil { + res = append(res, err) + } + + ctx := validate.WithOperationRequest(r.Context()) + if err := body.ContextValidate(ctx, route.Formats); err != nil { + res = append(res, err) + } + + if len(res) == 0 { + o.Body = body + } + } + } + if len(res) > 0 { + return errors.CompositeValidationError(res...) + } + return nil +} diff --git a/rest_server_zrok/operations/share/update_access_responses.go b/rest_server_zrok/operations/share/update_access_responses.go new file mode 100644 index 00000000..d03c90b1 --- /dev/null +++ b/rest_server_zrok/operations/share/update_access_responses.go @@ -0,0 +1,112 @@ +// Code generated by go-swagger; DO NOT EDIT. + +package share + +// This file was generated by the swagger tool. +// Editing this file might prove futile when you re-run the swagger generate command + +import ( + "net/http" + + "github.com/go-openapi/runtime" +) + +// UpdateAccessOKCode is the HTTP code returned for type UpdateAccessOK +const UpdateAccessOKCode int = 200 + +/* +UpdateAccessOK access updated + +swagger:response updateAccessOK +*/ +type UpdateAccessOK struct { +} + +// NewUpdateAccessOK creates UpdateAccessOK with default headers values +func NewUpdateAccessOK() *UpdateAccessOK { + + return &UpdateAccessOK{} +} + +// WriteResponse to the client +func (o *UpdateAccessOK) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { + + rw.Header().Del(runtime.HeaderContentType) //Remove Content-Type on empty responses + + rw.WriteHeader(200) +} + +// UpdateAccessUnauthorizedCode is the HTTP code returned for type UpdateAccessUnauthorized +const UpdateAccessUnauthorizedCode int = 401 + +/* +UpdateAccessUnauthorized unauthorized + +swagger:response updateAccessUnauthorized +*/ +type UpdateAccessUnauthorized struct { +} + +// NewUpdateAccessUnauthorized creates UpdateAccessUnauthorized with default headers values +func NewUpdateAccessUnauthorized() *UpdateAccessUnauthorized { + + return &UpdateAccessUnauthorized{} +} + +// WriteResponse to the client +func (o *UpdateAccessUnauthorized) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { + + rw.Header().Del(runtime.HeaderContentType) //Remove Content-Type on empty responses + + rw.WriteHeader(401) +} + +// UpdateAccessNotFoundCode is the HTTP code returned for type UpdateAccessNotFound +const UpdateAccessNotFoundCode int = 404 + +/* +UpdateAccessNotFound not found + +swagger:response updateAccessNotFound +*/ +type UpdateAccessNotFound struct { +} + +// NewUpdateAccessNotFound creates UpdateAccessNotFound with default headers values +func NewUpdateAccessNotFound() *UpdateAccessNotFound { + + return &UpdateAccessNotFound{} +} + +// WriteResponse to the client +func (o *UpdateAccessNotFound) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { + + rw.Header().Del(runtime.HeaderContentType) //Remove Content-Type on empty responses + + rw.WriteHeader(404) +} + +// UpdateAccessInternalServerErrorCode is the HTTP code returned for type UpdateAccessInternalServerError +const UpdateAccessInternalServerErrorCode int = 500 + +/* +UpdateAccessInternalServerError internal server error + +swagger:response updateAccessInternalServerError +*/ +type UpdateAccessInternalServerError struct { +} + +// NewUpdateAccessInternalServerError creates UpdateAccessInternalServerError with default headers values +func NewUpdateAccessInternalServerError() *UpdateAccessInternalServerError { + + return &UpdateAccessInternalServerError{} +} + +// WriteResponse to the client +func (o *UpdateAccessInternalServerError) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { + + rw.Header().Del(runtime.HeaderContentType) //Remove Content-Type on empty responses + + rw.WriteHeader(500) +} diff --git a/rest_server_zrok/operations/share/oauth_authenticate_urlbuilder.go b/rest_server_zrok/operations/share/update_access_urlbuilder.go similarity index 59% rename from rest_server_zrok/operations/share/oauth_authenticate_urlbuilder.go rename to rest_server_zrok/operations/share/update_access_urlbuilder.go index 505fdba6..d04248f0 100644 --- a/rest_server_zrok/operations/share/oauth_authenticate_urlbuilder.go +++ b/rest_server_zrok/operations/share/update_access_urlbuilder.go @@ -11,20 +11,15 @@ import ( golangswaggerpaths "path" ) -// OauthAuthenticateURL generates an URL for the oauth authenticate operation -type OauthAuthenticateURL struct { - Code string - State *string - +// UpdateAccessURL generates an URL for the update access operation +type UpdateAccessURL struct { _basePath string - // avoid unkeyed usage - _ struct{} } // WithBasePath sets the base path for this url builder, only required when it's different from the // base path specified in the swagger spec. // When the value of the base path is an empty string -func (o *OauthAuthenticateURL) WithBasePath(bp string) *OauthAuthenticateURL { +func (o *UpdateAccessURL) WithBasePath(bp string) *UpdateAccessURL { o.SetBasePath(bp) return o } @@ -32,15 +27,15 @@ func (o *OauthAuthenticateURL) WithBasePath(bp string) *OauthAuthenticateURL { // SetBasePath sets the base path for this url builder, only required when it's different from the // base path specified in the swagger spec. // When the value of the base path is an empty string -func (o *OauthAuthenticateURL) SetBasePath(bp string) { +func (o *UpdateAccessURL) SetBasePath(bp string) { o._basePath = bp } // Build a url path and query string -func (o *OauthAuthenticateURL) Build() (*url.URL, error) { +func (o *UpdateAccessURL) Build() (*url.URL, error) { var _result url.URL - var _path = "/oauth/authorize" + var _path = "/access" _basePath := o._basePath if _basePath == "" { @@ -48,28 +43,11 @@ func (o *OauthAuthenticateURL) Build() (*url.URL, error) { } _result.Path = golangswaggerpaths.Join(_basePath, _path) - qs := make(url.Values) - - codeQ := o.Code - if codeQ != "" { - qs.Set("code", codeQ) - } - - var stateQ string - if o.State != nil { - stateQ = *o.State - } - if stateQ != "" { - qs.Set("state", stateQ) - } - - _result.RawQuery = qs.Encode() - return &_result, nil } // Must is a helper function to panic when the url builder returns an error -func (o *OauthAuthenticateURL) Must(u *url.URL, err error) *url.URL { +func (o *UpdateAccessURL) Must(u *url.URL, err error) *url.URL { if err != nil { panic(err) } @@ -80,17 +58,17 @@ func (o *OauthAuthenticateURL) Must(u *url.URL, err error) *url.URL { } // String returns the string representation of the path with query string -func (o *OauthAuthenticateURL) String() string { +func (o *UpdateAccessURL) String() string { return o.Must(o.Build()).String() } // BuildFull builds a full url with scheme, host, path and query string -func (o *OauthAuthenticateURL) BuildFull(scheme, host string) (*url.URL, error) { +func (o *UpdateAccessURL) BuildFull(scheme, host string) (*url.URL, error) { if scheme == "" { - return nil, errors.New("scheme is required for a full url on OauthAuthenticateURL") + return nil, errors.New("scheme is required for a full url on UpdateAccessURL") } if host == "" { - return nil, errors.New("host is required for a full url on OauthAuthenticateURL") + return nil, errors.New("host is required for a full url on UpdateAccessURL") } base, err := o.Build() @@ -104,6 +82,6 @@ func (o *OauthAuthenticateURL) BuildFull(scheme, host string) (*url.URL, error) } // StringFull returns the string representation of a complete url -func (o *OauthAuthenticateURL) StringFull(scheme, host string) string { +func (o *UpdateAccessURL) StringFull(scheme, host string) string { return o.Must(o.BuildFull(scheme, host)).String() } diff --git a/rest_server_zrok/operations/share/update_share.go b/rest_server_zrok/operations/share/update_share.go index dc702392..554938a6 100644 --- a/rest_server_zrok/operations/share/update_share.go +++ b/rest_server_zrok/operations/share/update_share.go @@ -6,9 +6,12 @@ package share // Editing this file might prove futile when you re-run the generate command import ( + "context" "net/http" "github.com/go-openapi/runtime/middleware" + "github.com/go-openapi/strfmt" + "github.com/go-openapi/swag" "github.com/openziti/zrok/rest_model_zrok" ) @@ -69,3 +72,49 @@ func (o *UpdateShare) ServeHTTP(rw http.ResponseWriter, r *http.Request) { o.Context.Respond(rw, r, route.Produces, route, res) } + +// UpdateShareBody update share body +// +// swagger:model UpdateShareBody +type UpdateShareBody struct { + + // add access grants + AddAccessGrants []string `json:"addAccessGrants"` + + // backend proxy endpoint + BackendProxyEndpoint string `json:"backendProxyEndpoint,omitempty"` + + // remove access grants + RemoveAccessGrants []string `json:"removeAccessGrants"` + + // share token + ShareToken string `json:"shareToken,omitempty"` +} + +// Validate validates this update share body +func (o *UpdateShareBody) Validate(formats strfmt.Registry) error { + return nil +} + +// ContextValidate validates this update share body based on context it is used +func (o *UpdateShareBody) ContextValidate(ctx context.Context, formats strfmt.Registry) error { + return nil +} + +// MarshalBinary interface implementation +func (o *UpdateShareBody) MarshalBinary() ([]byte, error) { + if o == nil { + return nil, nil + } + return swag.WriteJSON(o) +} + +// UnmarshalBinary interface implementation +func (o *UpdateShareBody) UnmarshalBinary(b []byte) error { + var res UpdateShareBody + if err := swag.ReadJSON(b, &res); err != nil { + return err + } + *o = res + return nil +} diff --git a/rest_server_zrok/operations/share/update_share_parameters.go b/rest_server_zrok/operations/share/update_share_parameters.go index 37538e36..3076f9a4 100644 --- a/rest_server_zrok/operations/share/update_share_parameters.go +++ b/rest_server_zrok/operations/share/update_share_parameters.go @@ -12,8 +12,6 @@ import ( "github.com/go-openapi/runtime" "github.com/go-openapi/runtime/middleware" "github.com/go-openapi/validate" - - "github.com/openziti/zrok/rest_model_zrok" ) // NewUpdateShareParams creates a new UpdateShareParams object @@ -36,7 +34,7 @@ type UpdateShareParams struct { /* In: body */ - Body *rest_model_zrok.UpdateShareRequest + Body UpdateShareBody } // BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface @@ -50,7 +48,7 @@ func (o *UpdateShareParams) BindRequest(r *http.Request, route *middleware.Match if runtime.HasBody(r) { defer r.Body.Close() - var body rest_model_zrok.UpdateShareRequest + var body UpdateShareBody if err := route.Consumer.Consume(r.Body, &body); err != nil { res = append(res, errors.NewParseError("body", "body", "", err)) } else { @@ -65,7 +63,7 @@ func (o *UpdateShareParams) BindRequest(r *http.Request, route *middleware.Match } if len(res) == 0 { - o.Body = &body + o.Body = body } } } diff --git a/rest_server_zrok/operations/zrok_api.go b/rest_server_zrok/operations/zrok_api.go index defdbf97..8a238339 100644 --- a/rest_server_zrok/operations/zrok_api.go +++ b/rest_server_zrok/operations/zrok_api.go @@ -58,6 +58,9 @@ func NewZrokAPI(spec *loads.Document) *ZrokAPI { AccountChangePasswordHandler: account.ChangePasswordHandlerFunc(func(params account.ChangePasswordParams, principal *rest_model_zrok.Principal) middleware.Responder { return middleware.NotImplemented("operation account.ChangePassword has not yet been implemented") }), + MetadataClientVersionCheckHandler: metadata.ClientVersionCheckHandlerFunc(func(params metadata.ClientVersionCheckParams) middleware.Responder { + return middleware.NotImplemented("operation metadata.ClientVersionCheck has not yet been implemented") + }), MetadataConfigurationHandler: metadata.ConfigurationHandlerFunc(func(params metadata.ConfigurationParams) middleware.Responder { return middleware.NotImplemented("operation metadata.Configuration has not yet been implemented") }), @@ -106,6 +109,9 @@ func NewZrokAPI(spec *loads.Document) *ZrokAPI { MetadataGetShareMetricsHandler: metadata.GetShareMetricsHandlerFunc(func(params metadata.GetShareMetricsParams, principal *rest_model_zrok.Principal) middleware.Responder { return middleware.NotImplemented("operation metadata.GetShareMetrics has not yet been implemented") }), + MetadataGetSparklinesHandler: metadata.GetSparklinesHandlerFunc(func(params metadata.GetSparklinesParams, principal *rest_model_zrok.Principal) middleware.Responder { + return middleware.NotImplemented("operation metadata.GetSparklines has not yet been implemented") + }), AdminGrantsHandler: admin.GrantsHandlerFunc(func(params admin.GrantsParams, principal *rest_model_zrok.Principal) middleware.Responder { return middleware.NotImplemented("operation admin.Grants has not yet been implemented") }), @@ -139,8 +145,8 @@ func NewZrokAPI(spec *loads.Document) *ZrokAPI { MetadataOverviewHandler: metadata.OverviewHandlerFunc(func(params metadata.OverviewParams, principal *rest_model_zrok.Principal) middleware.Responder { return middleware.NotImplemented("operation metadata.Overview has not yet been implemented") }), - AccountRegenerateTokenHandler: account.RegenerateTokenHandlerFunc(func(params account.RegenerateTokenParams, principal *rest_model_zrok.Principal) middleware.Responder { - return middleware.NotImplemented("operation account.RegenerateToken has not yet been implemented") + AccountRegenerateAccountTokenHandler: account.RegenerateAccountTokenHandlerFunc(func(params account.RegenerateAccountTokenParams, principal *rest_model_zrok.Principal) middleware.Responder { + return middleware.NotImplemented("operation account.RegenerateAccountToken has not yet been implemented") }), AccountRegisterHandler: account.RegisterHandlerFunc(func(params account.RegisterParams) middleware.Responder { return middleware.NotImplemented("operation account.Register has not yet been implemented") @@ -163,6 +169,9 @@ func NewZrokAPI(spec *loads.Document) *ZrokAPI { ShareUnshareHandler: share.UnshareHandlerFunc(func(params share.UnshareParams, principal *rest_model_zrok.Principal) middleware.Responder { return middleware.NotImplemented("operation share.Unshare has not yet been implemented") }), + ShareUpdateAccessHandler: share.UpdateAccessHandlerFunc(func(params share.UpdateAccessParams, principal *rest_model_zrok.Principal) middleware.Responder { + return middleware.NotImplemented("operation share.UpdateAccess has not yet been implemented") + }), AdminUpdateFrontendHandler: admin.UpdateFrontendHandlerFunc(func(params admin.UpdateFrontendParams, principal *rest_model_zrok.Principal) middleware.Responder { return middleware.NotImplemented("operation admin.UpdateFrontend has not yet been implemented") }), @@ -231,6 +240,8 @@ type ZrokAPI struct { AdminAddOrganizationMemberHandler admin.AddOrganizationMemberHandler // AccountChangePasswordHandler sets the operation handler for the change password operation AccountChangePasswordHandler account.ChangePasswordHandler + // MetadataClientVersionCheckHandler sets the operation handler for the client version check operation + MetadataClientVersionCheckHandler metadata.ClientVersionCheckHandler // MetadataConfigurationHandler sets the operation handler for the configuration operation MetadataConfigurationHandler metadata.ConfigurationHandler // AdminCreateAccountHandler sets the operation handler for the create account operation @@ -263,6 +274,8 @@ type ZrokAPI struct { MetadataGetShareDetailHandler metadata.GetShareDetailHandler // MetadataGetShareMetricsHandler sets the operation handler for the get share metrics operation MetadataGetShareMetricsHandler metadata.GetShareMetricsHandler + // MetadataGetSparklinesHandler sets the operation handler for the get sparklines operation + MetadataGetSparklinesHandler metadata.GetSparklinesHandler // AdminGrantsHandler sets the operation handler for the grants operation AdminGrantsHandler admin.GrantsHandler // AccountInviteHandler sets the operation handler for the invite operation @@ -285,8 +298,8 @@ type ZrokAPI struct { MetadataOrgAccountOverviewHandler metadata.OrgAccountOverviewHandler // MetadataOverviewHandler sets the operation handler for the overview operation MetadataOverviewHandler metadata.OverviewHandler - // AccountRegenerateTokenHandler sets the operation handler for the regenerate token operation - AccountRegenerateTokenHandler account.RegenerateTokenHandler + // AccountRegenerateAccountTokenHandler sets the operation handler for the regenerate account token operation + AccountRegenerateAccountTokenHandler account.RegenerateAccountTokenHandler // AccountRegisterHandler sets the operation handler for the register operation AccountRegisterHandler account.RegisterHandler // AdminRemoveOrganizationMemberHandler sets the operation handler for the remove organization member operation @@ -301,6 +314,8 @@ type ZrokAPI struct { ShareUnaccessHandler share.UnaccessHandler // ShareUnshareHandler sets the operation handler for the unshare operation ShareUnshareHandler share.UnshareHandler + // ShareUpdateAccessHandler sets the operation handler for the update access operation + ShareUpdateAccessHandler share.UpdateAccessHandler // AdminUpdateFrontendHandler sets the operation handler for the update frontend operation AdminUpdateFrontendHandler admin.UpdateFrontendHandler // ShareUpdateShareHandler sets the operation handler for the update share operation @@ -399,6 +414,9 @@ func (o *ZrokAPI) Validate() error { if o.AccountChangePasswordHandler == nil { unregistered = append(unregistered, "account.ChangePasswordHandler") } + if o.MetadataClientVersionCheckHandler == nil { + unregistered = append(unregistered, "metadata.ClientVersionCheckHandler") + } if o.MetadataConfigurationHandler == nil { unregistered = append(unregistered, "metadata.ConfigurationHandler") } @@ -447,6 +465,9 @@ func (o *ZrokAPI) Validate() error { if o.MetadataGetShareMetricsHandler == nil { unregistered = append(unregistered, "metadata.GetShareMetricsHandler") } + if o.MetadataGetSparklinesHandler == nil { + unregistered = append(unregistered, "metadata.GetSparklinesHandler") + } if o.AdminGrantsHandler == nil { unregistered = append(unregistered, "admin.GrantsHandler") } @@ -480,8 +501,8 @@ func (o *ZrokAPI) Validate() error { if o.MetadataOverviewHandler == nil { unregistered = append(unregistered, "metadata.OverviewHandler") } - if o.AccountRegenerateTokenHandler == nil { - unregistered = append(unregistered, "account.RegenerateTokenHandler") + if o.AccountRegenerateAccountTokenHandler == nil { + unregistered = append(unregistered, "account.RegenerateAccountTokenHandler") } if o.AccountRegisterHandler == nil { unregistered = append(unregistered, "account.RegisterHandler") @@ -504,6 +525,9 @@ func (o *ZrokAPI) Validate() error { if o.ShareUnshareHandler == nil { unregistered = append(unregistered, "share.UnshareHandler") } + if o.ShareUpdateAccessHandler == nil { + unregistered = append(unregistered, "share.UpdateAccessHandler") + } if o.AdminUpdateFrontendHandler == nil { unregistered = append(unregistered, "admin.UpdateFrontendHandler") } @@ -627,6 +651,10 @@ func (o *ZrokAPI) initHandlerCache() { o.handlers["POST"] = make(map[string]http.Handler) } o.handlers["POST"]["/changePassword"] = account.NewChangePassword(o.context, o.AccountChangePasswordHandler) + if o.handlers["POST"] == nil { + o.handlers["POST"] = make(map[string]http.Handler) + } + o.handlers["POST"]["/version"] = metadata.NewClientVersionCheck(o.context, o.MetadataClientVersionCheckHandler) if o.handlers["GET"] == nil { o.handlers["GET"] = make(map[string]http.Handler) } @@ -682,15 +710,19 @@ func (o *ZrokAPI) initHandlerCache() { if o.handlers["GET"] == nil { o.handlers["GET"] = make(map[string]http.Handler) } - o.handlers["GET"]["/detail/frontend/{feId}"] = metadata.NewGetFrontendDetail(o.context, o.MetadataGetFrontendDetailHandler) + o.handlers["GET"]["/detail/frontend/{frontendId}"] = metadata.NewGetFrontendDetail(o.context, o.MetadataGetFrontendDetailHandler) if o.handlers["GET"] == nil { o.handlers["GET"] = make(map[string]http.Handler) } - o.handlers["GET"]["/detail/share/{shrToken}"] = metadata.NewGetShareDetail(o.context, o.MetadataGetShareDetailHandler) + o.handlers["GET"]["/detail/share/{shareToken}"] = metadata.NewGetShareDetail(o.context, o.MetadataGetShareDetailHandler) if o.handlers["GET"] == nil { o.handlers["GET"] = make(map[string]http.Handler) } - o.handlers["GET"]["/metrics/share/{shrToken}"] = metadata.NewGetShareMetrics(o.context, o.MetadataGetShareMetricsHandler) + o.handlers["GET"]["/metrics/share/{shareToken}"] = metadata.NewGetShareMetrics(o.context, o.MetadataGetShareMetricsHandler) + if o.handlers["POST"] == nil { + o.handlers["POST"] = make(map[string]http.Handler) + } + o.handlers["POST"]["/sparklines"] = metadata.NewGetSparklines(o.context, o.MetadataGetSparklinesHandler) if o.handlers["POST"] == nil { o.handlers["POST"] = make(map[string]http.Handler) } @@ -738,7 +770,7 @@ func (o *ZrokAPI) initHandlerCache() { if o.handlers["POST"] == nil { o.handlers["POST"] = make(map[string]http.Handler) } - o.handlers["POST"]["/regenerateToken"] = account.NewRegenerateToken(o.context, o.AccountRegenerateTokenHandler) + o.handlers["POST"]["/regenerateAccountToken"] = account.NewRegenerateAccountToken(o.context, o.AccountRegenerateAccountTokenHandler) if o.handlers["POST"] == nil { o.handlers["POST"] = make(map[string]http.Handler) } @@ -770,6 +802,10 @@ func (o *ZrokAPI) initHandlerCache() { if o.handlers["PATCH"] == nil { o.handlers["PATCH"] = make(map[string]http.Handler) } + o.handlers["PATCH"]["/access"] = share.NewUpdateAccess(o.context, o.ShareUpdateAccessHandler) + if o.handlers["PATCH"] == nil { + o.handlers["PATCH"] = make(map[string]http.Handler) + } o.handlers["PATCH"]["/frontend"] = admin.NewUpdateFrontend(o.context, o.AdminUpdateFrontendHandler) if o.handlers["PATCH"] == nil { o.handlers["PATCH"] = make(map[string]http.Handler) diff --git a/sdk/golang/sdk/access.go b/sdk/golang/sdk/access.go index 46c5af4e..56c1c2df 100644 --- a/sdk/golang/sdk/access.go +++ b/sdk/golang/sdk/access.go @@ -4,7 +4,6 @@ import ( httptransport "github.com/go-openapi/runtime/client" "github.com/openziti/zrok/environment/env_core" "github.com/openziti/zrok/rest_client_zrok/share" - "github.com/openziti/zrok/rest_model_zrok" "github.com/pkg/errors" ) @@ -14,10 +13,8 @@ func CreateAccess(root env_core.Root, request *AccessRequest) (*Access, error) { } out := share.NewAccessParams() - out.Body = &rest_model_zrok.AccessRequest{ - ShrToken: request.ShareToken, - EnvZID: root.Environment().ZitiIdentity, - } + out.Body.ShareToken = request.ShareToken + out.Body.EnvZID = root.Environment().ZitiIdentity zrok, err := root.Client() if err != nil { @@ -35,11 +32,9 @@ func CreateAccess(root env_core.Root, request *AccessRequest) (*Access, error) { func DeleteAccess(root env_core.Root, acc *Access) error { out := share.NewUnaccessParams() - out.Body = &rest_model_zrok.UnaccessRequest{ - FrontendToken: acc.Token, - ShrToken: acc.ShareToken, - EnvZID: root.Environment().ZitiIdentity, - } + out.Body.FrontendToken = acc.Token + out.Body.ShareToken = acc.ShareToken + out.Body.EnvZID = root.Environment().ZitiIdentity zrok, err := root.Client() if err != nil { diff --git a/sdk/golang/sdk/share.go b/sdk/golang/sdk/share.go index 386cb601..4184c413 100644 --- a/sdk/golang/sdk/share.go +++ b/sdk/golang/sdk/share.go @@ -58,7 +58,7 @@ func CreateShare(root env_core.Root, request *ShareRequest) (*Share, error) { } return &Share{ - Token: in.Payload.ShrToken, + Token: in.Payload.ShareToken, FrontendEndpoints: in.Payload.FrontendProxyEndpoints, }, nil } @@ -97,10 +97,8 @@ func newPublicShare(root env_core.Root, request *ShareRequest) *share.ShareParam func DeleteShare(root env_core.Root, shr *Share) error { req := share.NewUnshareParams() - req.Body = &rest_model_zrok.UnshareRequest{ - EnvZID: root.Environment().ZitiIdentity, - ShrToken: shr.Token, - } + req.Body.EnvZID = root.Environment().ZitiIdentity + req.Body.ShareToken = shr.Token zrok, err := root.Client() if err != nil { diff --git a/sdk/nodejs/sdk/src/zrok/api/.openapi-generator-ignore b/sdk/nodejs/sdk/src/zrok/api/.openapi-generator-ignore index 9a14b603..7484ee59 100644 --- a/sdk/nodejs/sdk/src/zrok/api/.openapi-generator-ignore +++ b/sdk/nodejs/sdk/src/zrok/api/.openapi-generator-ignore @@ -21,4 +21,3 @@ #docs/*.md # Then explicitly reverse the ignore rule for a single file: #!docs/README.md -git_push.sh \ No newline at end of file diff --git a/sdk/nodejs/sdk/src/zrok/api/.openapi-generator/FILES b/sdk/nodejs/sdk/src/zrok/api/.openapi-generator/FILES index 1e696e01..3e4a4983 100644 --- a/sdk/nodejs/sdk/src/zrok/api/.openapi-generator/FILES +++ b/sdk/nodejs/sdk/src/zrok/api/.openapi-generator/FILES @@ -6,28 +6,30 @@ api/apis.ts api/environmentApi.ts api/metadataApi.ts api/shareApi.ts +git_push.sh +model/access201Response.ts model/accessRequest.ts -model/accessResponse.ts model/addOrganizationMemberRequest.ts model/authUser.ts model/changePasswordRequest.ts +model/clientVersionCheckRequest.ts model/configuration.ts -model/createAccountRequest.ts +model/createFrontend201Response.ts model/createFrontendRequest.ts -model/createFrontendResponse.ts model/createIdentity201Response.ts model/createIdentityRequest.ts +model/createOrganization201Response.ts model/createOrganizationRequest.ts -model/deleteFrontendRequest.ts model/disableRequest.ts model/enableRequest.ts -model/enableResponse.ts model/environment.ts model/environmentAndResources.ts model/frontend.ts -model/grantsRequest.ts +model/getSparklines200Response.ts +model/getSparklinesRequest.ts model/inviteRequest.ts model/inviteTokenGenerateRequest.ts +model/listFrontends200ResponseInner.ts model/listMemberships200Response.ts model/listMemberships200ResponseMembershipsInner.ts model/listOrganizationMembers200Response.ts @@ -39,13 +41,10 @@ model/metrics.ts model/metricsSample.ts model/models.ts model/overview.ts -model/passwordRequirements.ts model/principal.ts -model/publicFrontend.ts -model/regenerateToken200Response.ts -model/regenerateTokenRequest.ts +model/regenerateAccountToken200Response.ts +model/regenerateAccountTokenRequest.ts model/registerRequest.ts -model/registerResponse.ts model/removeOrganizationMemberRequest.ts model/resetPasswordRequest.ts model/share.ts @@ -54,7 +53,8 @@ model/shareResponse.ts model/sparkDataSample.ts model/unaccessRequest.ts model/unshareRequest.ts +model/updateAccessRequest.ts model/updateFrontendRequest.ts model/updateShareRequest.ts +model/verify200Response.ts model/verifyRequest.ts -model/verifyResponse.ts diff --git a/sdk/nodejs/sdk/src/zrok/api/api/accountApi.ts b/sdk/nodejs/sdk/src/zrok/api/api/accountApi.ts index bd0b1bb5..3ec287ec 100644 --- a/sdk/nodejs/sdk/src/zrok/api/api/accountApi.ts +++ b/sdk/nodejs/sdk/src/zrok/api/api/accountApi.ts @@ -2,7 +2,7 @@ * zrok * zrok client access * - * The version of the OpenAPI document: 0.3.0 + * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). @@ -18,13 +18,12 @@ import http from 'http'; import { ChangePasswordRequest } from '../model/changePasswordRequest'; import { InviteRequest } from '../model/inviteRequest'; import { LoginRequest } from '../model/loginRequest'; -import { RegenerateToken200Response } from '../model/regenerateToken200Response'; -import { RegenerateTokenRequest } from '../model/regenerateTokenRequest'; +import { RegenerateAccountToken200Response } from '../model/regenerateAccountToken200Response'; +import { RegenerateAccountTokenRequest } from '../model/regenerateAccountTokenRequest'; import { RegisterRequest } from '../model/registerRequest'; -import { RegisterResponse } from '../model/registerResponse'; import { ResetPasswordRequest } from '../model/resetPasswordRequest'; +import { Verify200Response } from '../model/verify200Response'; import { VerifyRequest } from '../model/verifyRequest'; -import { VerifyResponse } from '../model/verifyResponse'; import { ObjectSerializer, Authentication, VoidAuth, Interceptor } from '../model/models'; import { HttpBasicAuth, HttpBearerAuth, ApiKeyAuth, OAuth } from '../model/models'; @@ -292,8 +291,8 @@ export class AccountApi { * * @param body */ - public async regenerateToken (body?: RegenerateTokenRequest, options: {headers: {[name: string]: string}} = {headers: {}}) : Promise<{ response: http.IncomingMessage; body: RegenerateToken200Response; }> { - const localVarPath = this.basePath + '/regenerateToken'; + public async regenerateAccountToken (body?: RegenerateAccountTokenRequest, options: {headers: {[name: string]: string}} = {headers: {}}) : Promise<{ response: http.IncomingMessage; body: RegenerateAccountToken200Response; }> { + const localVarPath = this.basePath + '/regenerateAccountToken'; let localVarQueryParameters: any = {}; let localVarHeaderParams: any = (Object).assign({}, this._defaultHeaders); const produces = ['application/zrok.v1+json']; @@ -316,7 +315,7 @@ export class AccountApi { uri: localVarPath, useQuerystring: this._useQuerystring, json: true, - body: ObjectSerializer.serialize(body, "RegenerateTokenRequest") + body: ObjectSerializer.serialize(body, "RegenerateAccountTokenRequest") }; let authenticationPromise = Promise.resolve(); @@ -338,13 +337,13 @@ export class AccountApi { localVarRequestOptions.form = localVarFormParams; } } - return new Promise<{ response: http.IncomingMessage; body: RegenerateToken200Response; }>((resolve, reject) => { + return new Promise<{ response: http.IncomingMessage; body: RegenerateAccountToken200Response; }>((resolve, reject) => { localVarRequest(localVarRequestOptions, (error, response, body) => { if (error) { reject(error); } else { if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) { - body = ObjectSerializer.deserialize(body, "RegenerateToken200Response"); + body = ObjectSerializer.deserialize(body, "RegenerateAccountToken200Response"); resolve({ response: response, body: body }); } else { reject(new HttpError(response, body, response.statusCode)); @@ -358,7 +357,7 @@ export class AccountApi { * * @param body */ - public async register (body?: RegisterRequest, options: {headers: {[name: string]: string}} = {headers: {}}) : Promise<{ response: http.IncomingMessage; body: RegisterResponse; }> { + public async register (body?: RegisterRequest, options: {headers: {[name: string]: string}} = {headers: {}}) : Promise<{ response: http.IncomingMessage; body: RegenerateAccountToken200Response; }> { const localVarPath = this.basePath + '/register'; let localVarQueryParameters: any = {}; let localVarHeaderParams: any = (Object).assign({}, this._defaultHeaders); @@ -401,13 +400,13 @@ export class AccountApi { localVarRequestOptions.form = localVarFormParams; } } - return new Promise<{ response: http.IncomingMessage; body: RegisterResponse; }>((resolve, reject) => { + return new Promise<{ response: http.IncomingMessage; body: RegenerateAccountToken200Response; }>((resolve, reject) => { localVarRequest(localVarRequestOptions, (error, response, body) => { if (error) { reject(error); } else { if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) { - body = ObjectSerializer.deserialize(body, "RegisterResponse"); + body = ObjectSerializer.deserialize(body, "RegenerateAccountToken200Response"); resolve({ response: response, body: body }); } else { reject(new HttpError(response, body, response.statusCode)); @@ -483,7 +482,7 @@ export class AccountApi { * * @param body */ - public async resetPasswordRequest (body?: RegenerateTokenRequest, options: {headers: {[name: string]: string}} = {headers: {}}) : Promise<{ response: http.IncomingMessage; body?: any; }> { + public async resetPasswordRequest (body?: RegenerateAccountTokenRequest, options: {headers: {[name: string]: string}} = {headers: {}}) : Promise<{ response: http.IncomingMessage; body?: any; }> { const localVarPath = this.basePath + '/resetPasswordRequest'; let localVarQueryParameters: any = {}; let localVarHeaderParams: any = (Object).assign({}, this._defaultHeaders); @@ -500,7 +499,7 @@ export class AccountApi { uri: localVarPath, useQuerystring: this._useQuerystring, json: true, - body: ObjectSerializer.serialize(body, "RegenerateTokenRequest") + body: ObjectSerializer.serialize(body, "RegenerateAccountTokenRequest") }; let authenticationPromise = Promise.resolve(); @@ -538,7 +537,7 @@ export class AccountApi { * * @param body */ - public async verify (body?: VerifyRequest, options: {headers: {[name: string]: string}} = {headers: {}}) : Promise<{ response: http.IncomingMessage; body: VerifyResponse; }> { + public async verify (body?: VerifyRequest, options: {headers: {[name: string]: string}} = {headers: {}}) : Promise<{ response: http.IncomingMessage; body: Verify200Response; }> { const localVarPath = this.basePath + '/verify'; let localVarQueryParameters: any = {}; let localVarHeaderParams: any = (Object).assign({}, this._defaultHeaders); @@ -581,13 +580,13 @@ export class AccountApi { localVarRequestOptions.form = localVarFormParams; } } - return new Promise<{ response: http.IncomingMessage; body: VerifyResponse; }>((resolve, reject) => { + return new Promise<{ response: http.IncomingMessage; body: Verify200Response; }>((resolve, reject) => { localVarRequest(localVarRequestOptions, (error, response, body) => { if (error) { reject(error); } else { if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) { - body = ObjectSerializer.deserialize(body, "VerifyResponse"); + body = ObjectSerializer.deserialize(body, "Verify200Response"); resolve({ response: response, body: body }); } else { reject(new HttpError(response, body, response.statusCode)); diff --git a/sdk/nodejs/sdk/src/zrok/api/api/adminApi.ts b/sdk/nodejs/sdk/src/zrok/api/api/adminApi.ts index 20ece673..1238b957 100644 --- a/sdk/nodejs/sdk/src/zrok/api/api/adminApi.ts +++ b/sdk/nodejs/sdk/src/zrok/api/api/adminApi.ts @@ -2,7 +2,7 @@ * zrok * zrok client access * - * The version of the OpenAPI document: 0.3.0 + * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). @@ -16,21 +16,21 @@ import http from 'http'; /* tslint:disable:no-unused-locals */ import { AddOrganizationMemberRequest } from '../model/addOrganizationMemberRequest'; -import { CreateAccountRequest } from '../model/createAccountRequest'; +import { CreateFrontend201Response } from '../model/createFrontend201Response'; import { CreateFrontendRequest } from '../model/createFrontendRequest'; -import { CreateFrontendResponse } from '../model/createFrontendResponse'; import { CreateIdentity201Response } from '../model/createIdentity201Response'; import { CreateIdentityRequest } from '../model/createIdentityRequest'; +import { CreateOrganization201Response } from '../model/createOrganization201Response'; import { CreateOrganizationRequest } from '../model/createOrganizationRequest'; -import { DeleteFrontendRequest } from '../model/deleteFrontendRequest'; -import { GrantsRequest } from '../model/grantsRequest'; import { InviteTokenGenerateRequest } from '../model/inviteTokenGenerateRequest'; +import { ListFrontends200ResponseInner } from '../model/listFrontends200ResponseInner'; import { ListOrganizationMembers200Response } from '../model/listOrganizationMembers200Response'; import { ListOrganizations200Response } from '../model/listOrganizations200Response'; -import { PublicFrontend } from '../model/publicFrontend'; -import { RegenerateToken200Response } from '../model/regenerateToken200Response'; +import { LoginRequest } from '../model/loginRequest'; +import { RegenerateAccountToken200Response } from '../model/regenerateAccountToken200Response'; import { RemoveOrganizationMemberRequest } from '../model/removeOrganizationMemberRequest'; import { UpdateFrontendRequest } from '../model/updateFrontendRequest'; +import { Verify200Response } from '../model/verify200Response'; import { ObjectSerializer, Authentication, VoidAuth, Interceptor } from '../model/models'; import { HttpBasicAuth, HttpBearerAuth, ApiKeyAuth, OAuth } from '../model/models'; @@ -166,7 +166,7 @@ export class AdminApi { * * @param body */ - public async createAccount (body?: CreateAccountRequest, options: {headers: {[name: string]: string}} = {headers: {}}) : Promise<{ response: http.IncomingMessage; body: RegenerateToken200Response; }> { + public async createAccount (body?: LoginRequest, options: {headers: {[name: string]: string}} = {headers: {}}) : Promise<{ response: http.IncomingMessage; body: RegenerateAccountToken200Response; }> { const localVarPath = this.basePath + '/account'; let localVarQueryParameters: any = {}; let localVarHeaderParams: any = (Object).assign({}, this._defaultHeaders); @@ -190,7 +190,7 @@ export class AdminApi { uri: localVarPath, useQuerystring: this._useQuerystring, json: true, - body: ObjectSerializer.serialize(body, "CreateAccountRequest") + body: ObjectSerializer.serialize(body, "LoginRequest") }; let authenticationPromise = Promise.resolve(); @@ -212,13 +212,13 @@ export class AdminApi { localVarRequestOptions.form = localVarFormParams; } } - return new Promise<{ response: http.IncomingMessage; body: RegenerateToken200Response; }>((resolve, reject) => { + return new Promise<{ response: http.IncomingMessage; body: RegenerateAccountToken200Response; }>((resolve, reject) => { localVarRequest(localVarRequestOptions, (error, response, body) => { if (error) { reject(error); } else { if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) { - body = ObjectSerializer.deserialize(body, "RegenerateToken200Response"); + body = ObjectSerializer.deserialize(body, "RegenerateAccountToken200Response"); resolve({ response: response, body: body }); } else { reject(new HttpError(response, body, response.statusCode)); @@ -232,7 +232,7 @@ export class AdminApi { * * @param body */ - public async createFrontend (body?: CreateFrontendRequest, options: {headers: {[name: string]: string}} = {headers: {}}) : Promise<{ response: http.IncomingMessage; body: CreateFrontendResponse; }> { + public async createFrontend (body?: CreateFrontendRequest, options: {headers: {[name: string]: string}} = {headers: {}}) : Promise<{ response: http.IncomingMessage; body: CreateFrontend201Response; }> { const localVarPath = this.basePath + '/frontend'; let localVarQueryParameters: any = {}; let localVarHeaderParams: any = (Object).assign({}, this._defaultHeaders); @@ -278,13 +278,13 @@ export class AdminApi { localVarRequestOptions.form = localVarFormParams; } } - return new Promise<{ response: http.IncomingMessage; body: CreateFrontendResponse; }>((resolve, reject) => { + return new Promise<{ response: http.IncomingMessage; body: CreateFrontend201Response; }>((resolve, reject) => { localVarRequest(localVarRequestOptions, (error, response, body) => { if (error) { reject(error); } else { if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) { - body = ObjectSerializer.deserialize(body, "CreateFrontendResponse"); + body = ObjectSerializer.deserialize(body, "CreateFrontend201Response"); resolve({ response: response, body: body }); } else { reject(new HttpError(response, body, response.statusCode)); @@ -364,7 +364,7 @@ export class AdminApi { * * @param body */ - public async createOrganization (body?: CreateOrganizationRequest, options: {headers: {[name: string]: string}} = {headers: {}}) : Promise<{ response: http.IncomingMessage; body: RegenerateToken200Response; }> { + public async createOrganization (body?: CreateOrganizationRequest, options: {headers: {[name: string]: string}} = {headers: {}}) : Promise<{ response: http.IncomingMessage; body: CreateOrganization201Response; }> { const localVarPath = this.basePath + '/organization'; let localVarQueryParameters: any = {}; let localVarHeaderParams: any = (Object).assign({}, this._defaultHeaders); @@ -410,13 +410,13 @@ export class AdminApi { localVarRequestOptions.form = localVarFormParams; } } - return new Promise<{ response: http.IncomingMessage; body: RegenerateToken200Response; }>((resolve, reject) => { + return new Promise<{ response: http.IncomingMessage; body: CreateOrganization201Response; }>((resolve, reject) => { localVarRequest(localVarRequestOptions, (error, response, body) => { if (error) { reject(error); } else { if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) { - body = ObjectSerializer.deserialize(body, "RegenerateToken200Response"); + body = ObjectSerializer.deserialize(body, "CreateOrganization201Response"); resolve({ response: response, body: body }); } else { reject(new HttpError(response, body, response.statusCode)); @@ -430,7 +430,7 @@ export class AdminApi { * * @param body */ - public async deleteFrontend (body?: DeleteFrontendRequest, options: {headers: {[name: string]: string}} = {headers: {}}) : Promise<{ response: http.IncomingMessage; body?: any; }> { + public async deleteFrontend (body?: CreateFrontend201Response, options: {headers: {[name: string]: string}} = {headers: {}}) : Promise<{ response: http.IncomingMessage; body?: any; }> { const localVarPath = this.basePath + '/frontend'; let localVarQueryParameters: any = {}; let localVarHeaderParams: any = (Object).assign({}, this._defaultHeaders); @@ -447,7 +447,7 @@ export class AdminApi { uri: localVarPath, useQuerystring: this._useQuerystring, json: true, - body: ObjectSerializer.serialize(body, "DeleteFrontendRequest") + body: ObjectSerializer.serialize(body, "CreateFrontend201Response") }; let authenticationPromise = Promise.resolve(); @@ -488,7 +488,7 @@ export class AdminApi { * * @param body */ - public async deleteOrganization (body?: RegenerateToken200Response, options: {headers: {[name: string]: string}} = {headers: {}}) : Promise<{ response: http.IncomingMessage; body?: any; }> { + public async deleteOrganization (body?: CreateOrganization201Response, options: {headers: {[name: string]: string}} = {headers: {}}) : Promise<{ response: http.IncomingMessage; body?: any; }> { const localVarPath = this.basePath + '/organization'; let localVarQueryParameters: any = {}; let localVarHeaderParams: any = (Object).assign({}, this._defaultHeaders); @@ -505,7 +505,7 @@ export class AdminApi { uri: localVarPath, useQuerystring: this._useQuerystring, json: true, - body: ObjectSerializer.serialize(body, "RegenerateToken200Response") + body: ObjectSerializer.serialize(body, "CreateOrganization201Response") }; let authenticationPromise = Promise.resolve(); @@ -546,7 +546,7 @@ export class AdminApi { * * @param body */ - public async grants (body?: GrantsRequest, options: {headers: {[name: string]: string}} = {headers: {}}) : Promise<{ response: http.IncomingMessage; body?: any; }> { + public async grants (body?: Verify200Response, options: {headers: {[name: string]: string}} = {headers: {}}) : Promise<{ response: http.IncomingMessage; body?: any; }> { const localVarPath = this.basePath + '/grants'; let localVarQueryParameters: any = {}; let localVarHeaderParams: any = (Object).assign({}, this._defaultHeaders); @@ -563,7 +563,7 @@ export class AdminApi { uri: localVarPath, useQuerystring: this._useQuerystring, json: true, - body: ObjectSerializer.serialize(body, "GrantsRequest") + body: ObjectSerializer.serialize(body, "Verify200Response") }; let authenticationPromise = Promise.resolve(); @@ -661,7 +661,7 @@ export class AdminApi { /** * */ - public async listFrontends (options: {headers: {[name: string]: string}} = {headers: {}}) : Promise<{ response: http.IncomingMessage; body: Array; }> { + public async listFrontends (options: {headers: {[name: string]: string}} = {headers: {}}) : Promise<{ response: http.IncomingMessage; body: Array; }> { const localVarPath = this.basePath + '/frontends'; let localVarQueryParameters: any = {}; let localVarHeaderParams: any = (Object).assign({}, this._defaultHeaders); @@ -706,13 +706,13 @@ export class AdminApi { localVarRequestOptions.form = localVarFormParams; } } - return new Promise<{ response: http.IncomingMessage; body: Array; }>((resolve, reject) => { + return new Promise<{ response: http.IncomingMessage; body: Array; }>((resolve, reject) => { localVarRequest(localVarRequestOptions, (error, response, body) => { if (error) { reject(error); } else { if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) { - body = ObjectSerializer.deserialize(body, "Array"); + body = ObjectSerializer.deserialize(body, "Array"); resolve({ response: response, body: body }); } else { reject(new HttpError(response, body, response.statusCode)); @@ -726,7 +726,7 @@ export class AdminApi { * * @param body */ - public async listOrganizationMembers (body?: RegenerateToken200Response, options: {headers: {[name: string]: string}} = {headers: {}}) : Promise<{ response: http.IncomingMessage; body: ListOrganizationMembers200Response; }> { + public async listOrganizationMembers (body?: CreateOrganization201Response, options: {headers: {[name: string]: string}} = {headers: {}}) : Promise<{ response: http.IncomingMessage; body: ListOrganizationMembers200Response; }> { const localVarPath = this.basePath + '/organization/list'; let localVarQueryParameters: any = {}; let localVarHeaderParams: any = (Object).assign({}, this._defaultHeaders); @@ -750,7 +750,7 @@ export class AdminApi { uri: localVarPath, useQuerystring: this._useQuerystring, json: true, - body: ObjectSerializer.serialize(body, "RegenerateToken200Response") + body: ObjectSerializer.serialize(body, "CreateOrganization201Response") }; let authenticationPromise = Promise.resolve(); diff --git a/sdk/nodejs/sdk/src/zrok/api/api/environmentApi.ts b/sdk/nodejs/sdk/src/zrok/api/api/environmentApi.ts index 9cc5b910..cacc401e 100644 --- a/sdk/nodejs/sdk/src/zrok/api/api/environmentApi.ts +++ b/sdk/nodejs/sdk/src/zrok/api/api/environmentApi.ts @@ -2,7 +2,7 @@ * zrok * zrok client access * - * The version of the OpenAPI document: 0.3.0 + * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). @@ -15,9 +15,9 @@ import localVarRequest from 'request'; import http from 'http'; /* tslint:disable:no-unused-locals */ +import { CreateIdentity201Response } from '../model/createIdentity201Response'; import { DisableRequest } from '../model/disableRequest'; import { EnableRequest } from '../model/enableRequest'; -import { EnableResponse } from '../model/enableResponse'; import { ObjectSerializer, Authentication, VoidAuth, Interceptor } from '../model/models'; import { HttpBasicAuth, HttpBearerAuth, ApiKeyAuth, OAuth } from '../model/models'; @@ -153,7 +153,7 @@ export class EnvironmentApi { * * @param body */ - public async enable (body?: EnableRequest, options: {headers: {[name: string]: string}} = {headers: {}}) : Promise<{ response: http.IncomingMessage; body: EnableResponse; }> { + public async enable (body?: EnableRequest, options: {headers: {[name: string]: string}} = {headers: {}}) : Promise<{ response: http.IncomingMessage; body: CreateIdentity201Response; }> { const localVarPath = this.basePath + '/enable'; let localVarQueryParameters: any = {}; let localVarHeaderParams: any = (Object).assign({}, this._defaultHeaders); @@ -199,13 +199,13 @@ export class EnvironmentApi { localVarRequestOptions.form = localVarFormParams; } } - return new Promise<{ response: http.IncomingMessage; body: EnableResponse; }>((resolve, reject) => { + return new Promise<{ response: http.IncomingMessage; body: CreateIdentity201Response; }>((resolve, reject) => { localVarRequest(localVarRequestOptions, (error, response, body) => { if (error) { reject(error); } else { if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) { - body = ObjectSerializer.deserialize(body, "EnableResponse"); + body = ObjectSerializer.deserialize(body, "CreateIdentity201Response"); resolve({ response: response, body: body }); } else { reject(new HttpError(response, body, response.statusCode)); diff --git a/sdk/nodejs/sdk/src/zrok/api/api/metadataApi.ts b/sdk/nodejs/sdk/src/zrok/api/api/metadataApi.ts index 4348628c..d86071f3 100644 --- a/sdk/nodejs/sdk/src/zrok/api/api/metadataApi.ts +++ b/sdk/nodejs/sdk/src/zrok/api/api/metadataApi.ts @@ -2,7 +2,7 @@ * zrok * zrok client access * - * The version of the OpenAPI document: 0.3.0 + * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). @@ -15,10 +15,13 @@ import localVarRequest from 'request'; import http from 'http'; /* tslint:disable:no-unused-locals */ +import { ClientVersionCheckRequest } from '../model/clientVersionCheckRequest'; import { Configuration } from '../model/configuration'; import { Environment } from '../model/environment'; import { EnvironmentAndResources } from '../model/environmentAndResources'; import { Frontend } from '../model/frontend'; +import { GetSparklines200Response } from '../model/getSparklines200Response'; +import { GetSparklinesRequest } from '../model/getSparklinesRequest'; import { ListMemberships200Response } from '../model/listMemberships200Response'; import { ListOrganizationMembers200Response } from '../model/listOrganizationMembers200Response'; import { Metrics } from '../model/metrics'; @@ -97,6 +100,68 @@ export class MetadataApi { this.interceptors.push(interceptor); } + /** + * + * @param body + */ + public async clientVersionCheck (body?: ClientVersionCheckRequest, options: {headers: {[name: string]: string}} = {headers: {}}) : Promise<{ response: http.IncomingMessage; body?: any; }> { + const localVarPath = this.basePath + '/version'; + let localVarQueryParameters: any = {}; + let localVarHeaderParams: any = (Object).assign({}, this._defaultHeaders); + const produces = ['application/zrok.v1+json']; + // give precedence to 'application/json' + if (produces.indexOf('application/json') >= 0) { + localVarHeaderParams.Accept = 'application/json'; + } else { + localVarHeaderParams.Accept = produces.join(','); + } + let localVarFormParams: any = {}; + + (Object).assign(localVarHeaderParams, options.headers); + + let localVarUseFormData = false; + + let localVarRequestOptions: localVarRequest.Options = { + method: 'POST', + qs: localVarQueryParameters, + headers: localVarHeaderParams, + uri: localVarPath, + useQuerystring: this._useQuerystring, + json: true, + body: ObjectSerializer.serialize(body, "ClientVersionCheckRequest") + }; + + let authenticationPromise = Promise.resolve(); + authenticationPromise = authenticationPromise.then(() => this.authentications.default.applyToRequest(localVarRequestOptions)); + + let interceptorPromise = authenticationPromise; + for (const interceptor of this.interceptors) { + interceptorPromise = interceptorPromise.then(() => interceptor(localVarRequestOptions)); + } + + return interceptorPromise.then(() => { + if (Object.keys(localVarFormParams).length) { + if (localVarUseFormData) { + (localVarRequestOptions).formData = localVarFormParams; + } else { + localVarRequestOptions.form = localVarFormParams; + } + } + return new Promise<{ response: http.IncomingMessage; body?: any; }>((resolve, reject) => { + localVarRequest(localVarRequestOptions, (error, response, body) => { + if (error) { + reject(error); + } else { + if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) { + resolve({ response: response, body: body }); + } else { + reject(new HttpError(response, body, response.statusCode)); + } + } + }); + }); + }); + } /** * */ @@ -440,11 +505,11 @@ export class MetadataApi { } /** * - * @param feId + * @param frontendId */ - public async getFrontendDetail (feId: number, options: {headers: {[name: string]: string}} = {headers: {}}) : Promise<{ response: http.IncomingMessage; body: Frontend; }> { - const localVarPath = this.basePath + '/detail/frontend/{feId}' - .replace('{' + 'feId' + '}', encodeURIComponent(String(feId))); + public async getFrontendDetail (frontendId: number, options: {headers: {[name: string]: string}} = {headers: {}}) : Promise<{ response: http.IncomingMessage; body: Frontend; }> { + const localVarPath = this.basePath + '/detail/frontend/{frontendId}' + .replace('{' + 'frontendId' + '}', encodeURIComponent(String(frontendId))); let localVarQueryParameters: any = {}; let localVarHeaderParams: any = (Object).assign({}, this._defaultHeaders); const produces = ['application/zrok.v1+json']; @@ -456,9 +521,9 @@ export class MetadataApi { } let localVarFormParams: any = {}; - // verify required parameter 'feId' is not null or undefined - if (feId === null || feId === undefined) { - throw new Error('Required parameter feId was null or undefined when calling getFrontendDetail.'); + // verify required parameter 'frontendId' is not null or undefined + if (frontendId === null || frontendId === undefined) { + throw new Error('Required parameter frontendId was null or undefined when calling getFrontendDetail.'); } (Object).assign(localVarHeaderParams, options.headers); @@ -511,11 +576,11 @@ export class MetadataApi { } /** * - * @param shrToken + * @param shareToken */ - public async getShareDetail (shrToken: string, options: {headers: {[name: string]: string}} = {headers: {}}) : Promise<{ response: http.IncomingMessage; body: Share; }> { - const localVarPath = this.basePath + '/detail/share/{shrToken}' - .replace('{' + 'shrToken' + '}', encodeURIComponent(String(shrToken))); + public async getShareDetail (shareToken: string, options: {headers: {[name: string]: string}} = {headers: {}}) : Promise<{ response: http.IncomingMessage; body: Share; }> { + const localVarPath = this.basePath + '/detail/share/{shareToken}' + .replace('{' + 'shareToken' + '}', encodeURIComponent(String(shareToken))); let localVarQueryParameters: any = {}; let localVarHeaderParams: any = (Object).assign({}, this._defaultHeaders); const produces = ['application/zrok.v1+json']; @@ -527,9 +592,9 @@ export class MetadataApi { } let localVarFormParams: any = {}; - // verify required parameter 'shrToken' is not null or undefined - if (shrToken === null || shrToken === undefined) { - throw new Error('Required parameter shrToken was null or undefined when calling getShareDetail.'); + // verify required parameter 'shareToken' is not null or undefined + if (shareToken === null || shareToken === undefined) { + throw new Error('Required parameter shareToken was null or undefined when calling getShareDetail.'); } (Object).assign(localVarHeaderParams, options.headers); @@ -582,12 +647,12 @@ export class MetadataApi { } /** * - * @param shrToken + * @param shareToken * @param duration */ - public async getShareMetrics (shrToken: string, duration?: string, options: {headers: {[name: string]: string}} = {headers: {}}) : Promise<{ response: http.IncomingMessage; body: Metrics; }> { - const localVarPath = this.basePath + '/metrics/share/{shrToken}' - .replace('{' + 'shrToken' + '}', encodeURIComponent(String(shrToken))); + public async getShareMetrics (shareToken: string, duration?: string, options: {headers: {[name: string]: string}} = {headers: {}}) : Promise<{ response: http.IncomingMessage; body: Metrics; }> { + const localVarPath = this.basePath + '/metrics/share/{shareToken}' + .replace('{' + 'shareToken' + '}', encodeURIComponent(String(shareToken))); let localVarQueryParameters: any = {}; let localVarHeaderParams: any = (Object).assign({}, this._defaultHeaders); const produces = ['application/zrok.v1+json']; @@ -599,9 +664,9 @@ export class MetadataApi { } let localVarFormParams: any = {}; - // verify required parameter 'shrToken' is not null or undefined - if (shrToken === null || shrToken === undefined) { - throw new Error('Required parameter shrToken was null or undefined when calling getShareMetrics.'); + // verify required parameter 'shareToken' is not null or undefined + if (shareToken === null || shareToken === undefined) { + throw new Error('Required parameter shareToken was null or undefined when calling getShareMetrics.'); } if (duration !== undefined) { @@ -656,6 +721,72 @@ export class MetadataApi { }); }); } + /** + * + * @param body + */ + public async getSparklines (body?: GetSparklinesRequest, options: {headers: {[name: string]: string}} = {headers: {}}) : Promise<{ response: http.IncomingMessage; body: GetSparklines200Response; }> { + const localVarPath = this.basePath + '/sparklines'; + let localVarQueryParameters: any = {}; + let localVarHeaderParams: any = (Object).assign({}, this._defaultHeaders); + const produces = ['application/zrok.v1+json']; + // give precedence to 'application/json' + if (produces.indexOf('application/json') >= 0) { + localVarHeaderParams.Accept = 'application/json'; + } else { + localVarHeaderParams.Accept = produces.join(','); + } + let localVarFormParams: any = {}; + + (Object).assign(localVarHeaderParams, options.headers); + + let localVarUseFormData = false; + + let localVarRequestOptions: localVarRequest.Options = { + method: 'POST', + qs: localVarQueryParameters, + headers: localVarHeaderParams, + uri: localVarPath, + useQuerystring: this._useQuerystring, + json: true, + body: ObjectSerializer.serialize(body, "GetSparklinesRequest") + }; + + let authenticationPromise = Promise.resolve(); + if (this.authentications.key.apiKey) { + authenticationPromise = authenticationPromise.then(() => this.authentications.key.applyToRequest(localVarRequestOptions)); + } + authenticationPromise = authenticationPromise.then(() => this.authentications.default.applyToRequest(localVarRequestOptions)); + + let interceptorPromise = authenticationPromise; + for (const interceptor of this.interceptors) { + interceptorPromise = interceptorPromise.then(() => interceptor(localVarRequestOptions)); + } + + return interceptorPromise.then(() => { + if (Object.keys(localVarFormParams).length) { + if (localVarUseFormData) { + (localVarRequestOptions).formData = localVarFormParams; + } else { + localVarRequestOptions.form = localVarFormParams; + } + } + return new Promise<{ response: http.IncomingMessage; body: GetSparklines200Response; }>((resolve, reject) => { + localVarRequest(localVarRequestOptions, (error, response, body) => { + if (error) { + reject(error); + } else { + if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) { + body = ObjectSerializer.deserialize(body, "GetSparklines200Response"); + resolve({ response: response, body: body }); + } else { + reject(new HttpError(response, body, response.statusCode)); + } + } + }); + }); + }); + } /** * */ diff --git a/sdk/nodejs/sdk/src/zrok/api/api/shareApi.ts b/sdk/nodejs/sdk/src/zrok/api/api/shareApi.ts index ad3e6a32..5b8f7871 100644 --- a/sdk/nodejs/sdk/src/zrok/api/api/shareApi.ts +++ b/sdk/nodejs/sdk/src/zrok/api/api/shareApi.ts @@ -2,7 +2,7 @@ * zrok * zrok client access * - * The version of the OpenAPI document: 0.3.0 + * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). @@ -15,12 +15,13 @@ import localVarRequest from 'request'; import http from 'http'; /* tslint:disable:no-unused-locals */ +import { Access201Response } from '../model/access201Response'; import { AccessRequest } from '../model/accessRequest'; -import { AccessResponse } from '../model/accessResponse'; import { ShareRequest } from '../model/shareRequest'; import { ShareResponse } from '../model/shareResponse'; import { UnaccessRequest } from '../model/unaccessRequest'; import { UnshareRequest } from '../model/unshareRequest'; +import { UpdateAccessRequest } from '../model/updateAccessRequest'; import { UpdateShareRequest } from '../model/updateShareRequest'; import { ObjectSerializer, Authentication, VoidAuth, Interceptor } from '../model/models'; @@ -99,7 +100,7 @@ export class ShareApi { * * @param body */ - public async access (body?: AccessRequest, options: {headers: {[name: string]: string}} = {headers: {}}) : Promise<{ response: http.IncomingMessage; body: AccessResponse; }> { + public async access (body?: AccessRequest, options: {headers: {[name: string]: string}} = {headers: {}}) : Promise<{ response: http.IncomingMessage; body: Access201Response; }> { const localVarPath = this.basePath + '/access'; let localVarQueryParameters: any = {}; let localVarHeaderParams: any = (Object).assign({}, this._defaultHeaders); @@ -145,13 +146,13 @@ export class ShareApi { localVarRequestOptions.form = localVarFormParams; } } - return new Promise<{ response: http.IncomingMessage; body: AccessResponse; }>((resolve, reject) => { + return new Promise<{ response: http.IncomingMessage; body: Access201Response; }>((resolve, reject) => { localVarRequest(localVarRequestOptions, (error, response, body) => { if (error) { reject(error); } else { if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) { - body = ObjectSerializer.deserialize(body, "AccessResponse"); + body = ObjectSerializer.deserialize(body, "Access201Response"); resolve({ response: response, body: body }); } else { reject(new HttpError(response, body, response.statusCode)); @@ -350,6 +351,64 @@ export class ShareApi { }); }); } + /** + * + * @param body + */ + public async updateAccess (body?: UpdateAccessRequest, options: {headers: {[name: string]: string}} = {headers: {}}) : Promise<{ response: http.IncomingMessage; body?: any; }> { + const localVarPath = this.basePath + '/access'; + let localVarQueryParameters: any = {}; + let localVarHeaderParams: any = (Object).assign({}, this._defaultHeaders); + let localVarFormParams: any = {}; + + (Object).assign(localVarHeaderParams, options.headers); + + let localVarUseFormData = false; + + let localVarRequestOptions: localVarRequest.Options = { + method: 'PATCH', + qs: localVarQueryParameters, + headers: localVarHeaderParams, + uri: localVarPath, + useQuerystring: this._useQuerystring, + json: true, + body: ObjectSerializer.serialize(body, "UpdateAccessRequest") + }; + + let authenticationPromise = Promise.resolve(); + if (this.authentications.key.apiKey) { + authenticationPromise = authenticationPromise.then(() => this.authentications.key.applyToRequest(localVarRequestOptions)); + } + authenticationPromise = authenticationPromise.then(() => this.authentications.default.applyToRequest(localVarRequestOptions)); + + let interceptorPromise = authenticationPromise; + for (const interceptor of this.interceptors) { + interceptorPromise = interceptorPromise.then(() => interceptor(localVarRequestOptions)); + } + + return interceptorPromise.then(() => { + if (Object.keys(localVarFormParams).length) { + if (localVarUseFormData) { + (localVarRequestOptions).formData = localVarFormParams; + } else { + localVarRequestOptions.form = localVarFormParams; + } + } + return new Promise<{ response: http.IncomingMessage; body?: any; }>((resolve, reject) => { + localVarRequest(localVarRequestOptions, (error, response, body) => { + if (error) { + reject(error); + } else { + if (response.statusCode && response.statusCode >= 200 && response.statusCode <= 299) { + resolve({ response: response, body: body }); + } else { + reject(new HttpError(response, body, response.statusCode)); + } + } + }); + }); + }); + } /** * * @param body diff --git a/sdk/nodejs/sdk/src/zrok/api/apis/AdminApi.ts b/sdk/nodejs/sdk/src/zrok/api/apis/AdminApi.ts deleted file mode 100644 index 693c2daa..00000000 --- a/sdk/nodejs/sdk/src/zrok/api/apis/AdminApi.ts +++ /dev/null @@ -1,251 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * zrok - * zrok client access - * - * The version of the OpenAPI document: 0.3.0 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - - -import * as runtime from '../runtime'; -import type { - CreateFrontendRequest, - CreateFrontendResponse, - CreateIdentity201Response, - CreateIdentityRequest, - DeleteFrontendRequest, - InviteTokenGenerateRequest, - PublicFrontend, - UpdateFrontendRequest, -} from '../models/index'; -import { - CreateFrontendRequestFromJSON, - CreateFrontendRequestToJSON, - CreateFrontendResponseFromJSON, - CreateFrontendResponseToJSON, - CreateIdentity201ResponseFromJSON, - CreateIdentity201ResponseToJSON, - CreateIdentityRequestFromJSON, - CreateIdentityRequestToJSON, - DeleteFrontendRequestFromJSON, - DeleteFrontendRequestToJSON, - InviteTokenGenerateRequestFromJSON, - InviteTokenGenerateRequestToJSON, - PublicFrontendFromJSON, - PublicFrontendToJSON, - UpdateFrontendRequestFromJSON, - UpdateFrontendRequestToJSON, -} from '../models/index'; - -export interface CreateFrontendOperationRequest { - body?: CreateFrontendRequest; -} - -export interface CreateIdentityOperationRequest { - body?: CreateIdentityRequest; -} - -export interface DeleteFrontendOperationRequest { - body?: DeleteFrontendRequest; -} - -export interface InviteTokenGenerateOperationRequest { - body?: InviteTokenGenerateRequest; -} - -export interface UpdateFrontendOperationRequest { - body?: UpdateFrontendRequest; -} - -/** - * - */ -export class AdminApi extends runtime.BaseAPI { - - /** - */ - async createFrontendRaw(requestParameters: CreateFrontendOperationRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { - const queryParameters: any = {}; - - const headerParameters: runtime.HTTPHeaders = {}; - - headerParameters['Content-Type'] = 'application/zrok.v1+json'; - - if (this.configuration && this.configuration.apiKey) { - headerParameters["x-token"] = this.configuration.apiKey("x-token"); // key authentication - } - - const response = await this.request({ - path: `/frontend`, - method: 'POST', - headers: headerParameters, - query: queryParameters, - body: CreateFrontendRequestToJSON(requestParameters.body), - }, initOverrides); - - return new runtime.JSONApiResponse(response, (jsonValue) => CreateFrontendResponseFromJSON(jsonValue)); - } - - /** - */ - async createFrontend(requestParameters: CreateFrontendOperationRequest = {}, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { - const response = await this.createFrontendRaw(requestParameters, initOverrides); - return await response.value(); - } - - /** - */ - async createIdentityRaw(requestParameters: CreateIdentityOperationRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { - const queryParameters: any = {}; - - const headerParameters: runtime.HTTPHeaders = {}; - - headerParameters['Content-Type'] = 'application/zrok.v1+json'; - - if (this.configuration && this.configuration.apiKey) { - headerParameters["x-token"] = this.configuration.apiKey("x-token"); // key authentication - } - - const response = await this.request({ - path: `/identity`, - method: 'POST', - headers: headerParameters, - query: queryParameters, - body: CreateIdentityRequestToJSON(requestParameters.body), - }, initOverrides); - - return new runtime.JSONApiResponse(response, (jsonValue) => CreateIdentity201ResponseFromJSON(jsonValue)); - } - - /** - */ - async createIdentity(requestParameters: CreateIdentityOperationRequest = {}, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { - const response = await this.createIdentityRaw(requestParameters, initOverrides); - return await response.value(); - } - - /** - */ - async deleteFrontendRaw(requestParameters: DeleteFrontendOperationRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { - const queryParameters: any = {}; - - const headerParameters: runtime.HTTPHeaders = {}; - - headerParameters['Content-Type'] = 'application/zrok.v1+json'; - - if (this.configuration && this.configuration.apiKey) { - headerParameters["x-token"] = this.configuration.apiKey("x-token"); // key authentication - } - - const response = await this.request({ - path: `/frontend`, - method: 'DELETE', - headers: headerParameters, - query: queryParameters, - body: DeleteFrontendRequestToJSON(requestParameters.body), - }, initOverrides); - - return new runtime.VoidApiResponse(response); - } - - /** - */ - async deleteFrontend(requestParameters: DeleteFrontendOperationRequest = {}, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { - await this.deleteFrontendRaw(requestParameters, initOverrides); - } - - /** - */ - async inviteTokenGenerateRaw(requestParameters: InviteTokenGenerateOperationRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { - const queryParameters: any = {}; - - const headerParameters: runtime.HTTPHeaders = {}; - - headerParameters['Content-Type'] = 'application/zrok.v1+json'; - - if (this.configuration && this.configuration.apiKey) { - headerParameters["x-token"] = this.configuration.apiKey("x-token"); // key authentication - } - - const response = await this.request({ - path: `/invite/token/generate`, - method: 'POST', - headers: headerParameters, - query: queryParameters, - body: InviteTokenGenerateRequestToJSON(requestParameters.body), - }, initOverrides); - - return new runtime.VoidApiResponse(response); - } - - /** - */ - async inviteTokenGenerate(requestParameters: InviteTokenGenerateOperationRequest = {}, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { - await this.inviteTokenGenerateRaw(requestParameters, initOverrides); - } - - /** - */ - async listFrontendsRaw(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise>> { - const queryParameters: any = {}; - - const headerParameters: runtime.HTTPHeaders = {}; - - if (this.configuration && this.configuration.apiKey) { - headerParameters["x-token"] = this.configuration.apiKey("x-token"); // key authentication - } - - const response = await this.request({ - path: `/frontends`, - method: 'GET', - headers: headerParameters, - query: queryParameters, - }, initOverrides); - - return new runtime.JSONApiResponse(response, (jsonValue) => jsonValue.map(PublicFrontendFromJSON)); - } - - /** - */ - async listFrontends(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { - const response = await this.listFrontendsRaw(initOverrides); - return await response.value(); - } - - /** - */ - async updateFrontendRaw(requestParameters: UpdateFrontendOperationRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { - const queryParameters: any = {}; - - const headerParameters: runtime.HTTPHeaders = {}; - - headerParameters['Content-Type'] = 'application/zrok.v1+json'; - - if (this.configuration && this.configuration.apiKey) { - headerParameters["x-token"] = this.configuration.apiKey("x-token"); // key authentication - } - - const response = await this.request({ - path: `/frontend`, - method: 'PATCH', - headers: headerParameters, - query: queryParameters, - body: UpdateFrontendRequestToJSON(requestParameters.body), - }, initOverrides); - - return new runtime.VoidApiResponse(response); - } - - /** - */ - async updateFrontend(requestParameters: UpdateFrontendOperationRequest = {}, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { - await this.updateFrontendRaw(requestParameters, initOverrides); - } - -} diff --git a/sdk/nodejs/sdk/src/zrok/api/git_push.sh b/sdk/nodejs/sdk/src/zrok/api/git_push.sh new file mode 100644 index 00000000..f53a75d4 --- /dev/null +++ b/sdk/nodejs/sdk/src/zrok/api/git_push.sh @@ -0,0 +1,57 @@ +#!/bin/sh +# ref: https://help.github.com/articles/adding-an-existing-project-to-github-using-the-command-line/ +# +# Usage example: /bin/sh ./git_push.sh wing328 openapi-petstore-perl "minor update" "gitlab.com" + +git_user_id=$1 +git_repo_id=$2 +release_note=$3 +git_host=$4 + +if [ "$git_host" = "" ]; then + git_host="github.com" + echo "[INFO] No command line input provided. Set \$git_host to $git_host" +fi + +if [ "$git_user_id" = "" ]; then + git_user_id="GIT_USER_ID" + echo "[INFO] No command line input provided. Set \$git_user_id to $git_user_id" +fi + +if [ "$git_repo_id" = "" ]; then + git_repo_id="GIT_REPO_ID" + echo "[INFO] No command line input provided. Set \$git_repo_id to $git_repo_id" +fi + +if [ "$release_note" = "" ]; then + release_note="Minor update" + echo "[INFO] No command line input provided. Set \$release_note to $release_note" +fi + +# Initialize the local directory as a Git repository +git init + +# Adds the files in the local repository and stages them for commit. +git add . + +# Commits the tracked changes and prepares them to be pushed to a remote repository. +git commit -m "$release_note" + +# Sets the new remote +git_remote=$(git remote) +if [ "$git_remote" = "" ]; then # git remote not defined + + if [ "$GIT_TOKEN" = "" ]; then + echo "[INFO] \$GIT_TOKEN (environment variable) is not set. Using the git credential in your environment." + git remote add origin https://${git_host}/${git_user_id}/${git_repo_id}.git + else + git remote add origin https://${git_user_id}:"${GIT_TOKEN}"@${git_host}/${git_user_id}/${git_repo_id}.git + fi + +fi + +git pull origin master + +# Pushes (Forces) the changes in the local repository up to the remote repository +echo "Git pushing to https://${git_host}/${git_user_id}/${git_repo_id}.git" +git push origin master 2>&1 | grep -v 'To https' diff --git a/sdk/nodejs/sdk/src/zrok/api/model/accessResponse.ts b/sdk/nodejs/sdk/src/zrok/api/model/access201Response.ts similarity index 85% rename from sdk/nodejs/sdk/src/zrok/api/model/accessResponse.ts rename to sdk/nodejs/sdk/src/zrok/api/model/access201Response.ts index eb4bfa9e..35c99d15 100644 --- a/sdk/nodejs/sdk/src/zrok/api/model/accessResponse.ts +++ b/sdk/nodejs/sdk/src/zrok/api/model/access201Response.ts @@ -2,7 +2,7 @@ * zrok * zrok client access * - * The version of the OpenAPI document: 0.3.0 + * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). @@ -12,7 +12,7 @@ import { RequestFile } from './models'; -export class AccessResponse { +export class Access201Response { 'frontendToken'?: string; 'backendMode'?: string; @@ -31,7 +31,7 @@ export class AccessResponse { } ]; static getAttributeTypeMap() { - return AccessResponse.attributeTypeMap; + return Access201Response.attributeTypeMap; } } diff --git a/sdk/nodejs/sdk/src/zrok/api/model/accessRequest.ts b/sdk/nodejs/sdk/src/zrok/api/model/accessRequest.ts index 438421b0..220e4f22 100644 --- a/sdk/nodejs/sdk/src/zrok/api/model/accessRequest.ts +++ b/sdk/nodejs/sdk/src/zrok/api/model/accessRequest.ts @@ -2,7 +2,7 @@ * zrok * zrok client access * - * The version of the OpenAPI document: 0.3.0 + * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). @@ -14,7 +14,9 @@ import { RequestFile } from './models'; export class AccessRequest { 'envZId'?: string; - 'shrToken'?: string; + 'shareToken'?: string; + 'bindAddress'?: string; + 'description'?: string; static discriminator: string | undefined = undefined; @@ -25,8 +27,18 @@ export class AccessRequest { "type": "string" }, { - "name": "shrToken", - "baseName": "shrToken", + "name": "shareToken", + "baseName": "shareToken", + "type": "string" + }, + { + "name": "bindAddress", + "baseName": "bindAddress", + "type": "string" + }, + { + "name": "description", + "baseName": "description", "type": "string" } ]; diff --git a/sdk/nodejs/sdk/src/zrok/api/model/addOrganizationMemberRequest.ts b/sdk/nodejs/sdk/src/zrok/api/model/addOrganizationMemberRequest.ts index 9b918462..0b6472bd 100644 --- a/sdk/nodejs/sdk/src/zrok/api/model/addOrganizationMemberRequest.ts +++ b/sdk/nodejs/sdk/src/zrok/api/model/addOrganizationMemberRequest.ts @@ -2,7 +2,7 @@ * zrok * zrok client access * - * The version of the OpenAPI document: 0.3.0 + * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). @@ -13,7 +13,7 @@ import { RequestFile } from './models'; export class AddOrganizationMemberRequest { - 'token'?: string; + 'organizationToken'?: string; 'email'?: string; 'admin'?: boolean; @@ -21,8 +21,8 @@ export class AddOrganizationMemberRequest { static attributeTypeMap: Array<{name: string, baseName: string, type: string}> = [ { - "name": "token", - "baseName": "token", + "name": "organizationToken", + "baseName": "organizationToken", "type": "string" }, { diff --git a/sdk/nodejs/sdk/src/zrok/api/model/authUser.ts b/sdk/nodejs/sdk/src/zrok/api/model/authUser.ts index 18af66f4..59d2cb90 100644 --- a/sdk/nodejs/sdk/src/zrok/api/model/authUser.ts +++ b/sdk/nodejs/sdk/src/zrok/api/model/authUser.ts @@ -2,7 +2,7 @@ * zrok * zrok client access * - * The version of the OpenAPI document: 0.3.0 + * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/sdk/nodejs/sdk/src/zrok/api/model/changePasswordRequest.ts b/sdk/nodejs/sdk/src/zrok/api/model/changePasswordRequest.ts index bd32752a..1ff0696a 100644 --- a/sdk/nodejs/sdk/src/zrok/api/model/changePasswordRequest.ts +++ b/sdk/nodejs/sdk/src/zrok/api/model/changePasswordRequest.ts @@ -2,7 +2,7 @@ * zrok * zrok client access * - * The version of the OpenAPI document: 0.3.0 + * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/sdk/nodejs/sdk/src/zrok/api/model/createFrontendResponse.ts b/sdk/nodejs/sdk/src/zrok/api/model/clientVersionCheck400Response.ts similarity index 67% rename from sdk/nodejs/sdk/src/zrok/api/model/createFrontendResponse.ts rename to sdk/nodejs/sdk/src/zrok/api/model/clientVersionCheck400Response.ts index 9484bcc2..fedd9bcc 100644 --- a/sdk/nodejs/sdk/src/zrok/api/model/createFrontendResponse.ts +++ b/sdk/nodejs/sdk/src/zrok/api/model/clientVersionCheck400Response.ts @@ -2,7 +2,7 @@ * zrok * zrok client access * - * The version of the OpenAPI document: 0.3.0 + * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). @@ -12,20 +12,20 @@ import { RequestFile } from './models'; -export class CreateFrontendResponse { - 'token'?: string; +export class ClientVersionCheck400Response { + 'message'?: string; static discriminator: string | undefined = undefined; static attributeTypeMap: Array<{name: string, baseName: string, type: string}> = [ { - "name": "token", - "baseName": "token", + "name": "message", + "baseName": "message", "type": "string" } ]; static getAttributeTypeMap() { - return CreateFrontendResponse.attributeTypeMap; + return ClientVersionCheck400Response.attributeTypeMap; } } diff --git a/sdk/nodejs/sdk/src/zrok/api/model/grantsRequest.ts b/sdk/nodejs/sdk/src/zrok/api/model/clientVersionCheckRequest.ts similarity index 66% rename from sdk/nodejs/sdk/src/zrok/api/model/grantsRequest.ts rename to sdk/nodejs/sdk/src/zrok/api/model/clientVersionCheckRequest.ts index 1018c48f..64b7beb7 100644 --- a/sdk/nodejs/sdk/src/zrok/api/model/grantsRequest.ts +++ b/sdk/nodejs/sdk/src/zrok/api/model/clientVersionCheckRequest.ts @@ -2,7 +2,7 @@ * zrok * zrok client access * - * The version of the OpenAPI document: 0.3.0 + * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). @@ -12,20 +12,20 @@ import { RequestFile } from './models'; -export class GrantsRequest { - 'email'?: string; +export class ClientVersionCheckRequest { + 'clientVersion'?: string; static discriminator: string | undefined = undefined; static attributeTypeMap: Array<{name: string, baseName: string, type: string}> = [ { - "name": "email", - "baseName": "email", + "name": "clientVersion", + "baseName": "clientVersion", "type": "string" } ]; static getAttributeTypeMap() { - return GrantsRequest.attributeTypeMap; + return ClientVersionCheckRequest.attributeTypeMap; } } diff --git a/sdk/nodejs/sdk/src/zrok/api/model/configuration.ts b/sdk/nodejs/sdk/src/zrok/api/model/configuration.ts index 78c489bd..ee6bcc68 100644 --- a/sdk/nodejs/sdk/src/zrok/api/model/configuration.ts +++ b/sdk/nodejs/sdk/src/zrok/api/model/configuration.ts @@ -2,7 +2,7 @@ * zrok * zrok client access * - * The version of the OpenAPI document: 0.3.0 + * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). @@ -11,7 +11,6 @@ */ import { RequestFile } from './models'; -import { PasswordRequirements } from './passwordRequirements'; export class Configuration { 'version'?: string; @@ -19,7 +18,6 @@ export class Configuration { 'invitesOpen'?: boolean; 'requiresInviteToken'?: boolean; 'inviteTokenContact'?: string; - 'passwordRequirements'?: PasswordRequirements; static discriminator: string | undefined = undefined; @@ -48,11 +46,6 @@ export class Configuration { "name": "inviteTokenContact", "baseName": "inviteTokenContact", "type": "string" - }, - { - "name": "passwordRequirements", - "baseName": "passwordRequirements", - "type": "PasswordRequirements" } ]; static getAttributeTypeMap() { diff --git a/sdk/nodejs/sdk/src/zrok/api/model/createAccountRequest.ts b/sdk/nodejs/sdk/src/zrok/api/model/createAccountRequest.ts deleted file mode 100644 index 84845bba..00000000 --- a/sdk/nodejs/sdk/src/zrok/api/model/createAccountRequest.ts +++ /dev/null @@ -1,37 +0,0 @@ -/** - * zrok - * zrok client access - * - * The version of the OpenAPI document: 0.3.0 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - -import { RequestFile } from './models'; - -export class CreateAccountRequest { - 'email'?: string; - 'password'?: string; - - static discriminator: string | undefined = undefined; - - static attributeTypeMap: Array<{name: string, baseName: string, type: string}> = [ - { - "name": "email", - "baseName": "email", - "type": "string" - }, - { - "name": "password", - "baseName": "password", - "type": "string" - } ]; - - static getAttributeTypeMap() { - return CreateAccountRequest.attributeTypeMap; - } -} - diff --git a/sdk/nodejs/sdk/src/zrok/api/model/createFrontend201Response.ts b/sdk/nodejs/sdk/src/zrok/api/model/createFrontend201Response.ts new file mode 100644 index 00000000..78d3fadd --- /dev/null +++ b/sdk/nodejs/sdk/src/zrok/api/model/createFrontend201Response.ts @@ -0,0 +1,31 @@ +/** + * zrok + * zrok client access + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +import { RequestFile } from './models'; + +export class CreateFrontend201Response { + 'frontendToken'?: string; + + static discriminator: string | undefined = undefined; + + static attributeTypeMap: Array<{name: string, baseName: string, type: string}> = [ + { + "name": "frontendToken", + "baseName": "frontendToken", + "type": "string" + } ]; + + static getAttributeTypeMap() { + return CreateFrontend201Response.attributeTypeMap; + } +} + diff --git a/sdk/nodejs/sdk/src/zrok/api/model/createFrontendRequest.ts b/sdk/nodejs/sdk/src/zrok/api/model/createFrontendRequest.ts index 35b425ef..8166454d 100644 --- a/sdk/nodejs/sdk/src/zrok/api/model/createFrontendRequest.ts +++ b/sdk/nodejs/sdk/src/zrok/api/model/createFrontendRequest.ts @@ -2,7 +2,7 @@ * zrok * zrok client access * - * The version of the OpenAPI document: 0.3.0 + * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/sdk/nodejs/sdk/src/zrok/api/model/createIdentity201Response.ts b/sdk/nodejs/sdk/src/zrok/api/model/createIdentity201Response.ts index 8adb56c4..9487c0a0 100644 --- a/sdk/nodejs/sdk/src/zrok/api/model/createIdentity201Response.ts +++ b/sdk/nodejs/sdk/src/zrok/api/model/createIdentity201Response.ts @@ -2,7 +2,7 @@ * zrok * zrok client access * - * The version of the OpenAPI document: 0.3.0 + * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/sdk/nodejs/sdk/src/zrok/api/model/createIdentityRequest.ts b/sdk/nodejs/sdk/src/zrok/api/model/createIdentityRequest.ts index d8b88a5f..6d1828fc 100644 --- a/sdk/nodejs/sdk/src/zrok/api/model/createIdentityRequest.ts +++ b/sdk/nodejs/sdk/src/zrok/api/model/createIdentityRequest.ts @@ -2,7 +2,7 @@ * zrok * zrok client access * - * The version of the OpenAPI document: 0.3.0 + * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/sdk/nodejs/sdk/src/zrok/api/model/createOrganization201Response.ts b/sdk/nodejs/sdk/src/zrok/api/model/createOrganization201Response.ts new file mode 100644 index 00000000..180cf93c --- /dev/null +++ b/sdk/nodejs/sdk/src/zrok/api/model/createOrganization201Response.ts @@ -0,0 +1,31 @@ +/** + * zrok + * zrok client access + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +import { RequestFile } from './models'; + +export class CreateOrganization201Response { + 'organizationToken'?: string; + + static discriminator: string | undefined = undefined; + + static attributeTypeMap: Array<{name: string, baseName: string, type: string}> = [ + { + "name": "organizationToken", + "baseName": "organizationToken", + "type": "string" + } ]; + + static getAttributeTypeMap() { + return CreateOrganization201Response.attributeTypeMap; + } +} + diff --git a/sdk/nodejs/sdk/src/zrok/api/model/createOrganizationRequest.ts b/sdk/nodejs/sdk/src/zrok/api/model/createOrganizationRequest.ts index 6b3d737a..cc8476ac 100644 --- a/sdk/nodejs/sdk/src/zrok/api/model/createOrganizationRequest.ts +++ b/sdk/nodejs/sdk/src/zrok/api/model/createOrganizationRequest.ts @@ -2,7 +2,7 @@ * zrok * zrok client access * - * The version of the OpenAPI document: 0.3.0 + * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/sdk/nodejs/sdk/src/zrok/api/model/deleteFrontendRequest.ts b/sdk/nodejs/sdk/src/zrok/api/model/deleteFrontendRequest.ts index 9bb03607..83ede2e9 100644 --- a/sdk/nodejs/sdk/src/zrok/api/model/deleteFrontendRequest.ts +++ b/sdk/nodejs/sdk/src/zrok/api/model/deleteFrontendRequest.ts @@ -2,7 +2,7 @@ * zrok * zrok client access * - * The version of the OpenAPI document: 0.3.0 + * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/sdk/nodejs/sdk/src/zrok/api/model/disableRequest.ts b/sdk/nodejs/sdk/src/zrok/api/model/disableRequest.ts index 719e1887..11751b97 100644 --- a/sdk/nodejs/sdk/src/zrok/api/model/disableRequest.ts +++ b/sdk/nodejs/sdk/src/zrok/api/model/disableRequest.ts @@ -2,7 +2,7 @@ * zrok * zrok client access * - * The version of the OpenAPI document: 0.3.0 + * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/sdk/nodejs/sdk/src/zrok/api/model/enableRequest.ts b/sdk/nodejs/sdk/src/zrok/api/model/enableRequest.ts index f7d579a3..53a77440 100644 --- a/sdk/nodejs/sdk/src/zrok/api/model/enableRequest.ts +++ b/sdk/nodejs/sdk/src/zrok/api/model/enableRequest.ts @@ -2,7 +2,7 @@ * zrok * zrok client access * - * The version of the OpenAPI document: 0.3.0 + * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/sdk/nodejs/sdk/src/zrok/api/model/environment.ts b/sdk/nodejs/sdk/src/zrok/api/model/environment.ts index 2bd9c3f9..5e13a7ac 100644 --- a/sdk/nodejs/sdk/src/zrok/api/model/environment.ts +++ b/sdk/nodejs/sdk/src/zrok/api/model/environment.ts @@ -2,7 +2,7 @@ * zrok * zrok client access * - * The version of the OpenAPI document: 0.3.0 + * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/sdk/nodejs/sdk/src/zrok/api/model/environmentAndResources.ts b/sdk/nodejs/sdk/src/zrok/api/model/environmentAndResources.ts index 0d352df4..6bfd34cd 100644 --- a/sdk/nodejs/sdk/src/zrok/api/model/environmentAndResources.ts +++ b/sdk/nodejs/sdk/src/zrok/api/model/environmentAndResources.ts @@ -2,7 +2,7 @@ * zrok * zrok client access * - * The version of the OpenAPI document: 0.3.0 + * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/sdk/nodejs/sdk/src/zrok/api/model/frontend.ts b/sdk/nodejs/sdk/src/zrok/api/model/frontend.ts index 1573263d..0077f8f6 100644 --- a/sdk/nodejs/sdk/src/zrok/api/model/frontend.ts +++ b/sdk/nodejs/sdk/src/zrok/api/model/frontend.ts @@ -2,7 +2,7 @@ * zrok * zrok client access * - * The version of the OpenAPI document: 0.3.0 + * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). @@ -14,8 +14,11 @@ import { RequestFile } from './models'; export class Frontend { 'id'?: number; - 'token'?: string; - 'shrToken'?: string; + 'frontendToken'?: string; + 'shareToken'?: string; + 'backendMode'?: string; + 'bindAddress'?: string; + 'description'?: string; 'zId'?: string; 'createdAt'?: number; 'updatedAt'?: number; @@ -29,13 +32,28 @@ export class Frontend { "type": "number" }, { - "name": "token", - "baseName": "token", + "name": "frontendToken", + "baseName": "frontendToken", "type": "string" }, { - "name": "shrToken", - "baseName": "shrToken", + "name": "shareToken", + "baseName": "shareToken", + "type": "string" + }, + { + "name": "backendMode", + "baseName": "backendMode", + "type": "string" + }, + { + "name": "bindAddress", + "baseName": "bindAddress", + "type": "string" + }, + { + "name": "description", + "baseName": "description", "type": "string" }, { diff --git a/sdk/nodejs/sdk/src/zrok/api/model/getSparklines200Response.ts b/sdk/nodejs/sdk/src/zrok/api/model/getSparklines200Response.ts new file mode 100644 index 00000000..f0cb7c47 --- /dev/null +++ b/sdk/nodejs/sdk/src/zrok/api/model/getSparklines200Response.ts @@ -0,0 +1,32 @@ +/** + * zrok + * zrok client access + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +import { RequestFile } from './models'; +import { Metrics } from './metrics'; + +export class GetSparklines200Response { + 'sparklines'?: Array; + + static discriminator: string | undefined = undefined; + + static attributeTypeMap: Array<{name: string, baseName: string, type: string}> = [ + { + "name": "sparklines", + "baseName": "sparklines", + "type": "Array" + } ]; + + static getAttributeTypeMap() { + return GetSparklines200Response.attributeTypeMap; + } +} + diff --git a/sdk/nodejs/sdk/src/zrok/api/model/getSparklinesRequest.ts b/sdk/nodejs/sdk/src/zrok/api/model/getSparklinesRequest.ts new file mode 100644 index 00000000..7e9f4b96 --- /dev/null +++ b/sdk/nodejs/sdk/src/zrok/api/model/getSparklinesRequest.ts @@ -0,0 +1,43 @@ +/** + * zrok + * zrok client access + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +import { RequestFile } from './models'; + +export class GetSparklinesRequest { + 'account'?: boolean; + 'environments'?: Array; + 'shares'?: Array; + + static discriminator: string | undefined = undefined; + + static attributeTypeMap: Array<{name: string, baseName: string, type: string}> = [ + { + "name": "account", + "baseName": "account", + "type": "boolean" + }, + { + "name": "environments", + "baseName": "environments", + "type": "Array" + }, + { + "name": "shares", + "baseName": "shares", + "type": "Array" + } ]; + + static getAttributeTypeMap() { + return GetSparklinesRequest.attributeTypeMap; + } +} + diff --git a/sdk/nodejs/sdk/src/zrok/api/model/inviteRequest.ts b/sdk/nodejs/sdk/src/zrok/api/model/inviteRequest.ts index 9fbb0b3d..5776ab04 100644 --- a/sdk/nodejs/sdk/src/zrok/api/model/inviteRequest.ts +++ b/sdk/nodejs/sdk/src/zrok/api/model/inviteRequest.ts @@ -2,7 +2,7 @@ * zrok * zrok client access * - * The version of the OpenAPI document: 0.3.0 + * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). @@ -14,7 +14,7 @@ import { RequestFile } from './models'; export class InviteRequest { 'email'?: string; - 'token'?: string; + 'inviteToken'?: string; static discriminator: string | undefined = undefined; @@ -25,8 +25,8 @@ export class InviteRequest { "type": "string" }, { - "name": "token", - "baseName": "token", + "name": "inviteToken", + "baseName": "inviteToken", "type": "string" } ]; diff --git a/sdk/nodejs/sdk/src/zrok/api/model/inviteTokenGenerateRequest.ts b/sdk/nodejs/sdk/src/zrok/api/model/inviteTokenGenerateRequest.ts index 5a39bd9f..839e2b86 100644 --- a/sdk/nodejs/sdk/src/zrok/api/model/inviteTokenGenerateRequest.ts +++ b/sdk/nodejs/sdk/src/zrok/api/model/inviteTokenGenerateRequest.ts @@ -2,7 +2,7 @@ * zrok * zrok client access * - * The version of the OpenAPI document: 0.3.0 + * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). @@ -13,14 +13,14 @@ import { RequestFile } from './models'; export class InviteTokenGenerateRequest { - 'tokens'?: Array; + 'inviteTokens'?: Array; static discriminator: string | undefined = undefined; static attributeTypeMap: Array<{name: string, baseName: string, type: string}> = [ { - "name": "tokens", - "baseName": "tokens", + "name": "inviteTokens", + "baseName": "inviteTokens", "type": "Array" } ]; diff --git a/sdk/nodejs/sdk/src/zrok/api/model/publicFrontend.ts b/sdk/nodejs/sdk/src/zrok/api/model/listFrontends200ResponseInner.ts similarity index 82% rename from sdk/nodejs/sdk/src/zrok/api/model/publicFrontend.ts rename to sdk/nodejs/sdk/src/zrok/api/model/listFrontends200ResponseInner.ts index 3046ad13..c09f4b2e 100644 --- a/sdk/nodejs/sdk/src/zrok/api/model/publicFrontend.ts +++ b/sdk/nodejs/sdk/src/zrok/api/model/listFrontends200ResponseInner.ts @@ -2,7 +2,7 @@ * zrok * zrok client access * - * The version of the OpenAPI document: 0.3.0 + * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). @@ -12,8 +12,8 @@ import { RequestFile } from './models'; -export class PublicFrontend { - 'token'?: string; +export class ListFrontends200ResponseInner { + 'frontendToken'?: string; 'zId'?: string; 'urlTemplate'?: string; 'publicName'?: string; @@ -24,8 +24,8 @@ export class PublicFrontend { static attributeTypeMap: Array<{name: string, baseName: string, type: string}> = [ { - "name": "token", - "baseName": "token", + "name": "frontendToken", + "baseName": "frontendToken", "type": "string" }, { @@ -55,7 +55,7 @@ export class PublicFrontend { } ]; static getAttributeTypeMap() { - return PublicFrontend.attributeTypeMap; + return ListFrontends200ResponseInner.attributeTypeMap; } } diff --git a/sdk/nodejs/sdk/src/zrok/api/model/listMemberships200Response.ts b/sdk/nodejs/sdk/src/zrok/api/model/listMemberships200Response.ts index 7195a2cd..f42a8bc5 100644 --- a/sdk/nodejs/sdk/src/zrok/api/model/listMemberships200Response.ts +++ b/sdk/nodejs/sdk/src/zrok/api/model/listMemberships200Response.ts @@ -2,7 +2,7 @@ * zrok * zrok client access * - * The version of the OpenAPI document: 0.3.0 + * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/sdk/nodejs/sdk/src/zrok/api/model/listMemberships200ResponseMembershipsInner.ts b/sdk/nodejs/sdk/src/zrok/api/model/listMemberships200ResponseMembershipsInner.ts index dfbb4257..71c04817 100644 --- a/sdk/nodejs/sdk/src/zrok/api/model/listMemberships200ResponseMembershipsInner.ts +++ b/sdk/nodejs/sdk/src/zrok/api/model/listMemberships200ResponseMembershipsInner.ts @@ -2,7 +2,7 @@ * zrok * zrok client access * - * The version of the OpenAPI document: 0.3.0 + * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). @@ -13,7 +13,7 @@ import { RequestFile } from './models'; export class ListMemberships200ResponseMembershipsInner { - 'token'?: string; + 'organizationToken'?: string; 'description'?: string; 'admin'?: boolean; @@ -21,8 +21,8 @@ export class ListMemberships200ResponseMembershipsInner { static attributeTypeMap: Array<{name: string, baseName: string, type: string}> = [ { - "name": "token", - "baseName": "token", + "name": "organizationToken", + "baseName": "organizationToken", "type": "string" }, { diff --git a/sdk/nodejs/sdk/src/zrok/api/model/listOrganizationMembers200Response.ts b/sdk/nodejs/sdk/src/zrok/api/model/listOrganizationMembers200Response.ts index 01452eca..7d0b5a2b 100644 --- a/sdk/nodejs/sdk/src/zrok/api/model/listOrganizationMembers200Response.ts +++ b/sdk/nodejs/sdk/src/zrok/api/model/listOrganizationMembers200Response.ts @@ -2,7 +2,7 @@ * zrok * zrok client access * - * The version of the OpenAPI document: 0.3.0 + * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/sdk/nodejs/sdk/src/zrok/api/model/listOrganizationMembers200ResponseMembersInner.ts b/sdk/nodejs/sdk/src/zrok/api/model/listOrganizationMembers200ResponseMembersInner.ts index 5c4faa33..b761e0f3 100644 --- a/sdk/nodejs/sdk/src/zrok/api/model/listOrganizationMembers200ResponseMembersInner.ts +++ b/sdk/nodejs/sdk/src/zrok/api/model/listOrganizationMembers200ResponseMembersInner.ts @@ -2,7 +2,7 @@ * zrok * zrok client access * - * The version of the OpenAPI document: 0.3.0 + * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/sdk/nodejs/sdk/src/zrok/api/model/listOrganizations200Response.ts b/sdk/nodejs/sdk/src/zrok/api/model/listOrganizations200Response.ts index 0e5bb380..09ae68bc 100644 --- a/sdk/nodejs/sdk/src/zrok/api/model/listOrganizations200Response.ts +++ b/sdk/nodejs/sdk/src/zrok/api/model/listOrganizations200Response.ts @@ -2,7 +2,7 @@ * zrok * zrok client access * - * The version of the OpenAPI document: 0.3.0 + * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/sdk/nodejs/sdk/src/zrok/api/model/listOrganizations200ResponseOrganizationsInner.ts b/sdk/nodejs/sdk/src/zrok/api/model/listOrganizations200ResponseOrganizationsInner.ts index f8e968dc..118b7527 100644 --- a/sdk/nodejs/sdk/src/zrok/api/model/listOrganizations200ResponseOrganizationsInner.ts +++ b/sdk/nodejs/sdk/src/zrok/api/model/listOrganizations200ResponseOrganizationsInner.ts @@ -2,7 +2,7 @@ * zrok * zrok client access * - * The version of the OpenAPI document: 0.3.0 + * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). @@ -13,15 +13,15 @@ import { RequestFile } from './models'; export class ListOrganizations200ResponseOrganizationsInner { - 'token'?: string; + 'organizationToken'?: string; 'description'?: string; static discriminator: string | undefined = undefined; static attributeTypeMap: Array<{name: string, baseName: string, type: string}> = [ { - "name": "token", - "baseName": "token", + "name": "organizationToken", + "baseName": "organizationToken", "type": "string" }, { diff --git a/sdk/nodejs/sdk/src/zrok/api/model/loginRequest.ts b/sdk/nodejs/sdk/src/zrok/api/model/loginRequest.ts index e10a6c37..ed868723 100644 --- a/sdk/nodejs/sdk/src/zrok/api/model/loginRequest.ts +++ b/sdk/nodejs/sdk/src/zrok/api/model/loginRequest.ts @@ -2,7 +2,7 @@ * zrok * zrok client access * - * The version of the OpenAPI document: 0.3.0 + * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/sdk/nodejs/sdk/src/zrok/api/model/metrics.ts b/sdk/nodejs/sdk/src/zrok/api/model/metrics.ts index 8a76f49f..526cc796 100644 --- a/sdk/nodejs/sdk/src/zrok/api/model/metrics.ts +++ b/sdk/nodejs/sdk/src/zrok/api/model/metrics.ts @@ -2,7 +2,7 @@ * zrok * zrok client access * - * The version of the OpenAPI document: 0.3.0 + * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/sdk/nodejs/sdk/src/zrok/api/model/metricsSample.ts b/sdk/nodejs/sdk/src/zrok/api/model/metricsSample.ts index 03b05973..a8d52b15 100644 --- a/sdk/nodejs/sdk/src/zrok/api/model/metricsSample.ts +++ b/sdk/nodejs/sdk/src/zrok/api/model/metricsSample.ts @@ -2,7 +2,7 @@ * zrok * zrok client access * - * The version of the OpenAPI document: 0.3.0 + * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/sdk/nodejs/sdk/src/zrok/api/model/models.ts b/sdk/nodejs/sdk/src/zrok/api/model/models.ts index 74aa5b4c..76312ed6 100644 --- a/sdk/nodejs/sdk/src/zrok/api/model/models.ts +++ b/sdk/nodejs/sdk/src/zrok/api/model/models.ts @@ -1,27 +1,28 @@ import localVarRequest from 'request'; +export * from './access201Response'; export * from './accessRequest'; -export * from './accessResponse'; export * from './addOrganizationMemberRequest'; export * from './authUser'; export * from './changePasswordRequest'; +export * from './clientVersionCheckRequest'; export * from './configuration'; -export * from './createAccountRequest'; +export * from './createFrontend201Response'; export * from './createFrontendRequest'; -export * from './createFrontendResponse'; export * from './createIdentity201Response'; export * from './createIdentityRequest'; +export * from './createOrganization201Response'; export * from './createOrganizationRequest'; -export * from './deleteFrontendRequest'; export * from './disableRequest'; export * from './enableRequest'; -export * from './enableResponse'; export * from './environment'; export * from './environmentAndResources'; export * from './frontend'; -export * from './grantsRequest'; +export * from './getSparklines200Response'; +export * from './getSparklinesRequest'; export * from './inviteRequest'; export * from './inviteTokenGenerateRequest'; +export * from './listFrontends200ResponseInner'; export * from './listMemberships200Response'; export * from './listMemberships200ResponseMembershipsInner'; export * from './listOrganizationMembers200Response'; @@ -32,13 +33,10 @@ export * from './loginRequest'; export * from './metrics'; export * from './metricsSample'; export * from './overview'; -export * from './passwordRequirements'; export * from './principal'; -export * from './publicFrontend'; -export * from './regenerateToken200Response'; -export * from './regenerateTokenRequest'; +export * from './regenerateAccountToken200Response'; +export * from './regenerateAccountTokenRequest'; export * from './registerRequest'; -export * from './registerResponse'; export * from './removeOrganizationMemberRequest'; export * from './resetPasswordRequest'; export * from './share'; @@ -47,10 +45,11 @@ export * from './shareResponse'; export * from './sparkDataSample'; export * from './unaccessRequest'; export * from './unshareRequest'; +export * from './updateAccessRequest'; export * from './updateFrontendRequest'; export * from './updateShareRequest'; +export * from './verify200Response'; export * from './verifyRequest'; -export * from './verifyResponse'; import * as fs from 'fs'; @@ -65,28 +64,29 @@ export interface RequestDetailedFile { export type RequestFile = string | Buffer | fs.ReadStream | RequestDetailedFile; +import { Access201Response } from './access201Response'; import { AccessRequest } from './accessRequest'; -import { AccessResponse } from './accessResponse'; import { AddOrganizationMemberRequest } from './addOrganizationMemberRequest'; import { AuthUser } from './authUser'; import { ChangePasswordRequest } from './changePasswordRequest'; +import { ClientVersionCheckRequest } from './clientVersionCheckRequest'; import { Configuration } from './configuration'; -import { CreateAccountRequest } from './createAccountRequest'; +import { CreateFrontend201Response } from './createFrontend201Response'; import { CreateFrontendRequest } from './createFrontendRequest'; -import { CreateFrontendResponse } from './createFrontendResponse'; import { CreateIdentity201Response } from './createIdentity201Response'; import { CreateIdentityRequest } from './createIdentityRequest'; +import { CreateOrganization201Response } from './createOrganization201Response'; import { CreateOrganizationRequest } from './createOrganizationRequest'; -import { DeleteFrontendRequest } from './deleteFrontendRequest'; import { DisableRequest } from './disableRequest'; import { EnableRequest } from './enableRequest'; -import { EnableResponse } from './enableResponse'; import { Environment } from './environment'; import { EnvironmentAndResources } from './environmentAndResources'; import { Frontend } from './frontend'; -import { GrantsRequest } from './grantsRequest'; +import { GetSparklines200Response } from './getSparklines200Response'; +import { GetSparklinesRequest } from './getSparklinesRequest'; import { InviteRequest } from './inviteRequest'; import { InviteTokenGenerateRequest } from './inviteTokenGenerateRequest'; +import { ListFrontends200ResponseInner } from './listFrontends200ResponseInner'; import { ListMemberships200Response } from './listMemberships200Response'; import { ListMemberships200ResponseMembershipsInner } from './listMemberships200ResponseMembershipsInner'; import { ListOrganizationMembers200Response } from './listOrganizationMembers200Response'; @@ -97,13 +97,10 @@ import { LoginRequest } from './loginRequest'; import { Metrics } from './metrics'; import { MetricsSample } from './metricsSample'; import { Overview } from './overview'; -import { PasswordRequirements } from './passwordRequirements'; import { Principal } from './principal'; -import { PublicFrontend } from './publicFrontend'; -import { RegenerateToken200Response } from './regenerateToken200Response'; -import { RegenerateTokenRequest } from './regenerateTokenRequest'; +import { RegenerateAccountToken200Response } from './regenerateAccountToken200Response'; +import { RegenerateAccountTokenRequest } from './regenerateAccountTokenRequest'; import { RegisterRequest } from './registerRequest'; -import { RegisterResponse } from './registerResponse'; import { RemoveOrganizationMemberRequest } from './removeOrganizationMemberRequest'; import { ResetPasswordRequest } from './resetPasswordRequest'; import { Share } from './share'; @@ -112,10 +109,11 @@ import { ShareResponse } from './shareResponse'; import { SparkDataSample } from './sparkDataSample'; import { UnaccessRequest } from './unaccessRequest'; import { UnshareRequest } from './unshareRequest'; +import { UpdateAccessRequest } from './updateAccessRequest'; import { UpdateFrontendRequest } from './updateFrontendRequest'; import { UpdateShareRequest } from './updateShareRequest'; +import { Verify200Response } from './verify200Response'; import { VerifyRequest } from './verifyRequest'; -import { VerifyResponse } from './verifyResponse'; /* tslint:disable:no-unused-variable */ let primitives = [ @@ -138,28 +136,29 @@ let enumsMap: {[index: string]: any} = { } let typeMap: {[index: string]: any} = { + "Access201Response": Access201Response, "AccessRequest": AccessRequest, - "AccessResponse": AccessResponse, "AddOrganizationMemberRequest": AddOrganizationMemberRequest, "AuthUser": AuthUser, "ChangePasswordRequest": ChangePasswordRequest, + "ClientVersionCheckRequest": ClientVersionCheckRequest, "Configuration": Configuration, - "CreateAccountRequest": CreateAccountRequest, + "CreateFrontend201Response": CreateFrontend201Response, "CreateFrontendRequest": CreateFrontendRequest, - "CreateFrontendResponse": CreateFrontendResponse, "CreateIdentity201Response": CreateIdentity201Response, "CreateIdentityRequest": CreateIdentityRequest, + "CreateOrganization201Response": CreateOrganization201Response, "CreateOrganizationRequest": CreateOrganizationRequest, - "DeleteFrontendRequest": DeleteFrontendRequest, "DisableRequest": DisableRequest, "EnableRequest": EnableRequest, - "EnableResponse": EnableResponse, "Environment": Environment, "EnvironmentAndResources": EnvironmentAndResources, "Frontend": Frontend, - "GrantsRequest": GrantsRequest, + "GetSparklines200Response": GetSparklines200Response, + "GetSparklinesRequest": GetSparklinesRequest, "InviteRequest": InviteRequest, "InviteTokenGenerateRequest": InviteTokenGenerateRequest, + "ListFrontends200ResponseInner": ListFrontends200ResponseInner, "ListMemberships200Response": ListMemberships200Response, "ListMemberships200ResponseMembershipsInner": ListMemberships200ResponseMembershipsInner, "ListOrganizationMembers200Response": ListOrganizationMembers200Response, @@ -170,13 +169,10 @@ let typeMap: {[index: string]: any} = { "Metrics": Metrics, "MetricsSample": MetricsSample, "Overview": Overview, - "PasswordRequirements": PasswordRequirements, "Principal": Principal, - "PublicFrontend": PublicFrontend, - "RegenerateToken200Response": RegenerateToken200Response, - "RegenerateTokenRequest": RegenerateTokenRequest, + "RegenerateAccountToken200Response": RegenerateAccountToken200Response, + "RegenerateAccountTokenRequest": RegenerateAccountTokenRequest, "RegisterRequest": RegisterRequest, - "RegisterResponse": RegisterResponse, "RemoveOrganizationMemberRequest": RemoveOrganizationMemberRequest, "ResetPasswordRequest": ResetPasswordRequest, "Share": Share, @@ -185,10 +181,11 @@ let typeMap: {[index: string]: any} = { "SparkDataSample": SparkDataSample, "UnaccessRequest": UnaccessRequest, "UnshareRequest": UnshareRequest, + "UpdateAccessRequest": UpdateAccessRequest, "UpdateFrontendRequest": UpdateFrontendRequest, "UpdateShareRequest": UpdateShareRequest, + "Verify200Response": Verify200Response, "VerifyRequest": VerifyRequest, - "VerifyResponse": VerifyResponse, } export class ObjectSerializer { diff --git a/sdk/nodejs/sdk/src/zrok/api/model/overview.ts b/sdk/nodejs/sdk/src/zrok/api/model/overview.ts index 44a46d76..cadd20f5 100644 --- a/sdk/nodejs/sdk/src/zrok/api/model/overview.ts +++ b/sdk/nodejs/sdk/src/zrok/api/model/overview.ts @@ -2,7 +2,7 @@ * zrok * zrok client access * - * The version of the OpenAPI document: 0.3.0 + * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/sdk/nodejs/sdk/src/zrok/api/model/passwordRequirements.ts b/sdk/nodejs/sdk/src/zrok/api/model/passwordRequirements.ts deleted file mode 100644 index c082d0a4..00000000 --- a/sdk/nodejs/sdk/src/zrok/api/model/passwordRequirements.ts +++ /dev/null @@ -1,55 +0,0 @@ -/** - * zrok - * zrok client access - * - * The version of the OpenAPI document: 0.3.0 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - -import { RequestFile } from './models'; - -export class PasswordRequirements { - 'length'?: number; - 'requireCapital'?: boolean; - 'requireNumeric'?: boolean; - 'requireSpecial'?: boolean; - 'validSpecialCharacters'?: string; - - static discriminator: string | undefined = undefined; - - static attributeTypeMap: Array<{name: string, baseName: string, type: string}> = [ - { - "name": "length", - "baseName": "length", - "type": "number" - }, - { - "name": "requireCapital", - "baseName": "requireCapital", - "type": "boolean" - }, - { - "name": "requireNumeric", - "baseName": "requireNumeric", - "type": "boolean" - }, - { - "name": "requireSpecial", - "baseName": "requireSpecial", - "type": "boolean" - }, - { - "name": "validSpecialCharacters", - "baseName": "validSpecialCharacters", - "type": "string" - } ]; - - static getAttributeTypeMap() { - return PasswordRequirements.attributeTypeMap; - } -} - diff --git a/sdk/nodejs/sdk/src/zrok/api/model/principal.ts b/sdk/nodejs/sdk/src/zrok/api/model/principal.ts index 33038f2b..1c9c3b15 100644 --- a/sdk/nodejs/sdk/src/zrok/api/model/principal.ts +++ b/sdk/nodejs/sdk/src/zrok/api/model/principal.ts @@ -2,7 +2,7 @@ * zrok * zrok client access * - * The version of the OpenAPI document: 0.3.0 + * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/sdk/nodejs/sdk/src/zrok/api/model/regenerateAccountToken200Response.ts b/sdk/nodejs/sdk/src/zrok/api/model/regenerateAccountToken200Response.ts new file mode 100644 index 00000000..8548448b --- /dev/null +++ b/sdk/nodejs/sdk/src/zrok/api/model/regenerateAccountToken200Response.ts @@ -0,0 +1,31 @@ +/** + * zrok + * zrok client access + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +import { RequestFile } from './models'; + +export class RegenerateAccountToken200Response { + 'accountToken'?: string; + + static discriminator: string | undefined = undefined; + + static attributeTypeMap: Array<{name: string, baseName: string, type: string}> = [ + { + "name": "accountToken", + "baseName": "accountToken", + "type": "string" + } ]; + + static getAttributeTypeMap() { + return RegenerateAccountToken200Response.attributeTypeMap; + } +} + diff --git a/sdk/nodejs/sdk/src/zrok/api/model/resetPasswordRequestRequest.ts b/sdk/nodejs/sdk/src/zrok/api/model/regenerateAccountTokenRequest.ts similarity index 79% rename from sdk/nodejs/sdk/src/zrok/api/model/resetPasswordRequestRequest.ts rename to sdk/nodejs/sdk/src/zrok/api/model/regenerateAccountTokenRequest.ts index aa666400..3cbe2abf 100644 --- a/sdk/nodejs/sdk/src/zrok/api/model/resetPasswordRequestRequest.ts +++ b/sdk/nodejs/sdk/src/zrok/api/model/regenerateAccountTokenRequest.ts @@ -2,7 +2,7 @@ * zrok * zrok client access * - * The version of the OpenAPI document: 0.3.0 + * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). @@ -12,7 +12,7 @@ import { RequestFile } from './models'; -export class ResetPasswordRequestRequest { +export class RegenerateAccountTokenRequest { 'emailAddress'?: string; static discriminator: string | undefined = undefined; @@ -25,7 +25,7 @@ export class ResetPasswordRequestRequest { } ]; static getAttributeTypeMap() { - return ResetPasswordRequestRequest.attributeTypeMap; + return RegenerateAccountTokenRequest.attributeTypeMap; } } diff --git a/sdk/nodejs/sdk/src/zrok/api/model/regenerateToken200Response.ts b/sdk/nodejs/sdk/src/zrok/api/model/regenerateToken200Response.ts index af10ab0c..355b5ea7 100644 --- a/sdk/nodejs/sdk/src/zrok/api/model/regenerateToken200Response.ts +++ b/sdk/nodejs/sdk/src/zrok/api/model/regenerateToken200Response.ts @@ -2,7 +2,7 @@ * zrok * zrok client access * - * The version of the OpenAPI document: 0.3.0 + * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/sdk/nodejs/sdk/src/zrok/api/model/regenerateTokenRequest.ts b/sdk/nodejs/sdk/src/zrok/api/model/regenerateTokenRequest.ts index 63c881e9..869ab3f9 100644 --- a/sdk/nodejs/sdk/src/zrok/api/model/regenerateTokenRequest.ts +++ b/sdk/nodejs/sdk/src/zrok/api/model/regenerateTokenRequest.ts @@ -2,7 +2,7 @@ * zrok * zrok client access * - * The version of the OpenAPI document: 0.3.0 + * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/sdk/nodejs/sdk/src/zrok/api/model/registerResponse.ts b/sdk/nodejs/sdk/src/zrok/api/model/register200Response.ts similarity index 81% rename from sdk/nodejs/sdk/src/zrok/api/model/registerResponse.ts rename to sdk/nodejs/sdk/src/zrok/api/model/register200Response.ts index b8716d71..e9438ff9 100644 --- a/sdk/nodejs/sdk/src/zrok/api/model/registerResponse.ts +++ b/sdk/nodejs/sdk/src/zrok/api/model/register200Response.ts @@ -2,7 +2,7 @@ * zrok * zrok client access * - * The version of the OpenAPI document: 0.3.0 + * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). @@ -12,7 +12,7 @@ import { RequestFile } from './models'; -export class RegisterResponse { +export class Register200Response { 'token'?: string; static discriminator: string | undefined = undefined; @@ -25,7 +25,7 @@ export class RegisterResponse { } ]; static getAttributeTypeMap() { - return RegisterResponse.attributeTypeMap; + return Register200Response.attributeTypeMap; } } diff --git a/sdk/nodejs/sdk/src/zrok/api/model/registerRequest.ts b/sdk/nodejs/sdk/src/zrok/api/model/registerRequest.ts index 379678c3..276123eb 100644 --- a/sdk/nodejs/sdk/src/zrok/api/model/registerRequest.ts +++ b/sdk/nodejs/sdk/src/zrok/api/model/registerRequest.ts @@ -2,7 +2,7 @@ * zrok * zrok client access * - * The version of the OpenAPI document: 0.3.0 + * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). @@ -13,15 +13,15 @@ import { RequestFile } from './models'; export class RegisterRequest { - 'token'?: string; + 'registerToken'?: string; 'password'?: string; static discriminator: string | undefined = undefined; static attributeTypeMap: Array<{name: string, baseName: string, type: string}> = [ { - "name": "token", - "baseName": "token", + "name": "registerToken", + "baseName": "registerToken", "type": "string" }, { diff --git a/sdk/nodejs/sdk/src/zrok/api/model/removeOrganizationMemberRequest.ts b/sdk/nodejs/sdk/src/zrok/api/model/removeOrganizationMemberRequest.ts index 8caf373b..392f707b 100644 --- a/sdk/nodejs/sdk/src/zrok/api/model/removeOrganizationMemberRequest.ts +++ b/sdk/nodejs/sdk/src/zrok/api/model/removeOrganizationMemberRequest.ts @@ -2,7 +2,7 @@ * zrok * zrok client access * - * The version of the OpenAPI document: 0.3.0 + * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). @@ -13,15 +13,15 @@ import { RequestFile } from './models'; export class RemoveOrganizationMemberRequest { - 'token'?: string; + 'organizationToken'?: string; 'email'?: string; static discriminator: string | undefined = undefined; static attributeTypeMap: Array<{name: string, baseName: string, type: string}> = [ { - "name": "token", - "baseName": "token", + "name": "organizationToken", + "baseName": "organizationToken", "type": "string" }, { diff --git a/sdk/nodejs/sdk/src/zrok/api/model/removeOrganizationMemberRequestOrganizationsInner.ts b/sdk/nodejs/sdk/src/zrok/api/model/removeOrganizationMemberRequestOrganizationsInner.ts deleted file mode 100644 index 1a611d55..00000000 --- a/sdk/nodejs/sdk/src/zrok/api/model/removeOrganizationMemberRequestOrganizationsInner.ts +++ /dev/null @@ -1,37 +0,0 @@ -/** - * zrok - * zrok client access - * - * The version of the OpenAPI document: 0.3.0 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - -import { RequestFile } from './models'; - -export class RemoveOrganizationMemberRequestOrganizationsInner { - 'token'?: string; - 'email'?: string; - - static discriminator: string | undefined = undefined; - - static attributeTypeMap: Array<{name: string, baseName: string, type: string}> = [ - { - "name": "token", - "baseName": "token", - "type": "string" - }, - { - "name": "email", - "baseName": "email", - "type": "string" - } ]; - - static getAttributeTypeMap() { - return RemoveOrganizationMemberRequestOrganizationsInner.attributeTypeMap; - } -} - diff --git a/sdk/nodejs/sdk/src/zrok/api/model/resetPasswordRequest.ts b/sdk/nodejs/sdk/src/zrok/api/model/resetPasswordRequest.ts index 931d7136..7418c322 100644 --- a/sdk/nodejs/sdk/src/zrok/api/model/resetPasswordRequest.ts +++ b/sdk/nodejs/sdk/src/zrok/api/model/resetPasswordRequest.ts @@ -2,7 +2,7 @@ * zrok * zrok client access * - * The version of the OpenAPI document: 0.3.0 + * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). @@ -13,15 +13,15 @@ import { RequestFile } from './models'; export class ResetPasswordRequest { - 'token'?: string; + 'resetToken'?: string; 'password'?: string; static discriminator: string | undefined = undefined; static attributeTypeMap: Array<{name: string, baseName: string, type: string}> = [ { - "name": "token", - "baseName": "token", + "name": "resetToken", + "baseName": "resetToken", "type": "string" }, { diff --git a/sdk/nodejs/sdk/src/zrok/api/model/share.ts b/sdk/nodejs/sdk/src/zrok/api/model/share.ts index 41b059d8..bf4ffa9e 100644 --- a/sdk/nodejs/sdk/src/zrok/api/model/share.ts +++ b/sdk/nodejs/sdk/src/zrok/api/model/share.ts @@ -2,7 +2,7 @@ * zrok * zrok client access * - * The version of the OpenAPI document: 0.3.0 + * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). @@ -14,7 +14,7 @@ import { RequestFile } from './models'; import { SparkDataSample } from './sparkDataSample'; export class Share { - 'token'?: string; + 'shareToken'?: string; 'zId'?: string; 'shareMode'?: string; 'backendMode'?: string; @@ -31,8 +31,8 @@ export class Share { static attributeTypeMap: Array<{name: string, baseName: string, type: string}> = [ { - "name": "token", - "baseName": "token", + "name": "shareToken", + "baseName": "shareToken", "type": "string" }, { diff --git a/sdk/nodejs/sdk/src/zrok/api/model/shareRequest.ts b/sdk/nodejs/sdk/src/zrok/api/model/shareRequest.ts index 086ba7d8..13b5071d 100644 --- a/sdk/nodejs/sdk/src/zrok/api/model/shareRequest.ts +++ b/sdk/nodejs/sdk/src/zrok/api/model/shareRequest.ts @@ -2,7 +2,7 @@ * zrok * zrok client access * - * The version of the OpenAPI document: 0.3.0 + * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/sdk/nodejs/sdk/src/zrok/api/model/shareResponse.ts b/sdk/nodejs/sdk/src/zrok/api/model/shareResponse.ts index 9b134a09..e5821d11 100644 --- a/sdk/nodejs/sdk/src/zrok/api/model/shareResponse.ts +++ b/sdk/nodejs/sdk/src/zrok/api/model/shareResponse.ts @@ -2,7 +2,7 @@ * zrok * zrok client access * - * The version of the OpenAPI document: 0.3.0 + * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). @@ -14,7 +14,7 @@ import { RequestFile } from './models'; export class ShareResponse { 'frontendProxyEndpoints'?: Array; - 'shrToken'?: string; + 'shareToken'?: string; static discriminator: string | undefined = undefined; @@ -25,8 +25,8 @@ export class ShareResponse { "type": "Array" }, { - "name": "shrToken", - "baseName": "shrToken", + "name": "shareToken", + "baseName": "shareToken", "type": "string" } ]; diff --git a/sdk/nodejs/sdk/src/zrok/api/model/sparkDataSample.ts b/sdk/nodejs/sdk/src/zrok/api/model/sparkDataSample.ts index b5fb3c07..dc331435 100644 --- a/sdk/nodejs/sdk/src/zrok/api/model/sparkDataSample.ts +++ b/sdk/nodejs/sdk/src/zrok/api/model/sparkDataSample.ts @@ -2,7 +2,7 @@ * zrok * zrok client access * - * The version of the OpenAPI document: 0.3.0 + * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/sdk/nodejs/sdk/src/zrok/api/model/unaccessRequest.ts b/sdk/nodejs/sdk/src/zrok/api/model/unaccessRequest.ts index dbacc6cb..8404fc4e 100644 --- a/sdk/nodejs/sdk/src/zrok/api/model/unaccessRequest.ts +++ b/sdk/nodejs/sdk/src/zrok/api/model/unaccessRequest.ts @@ -2,7 +2,7 @@ * zrok * zrok client access * - * The version of the OpenAPI document: 0.3.0 + * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). @@ -15,7 +15,7 @@ import { RequestFile } from './models'; export class UnaccessRequest { 'frontendToken'?: string; 'envZId'?: string; - 'shrToken'?: string; + 'shareToken'?: string; static discriminator: string | undefined = undefined; @@ -31,8 +31,8 @@ export class UnaccessRequest { "type": "string" }, { - "name": "shrToken", - "baseName": "shrToken", + "name": "shareToken", + "baseName": "shareToken", "type": "string" } ]; diff --git a/sdk/nodejs/sdk/src/zrok/api/model/unshareRequest.ts b/sdk/nodejs/sdk/src/zrok/api/model/unshareRequest.ts index bab4fae8..91983732 100644 --- a/sdk/nodejs/sdk/src/zrok/api/model/unshareRequest.ts +++ b/sdk/nodejs/sdk/src/zrok/api/model/unshareRequest.ts @@ -2,7 +2,7 @@ * zrok * zrok client access * - * The version of the OpenAPI document: 0.3.0 + * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). @@ -14,7 +14,7 @@ import { RequestFile } from './models'; export class UnshareRequest { 'envZId'?: string; - 'shrToken'?: string; + 'shareToken'?: string; 'reserved'?: boolean; static discriminator: string | undefined = undefined; @@ -26,8 +26,8 @@ export class UnshareRequest { "type": "string" }, { - "name": "shrToken", - "baseName": "shrToken", + "name": "shareToken", + "baseName": "shareToken", "type": "string" }, { diff --git a/sdk/nodejs/sdk/src/zrok/api/model/enableResponse.ts b/sdk/nodejs/sdk/src/zrok/api/model/updateAccessRequest.ts similarity index 52% rename from sdk/nodejs/sdk/src/zrok/api/model/enableResponse.ts rename to sdk/nodejs/sdk/src/zrok/api/model/updateAccessRequest.ts index ef3e144c..f0167d45 100644 --- a/sdk/nodejs/sdk/src/zrok/api/model/enableResponse.ts +++ b/sdk/nodejs/sdk/src/zrok/api/model/updateAccessRequest.ts @@ -2,7 +2,7 @@ * zrok * zrok client access * - * The version of the OpenAPI document: 0.3.0 + * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). @@ -12,26 +12,32 @@ import { RequestFile } from './models'; -export class EnableResponse { - 'identity'?: string; - 'cfg'?: string; +export class UpdateAccessRequest { + 'frontendToken'?: string; + 'bindAddress'?: string; + 'description'?: string; static discriminator: string | undefined = undefined; static attributeTypeMap: Array<{name: string, baseName: string, type: string}> = [ { - "name": "identity", - "baseName": "identity", + "name": "frontendToken", + "baseName": "frontendToken", "type": "string" }, { - "name": "cfg", - "baseName": "cfg", + "name": "bindAddress", + "baseName": "bindAddress", + "type": "string" + }, + { + "name": "description", + "baseName": "description", "type": "string" } ]; static getAttributeTypeMap() { - return EnableResponse.attributeTypeMap; + return UpdateAccessRequest.attributeTypeMap; } } diff --git a/sdk/nodejs/sdk/src/zrok/api/model/updateFrontendRequest.ts b/sdk/nodejs/sdk/src/zrok/api/model/updateFrontendRequest.ts index 83692f6b..cbc7deb0 100644 --- a/sdk/nodejs/sdk/src/zrok/api/model/updateFrontendRequest.ts +++ b/sdk/nodejs/sdk/src/zrok/api/model/updateFrontendRequest.ts @@ -2,7 +2,7 @@ * zrok * zrok client access * - * The version of the OpenAPI document: 0.3.0 + * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/sdk/nodejs/sdk/src/zrok/api/model/updateShareRequest.ts b/sdk/nodejs/sdk/src/zrok/api/model/updateShareRequest.ts index d3223d34..cc43f1c7 100644 --- a/sdk/nodejs/sdk/src/zrok/api/model/updateShareRequest.ts +++ b/sdk/nodejs/sdk/src/zrok/api/model/updateShareRequest.ts @@ -2,7 +2,7 @@ * zrok * zrok client access * - * The version of the OpenAPI document: 0.3.0 + * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). @@ -13,7 +13,7 @@ import { RequestFile } from './models'; export class UpdateShareRequest { - 'shrToken'?: string; + 'shareToken'?: string; 'backendProxyEndpoint'?: string; 'addAccessGrants'?: Array; 'removeAccessGrants'?: Array; @@ -22,8 +22,8 @@ export class UpdateShareRequest { static attributeTypeMap: Array<{name: string, baseName: string, type: string}> = [ { - "name": "shrToken", - "baseName": "shrToken", + "name": "shareToken", + "baseName": "shareToken", "type": "string" }, { diff --git a/sdk/nodejs/sdk/src/zrok/api/model/verifyResponse.ts b/sdk/nodejs/sdk/src/zrok/api/model/verify200Response.ts similarity index 81% rename from sdk/nodejs/sdk/src/zrok/api/model/verifyResponse.ts rename to sdk/nodejs/sdk/src/zrok/api/model/verify200Response.ts index a2d01f63..7b29c54f 100644 --- a/sdk/nodejs/sdk/src/zrok/api/model/verifyResponse.ts +++ b/sdk/nodejs/sdk/src/zrok/api/model/verify200Response.ts @@ -2,7 +2,7 @@ * zrok * zrok client access * - * The version of the OpenAPI document: 0.3.0 + * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). @@ -12,7 +12,7 @@ import { RequestFile } from './models'; -export class VerifyResponse { +export class Verify200Response { 'email'?: string; static discriminator: string | undefined = undefined; @@ -25,7 +25,7 @@ export class VerifyResponse { } ]; static getAttributeTypeMap() { - return VerifyResponse.attributeTypeMap; + return Verify200Response.attributeTypeMap; } } diff --git a/sdk/nodejs/sdk/src/zrok/api/model/verifyRequest.ts b/sdk/nodejs/sdk/src/zrok/api/model/verifyRequest.ts index b9a01587..413e7c5b 100644 --- a/sdk/nodejs/sdk/src/zrok/api/model/verifyRequest.ts +++ b/sdk/nodejs/sdk/src/zrok/api/model/verifyRequest.ts @@ -2,7 +2,7 @@ * zrok * zrok client access * - * The version of the OpenAPI document: 0.3.0 + * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). @@ -13,14 +13,14 @@ import { RequestFile } from './models'; export class VerifyRequest { - 'token'?: string; + 'registerToken'?: string; static discriminator: string | undefined = undefined; static attributeTypeMap: Array<{name: string, baseName: string, type: string}> = [ { - "name": "token", - "baseName": "token", + "name": "registerToken", + "baseName": "registerToken", "type": "string" } ]; diff --git a/sdk/nodejs/sdk/src/zrok/api/models/Frontend.ts b/sdk/nodejs/sdk/src/zrok/api/models/Frontend.ts deleted file mode 100644 index 27e9a2fc..00000000 --- a/sdk/nodejs/sdk/src/zrok/api/models/Frontend.ts +++ /dev/null @@ -1,97 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * zrok - * zrok client access - * - * The version of the OpenAPI document: 0.3.0 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - -import { exists, mapValues } from '../runtime'; -/** - * - * @export - * @interface Frontend - */ -export interface Frontend { - /** - * - * @type {number} - * @memberof Frontend - */ - id?: number; - /** - * - * @type {string} - * @memberof Frontend - */ - shrToken?: string; - /** - * - * @type {string} - * @memberof Frontend - */ - zId?: string; - /** - * - * @type {number} - * @memberof Frontend - */ - createdAt?: number; - /** - * - * @type {number} - * @memberof Frontend - */ - updatedAt?: number; -} - -/** - * Check if a given object implements the Frontend interface. - */ -export function instanceOfFrontend(value: object): boolean { - let isInstance = true; - - return isInstance; -} - -export function FrontendFromJSON(json: any): Frontend { - return FrontendFromJSONTyped(json, false); -} - -export function FrontendFromJSONTyped(json: any, ignoreDiscriminator: boolean): Frontend { - if ((json === undefined) || (json === null)) { - return json; - } - return { - - 'id': !exists(json, 'id') ? undefined : json['id'], - 'shrToken': !exists(json, 'shrToken') ? undefined : json['shrToken'], - 'zId': !exists(json, 'zId') ? undefined : json['zId'], - 'createdAt': !exists(json, 'createdAt') ? undefined : json['createdAt'], - 'updatedAt': !exists(json, 'updatedAt') ? undefined : json['updatedAt'], - }; -} - -export function FrontendToJSON(value?: Frontend | null): any { - if (value === undefined) { - return undefined; - } - if (value === null) { - return null; - } - return { - - 'id': value.id, - 'shrToken': value.shrToken, - 'zId': value.zId, - 'createdAt': value.createdAt, - 'updatedAt': value.updatedAt, - }; -} - diff --git a/sdk/nodejs/sdk/src/zrok/api/models/ModelConfiguration.ts b/sdk/nodejs/sdk/src/zrok/api/models/ModelConfiguration.ts deleted file mode 100644 index 966dbe28..00000000 --- a/sdk/nodejs/sdk/src/zrok/api/models/ModelConfiguration.ts +++ /dev/null @@ -1,112 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * zrok - * zrok client access - * - * The version of the OpenAPI document: 0.3.0 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - -import { exists, mapValues } from '../runtime'; -import type { PasswordRequirements } from './PasswordRequirements'; -import { - PasswordRequirementsFromJSON, - PasswordRequirementsFromJSONTyped, - PasswordRequirementsToJSON, -} from './PasswordRequirements'; - -/** - * - * @export - * @interface ModelConfiguration - */ -export interface ModelConfiguration { - /** - * - * @type {string} - * @memberof ModelConfiguration - */ - version?: string; - /** - * - * @type {string} - * @memberof ModelConfiguration - */ - touLink?: string; - /** - * - * @type {boolean} - * @memberof ModelConfiguration - */ - invitesOpen?: boolean; - /** - * - * @type {boolean} - * @memberof ModelConfiguration - */ - requiresInviteToken?: boolean; - /** - * - * @type {string} - * @memberof ModelConfiguration - */ - inviteTokenContact?: string; - /** - * - * @type {PasswordRequirements} - * @memberof ModelConfiguration - */ - passwordRequirements?: PasswordRequirements; -} - -/** - * Check if a given object implements the ModelConfiguration interface. - */ -export function instanceOfModelConfiguration(value: object): boolean { - let isInstance = true; - - return isInstance; -} - -export function ModelConfigurationFromJSON(json: any): ModelConfiguration { - return ModelConfigurationFromJSONTyped(json, false); -} - -export function ModelConfigurationFromJSONTyped(json: any, ignoreDiscriminator: boolean): ModelConfiguration { - if ((json === undefined) || (json === null)) { - return json; - } - return { - - 'version': !exists(json, 'version') ? undefined : json['version'], - 'touLink': !exists(json, 'touLink') ? undefined : json['touLink'], - 'invitesOpen': !exists(json, 'invitesOpen') ? undefined : json['invitesOpen'], - 'requiresInviteToken': !exists(json, 'requiresInviteToken') ? undefined : json['requiresInviteToken'], - 'inviteTokenContact': !exists(json, 'inviteTokenContact') ? undefined : json['inviteTokenContact'], - 'passwordRequirements': !exists(json, 'passwordRequirements') ? undefined : PasswordRequirementsFromJSON(json['passwordRequirements']), - }; -} - -export function ModelConfigurationToJSON(value?: ModelConfiguration | null): any { - if (value === undefined) { - return undefined; - } - if (value === null) { - return null; - } - return { - - 'version': value.version, - 'touLink': value.touLink, - 'invitesOpen': value.invitesOpen, - 'requiresInviteToken': value.requiresInviteToken, - 'inviteTokenContact': value.inviteTokenContact, - 'passwordRequirements': PasswordRequirementsToJSON(value.passwordRequirements), - }; -} - diff --git a/sdk/nodejs/sdk/src/zrok/api/models/ResetPasswordRequestRequest.ts b/sdk/nodejs/sdk/src/zrok/api/models/ResetPasswordRequestRequest.ts deleted file mode 100644 index 994be5ad..00000000 --- a/sdk/nodejs/sdk/src/zrok/api/models/ResetPasswordRequestRequest.ts +++ /dev/null @@ -1,65 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * zrok - * zrok client access - * - * The version of the OpenAPI document: 0.3.0 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - -import { exists, mapValues } from '../runtime'; -/** - * - * @export - * @interface ResetPasswordRequestRequest - */ -export interface ResetPasswordRequestRequest { - /** - * - * @type {string} - * @memberof ResetPasswordRequestRequest - */ - emailAddress?: string; -} - -/** - * Check if a given object implements the ResetPasswordRequestRequest interface. - */ -export function instanceOfResetPasswordRequestRequest(value: object): boolean { - let isInstance = true; - - return isInstance; -} - -export function ResetPasswordRequestRequestFromJSON(json: any): ResetPasswordRequestRequest { - return ResetPasswordRequestRequestFromJSONTyped(json, false); -} - -export function ResetPasswordRequestRequestFromJSONTyped(json: any, ignoreDiscriminator: boolean): ResetPasswordRequestRequest { - if ((json === undefined) || (json === null)) { - return json; - } - return { - - 'emailAddress': !exists(json, 'emailAddress') ? undefined : json['emailAddress'], - }; -} - -export function ResetPasswordRequestRequestToJSON(value?: ResetPasswordRequestRequest | null): any { - if (value === undefined) { - return undefined; - } - if (value === null) { - return null; - } - return { - - 'emailAddress': value.emailAddress, - }; -} - diff --git a/sdk/nodejs/sdk/src/zrok/api/models/ShareRequest.ts b/sdk/nodejs/sdk/src/zrok/api/models/ShareRequest.ts deleted file mode 100644 index ecb0deae..00000000 --- a/sdk/nodejs/sdk/src/zrok/api/models/ShareRequest.ts +++ /dev/null @@ -1,184 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * zrok - * zrok client access - * - * The version of the OpenAPI document: 0.3.0 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - -import { exists, mapValues } from '../runtime'; -import type { AuthUser } from './AuthUser'; -import { - AuthUserFromJSON, - AuthUserFromJSONTyped, - AuthUserToJSON, -} from './AuthUser'; - -/** - * - * @export - * @interface ShareRequest - */ -export interface ShareRequest { - /** - * - * @type {string} - * @memberof ShareRequest - */ - envZId?: string; - /** - * - * @type {string} - * @memberof ShareRequest - */ - shareMode?: ShareRequestShareModeEnum; - /** - * - * @type {Array} - * @memberof ShareRequest - */ - frontendSelection?: Array; - /** - * - * @type {string} - * @memberof ShareRequest - */ - backendMode?: ShareRequestBackendModeEnum; - /** - * - * @type {string} - * @memberof ShareRequest - */ - backendProxyEndpoint?: string; - /** - * - * @type {string} - * @memberof ShareRequest - */ - authScheme?: string; - /** - * - * @type {Array} - * @memberof ShareRequest - */ - authUsers?: Array; - /** - * - * @type {string} - * @memberof ShareRequest - */ - oauthProvider?: ShareRequestOauthProviderEnum; - /** - * - * @type {Array} - * @memberof ShareRequest - */ - oauthEmailDomains?: Array; - /** - * - * @type {string} - * @memberof ShareRequest - */ - oauthAuthorizationCheckInterval?: string; - /** - * - * @type {boolean} - * @memberof ShareRequest - */ - reserved?: boolean; -} - - -/** - * @export - */ -export const ShareRequestShareModeEnum = { - Public: 'public', - Private: 'private' -} as const; -export type ShareRequestShareModeEnum = typeof ShareRequestShareModeEnum[keyof typeof ShareRequestShareModeEnum]; - -/** - * @export - */ -export const ShareRequestBackendModeEnum = { - Proxy: 'proxy', - Web: 'web', - TcpTunnel: 'tcpTunnel', - UdpTunnel: 'udpTunnel', - Caddy: 'caddy' -} as const; -export type ShareRequestBackendModeEnum = typeof ShareRequestBackendModeEnum[keyof typeof ShareRequestBackendModeEnum]; - -/** - * @export - */ -export const ShareRequestOauthProviderEnum = { - Github: 'github', - Google: 'google' -} as const; -export type ShareRequestOauthProviderEnum = typeof ShareRequestOauthProviderEnum[keyof typeof ShareRequestOauthProviderEnum]; - - -/** - * Check if a given object implements the ShareRequest interface. - */ -export function instanceOfShareRequest(value: object): boolean { - let isInstance = true; - - return isInstance; -} - -export function ShareRequestFromJSON(json: any): ShareRequest { - return ShareRequestFromJSONTyped(json, false); -} - -export function ShareRequestFromJSONTyped(json: any, ignoreDiscriminator: boolean): ShareRequest { - if ((json === undefined) || (json === null)) { - return json; - } - return { - - 'envZId': !exists(json, 'envZId') ? undefined : json['envZId'], - 'shareMode': !exists(json, 'shareMode') ? undefined : json['shareMode'], - 'frontendSelection': !exists(json, 'frontendSelection') ? undefined : json['frontendSelection'], - 'backendMode': !exists(json, 'backendMode') ? undefined : json['backendMode'], - 'backendProxyEndpoint': !exists(json, 'backendProxyEndpoint') ? undefined : json['backendProxyEndpoint'], - 'authScheme': !exists(json, 'authScheme') ? undefined : json['authScheme'], - 'authUsers': !exists(json, 'authUsers') ? undefined : ((json['authUsers'] as Array).map(AuthUserFromJSON)), - 'oauthProvider': !exists(json, 'oauthProvider') ? undefined : json['oauthProvider'], - 'oauthEmailDomains': !exists(json, 'oauthEmailDomains') ? undefined : json['oauthEmailDomains'], - 'oauthAuthorizationCheckInterval': !exists(json, 'oauthAuthorizationCheckInterval') ? undefined : json['oauthAuthorizationCheckInterval'], - 'reserved': !exists(json, 'reserved') ? undefined : json['reserved'], - }; -} - -export function ShareRequestToJSON(value?: ShareRequest | null): any { - if (value === undefined) { - return undefined; - } - if (value === null) { - return null; - } - return { - - 'envZId': value.envZId, - 'shareMode': value.shareMode, - 'frontendSelection': value.frontendSelection, - 'backendMode': value.backendMode, - 'backendProxyEndpoint': value.backendProxyEndpoint, - 'authScheme': value.authScheme, - 'authUsers': value.authUsers === undefined ? undefined : ((value.authUsers as Array).map(AuthUserToJSON)), - 'oauthProvider': value.oauthProvider, - 'oauthEmailDomains': value.oauthEmailDomains, - 'oauthAuthorizationCheckInterval': value.oauthAuthorizationCheckInterval, - 'reserved': value.reserved, - }; -} - diff --git a/sdk/nodejs/sdk/src/zrok/api/models/UpdateShareRequest.ts b/sdk/nodejs/sdk/src/zrok/api/models/UpdateShareRequest.ts deleted file mode 100644 index d690b0ed..00000000 --- a/sdk/nodejs/sdk/src/zrok/api/models/UpdateShareRequest.ts +++ /dev/null @@ -1,73 +0,0 @@ -/* tslint:disable */ -/* eslint-disable */ -/** - * zrok - * zrok client access - * - * The version of the OpenAPI document: 0.3.0 - * - * - * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). - * https://openapi-generator.tech - * Do not edit the class manually. - */ - -import { exists, mapValues } from '../runtime'; -/** - * - * @export - * @interface UpdateShareRequest - */ -export interface UpdateShareRequest { - /** - * - * @type {string} - * @memberof UpdateShareRequest - */ - shrToken?: string; - /** - * - * @type {string} - * @memberof UpdateShareRequest - */ - backendProxyEndpoint?: string; -} - -/** - * Check if a given object implements the UpdateShareRequest interface. - */ -export function instanceOfUpdateShareRequest(value: object): boolean { - let isInstance = true; - - return isInstance; -} - -export function UpdateShareRequestFromJSON(json: any): UpdateShareRequest { - return UpdateShareRequestFromJSONTyped(json, false); -} - -export function UpdateShareRequestFromJSONTyped(json: any, ignoreDiscriminator: boolean): UpdateShareRequest { - if ((json === undefined) || (json === null)) { - return json; - } - return { - - 'shrToken': !exists(json, 'shrToken') ? undefined : json['shrToken'], - 'backendProxyEndpoint': !exists(json, 'backendProxyEndpoint') ? undefined : json['backendProxyEndpoint'], - }; -} - -export function UpdateShareRequestToJSON(value?: UpdateShareRequest | null): any { - if (value === undefined) { - return undefined; - } - if (value === null) { - return null; - } - return { - - 'shrToken': value.shrToken, - 'backendProxyEndpoint': value.backendProxyEndpoint, - }; -} - diff --git a/sdk/python/examples/http-server/README.md b/sdk/python/examples/http-server/README.md index a8d9088d..41218187 100644 --- a/sdk/python/examples/http-server/README.md +++ b/sdk/python/examples/http-server/README.md @@ -4,7 +4,7 @@ This `http-server` example is a minimal zrok application that surfaces a basic H ## Implementation -```go +```python root = zrok.environment.root.Load() ``` @@ -46,6 +46,6 @@ Next, we run the server which ends up calling the following: @zrok.decor.zrok(opts=zrok_opts) def runApp(): from waitress import serve - # the port is only used to integrate Zrok with frameworks that expect a "hostname:port" combo + # the port is only used to integrate zrok with frameworks that expect a "hostname:port" combo serve(app, port=bindPort) ``` diff --git a/sdk/python/examples/http-server/server.py b/sdk/python/examples/http-server/server.py index bebbba78..912584e3 100755 --- a/sdk/python/examples/http-server/server.py +++ b/sdk/python/examples/http-server/server.py @@ -13,7 +13,7 @@ bindPort = 18081 @zrok.decor.zrok(opts=zrok_opts) def runApp(): from waitress import serve - # the port is only used to integrate Zrok with frameworks that expect a "hostname:port" combo + # the port is only used to integrate zrok with frameworks that expect a "hostname:port" combo serve(app, port=bindPort) diff --git a/sdk/python/examples/pastebin/pastebin.py b/sdk/python/examples/pastebin/pastebin.py index 96cc2391..4de0dd57 100755 --- a/sdk/python/examples/pastebin/pastebin.py +++ b/sdk/python/examples/pastebin/pastebin.py @@ -101,4 +101,4 @@ if __name__ == "__main__": server_thread = threading.Thread(target=options.func, args=[options]) server_thread.start() - server_thread.join() \ No newline at end of file + server_thread.join() diff --git a/sdk/python/examples/proxy/README.md b/sdk/python/examples/proxy/README.md new file mode 100644 index 00000000..0e6df289 --- /dev/null +++ b/sdk/python/examples/proxy/README.md @@ -0,0 +1,47 @@ + +# zrok Python Proxy Example + +This demonstrates using the ProxyShare class to forward requests from the public frontend to a target URL. + +## Run the Example + +```bash +LOG_LEVEL=INFO python ./proxy.py http://127.0.0.1:3000 +``` + +Expected output: + +```txt +2025-01-29 06:37:00,884 - __main__ - INFO - === Starting proxy server === +2025-01-29 06:37:00,884 - __main__ - INFO - Target URL: http://127.0.0.1:3000 +2025-01-29 06:37:01,252 - __main__ - INFO - Access proxy at: https://24x0pq7s6jr0.zrok.example.com:443 +2025-01-29 06:37:07,981 - zrok.proxy - INFO - Share 24x0pq7s6jr0 released +``` + +## Basic Usage + +```python +from zrok.proxy import ProxyShare +import zrok + +# Load the user's zrok environment from ~/.zrok +zrok_env = zrok.environment.root.Load() + +# Create a temporary proxy share (will be cleaned up on exit) +proxy = ProxyShare.create(root=zrok_env, target="http://127.0.0.1:3000") + +print(f"Public URL: {proxy.endpoints}") +proxy.run() +``` + +## Creating a Reserved Proxy Share + +To create a share token that persists and can be reused, run the example `proxy.py --unique-name my-persistent-proxy`. If the unique name already exists it will be reused. Here's how it works: + +```python +proxy = ProxyShare.create( + root=root, + target="http://127.0.0.1:3000", + unique_name="myuniquename" +) +``` diff --git a/sdk/python/examples/proxy/proxy.ipynb b/sdk/python/examples/proxy/proxy.ipynb new file mode 100644 index 00000000..2fb5977a --- /dev/null +++ b/sdk/python/examples/proxy/proxy.ipynb @@ -0,0 +1,100 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "id": "52d42237", + "metadata": {}, + "outputs": [], + "source": [ + "! pip install zrok" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0a33915c", + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "import zrok\n", + "from zrok.proxy import ProxyShare\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "0db6b615", + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "target_url = \"http://127.0.0.1:8000/\"\n", + "unique_name = \"myuniquename\" # a name to reuse each run or 'None' for random\n", + "share_mode = \"public\" # \"public\" or \"private\"\n", + "frontend = \"public\" # custom domain frontend or \"public\"\n", + "\n", + "if unique_name.lower() == \"none\":\n", + " unique_name = None\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d3efcfa5", + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "zrok_env = zrok.environment.root.Load() # Load the environment from ~/.zrok\n", + "\n", + "proxy_share = ProxyShare.create(\n", + " root=zrok_env,\n", + " target=target_url,\n", + " frontends=[frontend],\n", + " share_mode=share_mode,\n", + " unique_name=unique_name,\n", + " verify_ssl=True # Set 'False' to skip SSL verification\n", + ")\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "21966557", + "metadata": {}, + "outputs": [], + "source": [ + "\n", + "if share_mode == \"public\":\n", + " print(f\"Access proxy at: {', '.join(proxy_share.endpoints)}\")\n", + "elif share_mode == \"private\":\n", + " print(f\"Run a private access frontend: 'zrok access private {proxy_share.token}'\")\n", + "\n", + "proxy_share.run()\n" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.6" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/sdk/python/examples/proxy/proxy.py b/sdk/python/examples/proxy/proxy.py new file mode 100644 index 00000000..a0462971 --- /dev/null +++ b/sdk/python/examples/proxy/proxy.py @@ -0,0 +1,62 @@ +#!/usr/bin/env python3 + +""" +Example of using zrok's proxy facility to create an HTTP proxy server. + +This example demonstrates how to: +1. Create a proxy share (optionally with a unique name for persistence) +2. Handle HTTP requests/responses through the proxy +3. Automatically clean up non-reserved shares on exit +""" + +import argparse +import logging + +import zrok +from zrok.proxy import ProxyShare + +# Setup logging +logging.basicConfig( + level=logging.INFO, + format='%(asctime)s - %(name)s - %(levelname)s - %(message)s' +) +logger = logging.getLogger(__name__) + + +def main(): + """Main entry point.""" + parser = argparse.ArgumentParser(description='Start a zrok proxy server') + parser.add_argument('target_url', help='Target URL to proxy requests to') + parser.add_argument('-n', '--unique-name', help='Unique name for the proxy instance') + parser.add_argument('-f', '--frontends', nargs='+', help='One or more space-separated frontends to use') + parser.add_argument('-k', '--insecure', action='store_false', dest='verify_ssl', default=True, + help='Skip SSL verification') + parser.add_argument('-s', '--share-mode', default='public', choices=['public', 'private'], + help='Share mode (default: public)') + args = parser.parse_args() + + logger.info("=== Starting proxy server ===") + logger.info(f"Target URL: {args.target_url}") + logger.info(f"Share mode: {args.share_mode}") + + # Load environment and create proxy share + root = zrok.environment.root.Load() + proxy_share = ProxyShare.create( + root=root, + target=args.target_url, + share_mode=args.share_mode, + unique_name=args.unique_name, + frontends=args.frontends, + verify_ssl=args.verify_ssl + ) + + # Log access information and start the proxy + if args.share_mode == "public": + logger.info(f"Access proxy at: {', '.join(proxy_share.endpoints)}") + elif args.share_mode == "private": + logger.info(f"Run a private access frontend: 'zrok access private {proxy_share.token}'") + proxy_share.run() + + +if __name__ == '__main__': + main() diff --git a/sdk/python/sdk/zrok/.gitattributes b/sdk/python/sdk/zrok/.gitattributes deleted file mode 100644 index 4abb03b2..00000000 --- a/sdk/python/sdk/zrok/.gitattributes +++ /dev/null @@ -1 +0,0 @@ -zrok/_version.py export-subst diff --git a/sdk/python/sdk/zrok/.swagger-codegen-ignore b/sdk/python/sdk/zrok/.swagger-codegen-ignore index cbe3e7fe..c5fa491b 100644 --- a/sdk/python/sdk/zrok/.swagger-codegen-ignore +++ b/sdk/python/sdk/zrok/.swagger-codegen-ignore @@ -21,12 +21,3 @@ #docs/*.md # Then explicitly reverse the ignore rule for a single file: #!docs/README.md - -.travis.yml -git_push.sh -tox.ini -test-requirements.txt -test/ -docs/ -README.md -setup.py \ No newline at end of file diff --git a/sdk/python/sdk/zrok/.travis.yml b/sdk/python/sdk/zrok/.travis.yml new file mode 100644 index 00000000..dd6c4450 --- /dev/null +++ b/sdk/python/sdk/zrok/.travis.yml @@ -0,0 +1,13 @@ +# ref: https://docs.travis-ci.com/user/languages/python +language: python +python: + - "3.2" + - "3.3" + - "3.4" + - "3.5" + #- "3.5-dev" # 3.5 development branch + #- "nightly" # points to the latest development branch e.g. 3.6-dev +# command to install dependencies +install: "pip install -r requirements.txt" +# command to run tests +script: nosetests diff --git a/sdk/python/sdk/zrok/README.md b/sdk/python/sdk/zrok/README.md new file mode 100644 index 00000000..1275f9a4 --- /dev/null +++ b/sdk/python/sdk/zrok/README.md @@ -0,0 +1,272 @@ +# zrok_sdk +zrok client access + +This Python package is automatically generated by the [Swagger Codegen](https://github.com/swagger-api/swagger-codegen) project: + +- API version: 1.0.0 +- Package version: 1.0.0 +- Build package: io.swagger.codegen.v3.generators.python.PythonClientCodegen + +## Requirements. + +Python 2.7 and 3.4+ + +## Installation & Usage +### pip install + +If the python package is hosted on Github, you can install directly from Github + +```sh +pip install git+https://github.com/GIT_USER_ID/GIT_REPO_ID.git +``` +(you may need to run `pip` with root permission: `sudo pip install git+https://github.com/GIT_USER_ID/GIT_REPO_ID.git`) + +Then import the package: +```python +import zrok_api +``` + +### Setuptools + +Install via [Setuptools](http://pypi.python.org/pypi/setuptools). + +```sh +python setup.py install --user +``` +(or `sudo python setup.py install` to install the package for all users) + +Then import the package: +```python +import zrok_api +``` + +## Getting Started + +Please follow the [installation procedure](#installation--usage) and then run the following: + +```python +from __future__ import print_function +import time +import zrok_api +from zrok_api.rest import ApiException +from pprint import pprint + +# Configure API key authorization: key +configuration = zrok_api.Configuration() +configuration.api_key['x-token'] = 'YOUR_API_KEY' +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['x-token'] = 'Bearer' + +# create an instance of the API class +api_instance = zrok_api.AccountApi(zrok_api.ApiClient(configuration)) +body = zrok_api.ChangePasswordBody() # ChangePasswordBody | (optional) + +try: + api_instance.change_password(body=body) +except ApiException as e: + print("Exception when calling AccountApi->change_password: %s\n" % e) + +# create an instance of the API class +api_instance = zrok_api.AccountApi(zrok_api.ApiClient(configuration)) +body = zrok_api.InviteBody() # InviteBody | (optional) + +try: + api_instance.invite(body=body) +except ApiException as e: + print("Exception when calling AccountApi->invite: %s\n" % e) + +# create an instance of the API class +api_instance = zrok_api.AccountApi(zrok_api.ApiClient(configuration)) +body = zrok_api.LoginBody() # LoginBody | (optional) + +try: + api_response = api_instance.login(body=body) + pprint(api_response) +except ApiException as e: + print("Exception when calling AccountApi->login: %s\n" % e) + +# Configure API key authorization: key +configuration = zrok_api.Configuration() +configuration.api_key['x-token'] = 'YOUR_API_KEY' +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['x-token'] = 'Bearer' + +# create an instance of the API class +api_instance = zrok_api.AccountApi(zrok_api.ApiClient(configuration)) +body = zrok_api.RegenerateAccountTokenBody() # RegenerateAccountTokenBody | (optional) + +try: + api_response = api_instance.regenerate_account_token(body=body) + pprint(api_response) +except ApiException as e: + print("Exception when calling AccountApi->regenerate_account_token: %s\n" % e) + +# create an instance of the API class +api_instance = zrok_api.AccountApi(zrok_api.ApiClient(configuration)) +body = zrok_api.RegisterBody() # RegisterBody | (optional) + +try: + api_response = api_instance.register(body=body) + pprint(api_response) +except ApiException as e: + print("Exception when calling AccountApi->register: %s\n" % e) + +# create an instance of the API class +api_instance = zrok_api.AccountApi(zrok_api.ApiClient(configuration)) +body = zrok_api.ResetPasswordBody() # ResetPasswordBody | (optional) + +try: + api_instance.reset_password(body=body) +except ApiException as e: + print("Exception when calling AccountApi->reset_password: %s\n" % e) + +# create an instance of the API class +api_instance = zrok_api.AccountApi(zrok_api.ApiClient(configuration)) +body = zrok_api.ResetPasswordRequestBody() # ResetPasswordRequestBody | (optional) + +try: + api_instance.reset_password_request(body=body) +except ApiException as e: + print("Exception when calling AccountApi->reset_password_request: %s\n" % e) + +# create an instance of the API class +api_instance = zrok_api.AccountApi(zrok_api.ApiClient(configuration)) +body = zrok_api.VerifyBody() # VerifyBody | (optional) + +try: + api_response = api_instance.verify(body=body) + pprint(api_response) +except ApiException as e: + print("Exception when calling AccountApi->verify: %s\n" % e) +``` + +## Documentation for API Endpoints + +All URIs are relative to */api/v1* + +Class | Method | HTTP request | Description +------------ | ------------- | ------------- | ------------- +*AccountApi* | [**change_password**](docs/AccountApi.md#change_password) | **POST** /changePassword | +*AccountApi* | [**invite**](docs/AccountApi.md#invite) | **POST** /invite | +*AccountApi* | [**login**](docs/AccountApi.md#login) | **POST** /login | +*AccountApi* | [**regenerate_account_token**](docs/AccountApi.md#regenerate_account_token) | **POST** /regenerateAccountToken | +*AccountApi* | [**register**](docs/AccountApi.md#register) | **POST** /register | +*AccountApi* | [**reset_password**](docs/AccountApi.md#reset_password) | **POST** /resetPassword | +*AccountApi* | [**reset_password_request**](docs/AccountApi.md#reset_password_request) | **POST** /resetPasswordRequest | +*AccountApi* | [**verify**](docs/AccountApi.md#verify) | **POST** /verify | +*AdminApi* | [**add_organization_member**](docs/AdminApi.md#add_organization_member) | **POST** /organization/add | +*AdminApi* | [**create_account**](docs/AdminApi.md#create_account) | **POST** /account | +*AdminApi* | [**create_frontend**](docs/AdminApi.md#create_frontend) | **POST** /frontend | +*AdminApi* | [**create_identity**](docs/AdminApi.md#create_identity) | **POST** /identity | +*AdminApi* | [**create_organization**](docs/AdminApi.md#create_organization) | **POST** /organization | +*AdminApi* | [**delete_frontend**](docs/AdminApi.md#delete_frontend) | **DELETE** /frontend | +*AdminApi* | [**delete_organization**](docs/AdminApi.md#delete_organization) | **DELETE** /organization | +*AdminApi* | [**grants**](docs/AdminApi.md#grants) | **POST** /grants | +*AdminApi* | [**invite_token_generate**](docs/AdminApi.md#invite_token_generate) | **POST** /invite/token/generate | +*AdminApi* | [**list_frontends**](docs/AdminApi.md#list_frontends) | **GET** /frontends | +*AdminApi* | [**list_organization_members**](docs/AdminApi.md#list_organization_members) | **POST** /organization/list | +*AdminApi* | [**list_organizations**](docs/AdminApi.md#list_organizations) | **GET** /organizations | +*AdminApi* | [**remove_organization_member**](docs/AdminApi.md#remove_organization_member) | **POST** /organization/remove | +*AdminApi* | [**update_frontend**](docs/AdminApi.md#update_frontend) | **PATCH** /frontend | +*EnvironmentApi* | [**disable**](docs/EnvironmentApi.md#disable) | **POST** /disable | +*EnvironmentApi* | [**enable**](docs/EnvironmentApi.md#enable) | **POST** /enable | +*MetadataApi* | [**client_version_check**](docs/MetadataApi.md#client_version_check) | **POST** /version | +*MetadataApi* | [**configuration**](docs/MetadataApi.md#configuration) | **GET** /configuration | +*MetadataApi* | [**get_account_detail**](docs/MetadataApi.md#get_account_detail) | **GET** /detail/account | +*MetadataApi* | [**get_account_metrics**](docs/MetadataApi.md#get_account_metrics) | **GET** /metrics/account | +*MetadataApi* | [**get_environment_detail**](docs/MetadataApi.md#get_environment_detail) | **GET** /detail/environment/{envZId} | +*MetadataApi* | [**get_environment_metrics**](docs/MetadataApi.md#get_environment_metrics) | **GET** /metrics/environment/{envId} | +*MetadataApi* | [**get_frontend_detail**](docs/MetadataApi.md#get_frontend_detail) | **GET** /detail/frontend/{frontendId} | +*MetadataApi* | [**get_share_detail**](docs/MetadataApi.md#get_share_detail) | **GET** /detail/share/{shareToken} | +*MetadataApi* | [**get_share_metrics**](docs/MetadataApi.md#get_share_metrics) | **GET** /metrics/share/{shareToken} | +*MetadataApi* | [**get_sparklines**](docs/MetadataApi.md#get_sparklines) | **POST** /sparklines | +*MetadataApi* | [**list_memberships**](docs/MetadataApi.md#list_memberships) | **GET** /memberships | +*MetadataApi* | [**list_org_members**](docs/MetadataApi.md#list_org_members) | **GET** /members/{organizationToken} | +*MetadataApi* | [**org_account_overview**](docs/MetadataApi.md#org_account_overview) | **GET** /overview/{organizationToken}/{accountEmail} | +*MetadataApi* | [**overview**](docs/MetadataApi.md#overview) | **GET** /overview | +*MetadataApi* | [**version**](docs/MetadataApi.md#version) | **GET** /version | +*ShareApi* | [**access**](docs/ShareApi.md#access) | **POST** /access | +*ShareApi* | [**share**](docs/ShareApi.md#share) | **POST** /share | +*ShareApi* | [**unaccess**](docs/ShareApi.md#unaccess) | **DELETE** /unaccess | +*ShareApi* | [**unshare**](docs/ShareApi.md#unshare) | **DELETE** /unshare | +*ShareApi* | [**update_access**](docs/ShareApi.md#update_access) | **PATCH** /access | +*ShareApi* | [**update_share**](docs/ShareApi.md#update_share) | **PATCH** /share | + +## Documentation For Models + + - [AccessBody](docs/AccessBody.md) + - [AccessBody1](docs/AccessBody1.md) + - [AccountBody](docs/AccountBody.md) + - [AuthUser](docs/AuthUser.md) + - [ChangePasswordBody](docs/ChangePasswordBody.md) + - [Configuration](docs/Configuration.md) + - [DisableBody](docs/DisableBody.md) + - [EnableBody](docs/EnableBody.md) + - [Environment](docs/Environment.md) + - [EnvironmentAndResources](docs/EnvironmentAndResources.md) + - [Environments](docs/Environments.md) + - [ErrorMessage](docs/ErrorMessage.md) + - [Frontend](docs/Frontend.md) + - [FrontendBody](docs/FrontendBody.md) + - [FrontendBody1](docs/FrontendBody1.md) + - [FrontendBody2](docs/FrontendBody2.md) + - [Frontends](docs/Frontends.md) + - [GrantsBody](docs/GrantsBody.md) + - [IdentityBody](docs/IdentityBody.md) + - [InlineResponse200](docs/InlineResponse200.md) + - [InlineResponse2001](docs/InlineResponse2001.md) + - [InlineResponse2002](docs/InlineResponse2002.md) + - [InlineResponse2003](docs/InlineResponse2003.md) + - [InlineResponse2003Members](docs/InlineResponse2003Members.md) + - [InlineResponse2004](docs/InlineResponse2004.md) + - [InlineResponse2004Organizations](docs/InlineResponse2004Organizations.md) + - [InlineResponse2005](docs/InlineResponse2005.md) + - [InlineResponse2005Memberships](docs/InlineResponse2005Memberships.md) + - [InlineResponse2006](docs/InlineResponse2006.md) + - [InlineResponse201](docs/InlineResponse201.md) + - [InlineResponse2011](docs/InlineResponse2011.md) + - [InlineResponse2012](docs/InlineResponse2012.md) + - [InlineResponse2013](docs/InlineResponse2013.md) + - [InviteBody](docs/InviteBody.md) + - [LoginBody](docs/LoginBody.md) + - [Metrics](docs/Metrics.md) + - [MetricsSample](docs/MetricsSample.md) + - [OrganizationAddBody](docs/OrganizationAddBody.md) + - [OrganizationBody](docs/OrganizationBody.md) + - [OrganizationBody1](docs/OrganizationBody1.md) + - [OrganizationListBody](docs/OrganizationListBody.md) + - [OrganizationRemoveBody](docs/OrganizationRemoveBody.md) + - [Overview](docs/Overview.md) + - [Principal](docs/Principal.md) + - [RegenerateAccountTokenBody](docs/RegenerateAccountTokenBody.md) + - [RegisterBody](docs/RegisterBody.md) + - [ResetPasswordBody](docs/ResetPasswordBody.md) + - [ResetPasswordRequestBody](docs/ResetPasswordRequestBody.md) + - [Share](docs/Share.md) + - [ShareBody](docs/ShareBody.md) + - [ShareRequest](docs/ShareRequest.md) + - [ShareResponse](docs/ShareResponse.md) + - [Shares](docs/Shares.md) + - [SparkData](docs/SparkData.md) + - [SparkDataSample](docs/SparkDataSample.md) + - [SparklinesBody](docs/SparklinesBody.md) + - [TokenGenerateBody](docs/TokenGenerateBody.md) + - [UnaccessBody](docs/UnaccessBody.md) + - [UnshareBody](docs/UnshareBody.md) + - [VerifyBody](docs/VerifyBody.md) + - [Version](docs/Version.md) + - [VersionBody](docs/VersionBody.md) + +## Documentation For Authorization + + +## key + +- **Type**: API key +- **API key parameter name**: x-token +- **Location**: HTTP header + + +## Author + + diff --git a/sdk/python/sdk/zrok/__init__.py b/sdk/python/sdk/zrok/__init__.py deleted file mode 100644 index e6b36ad8..00000000 --- a/sdk/python/sdk/zrok/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from . import environment # noqa diff --git a/sdk/python/sdk/zrok/docs/AccessBody.md b/sdk/python/sdk/zrok/docs/AccessBody.md new file mode 100644 index 00000000..86e3636b --- /dev/null +++ b/sdk/python/sdk/zrok/docs/AccessBody.md @@ -0,0 +1,12 @@ +# AccessBody + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**env_zid** | **str** | | [optional] +**share_token** | **str** | | [optional] +**bind_address** | **str** | | [optional] +**description** | **str** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/sdk/python/sdk/zrok/docs/AccessBody1.md b/sdk/python/sdk/zrok/docs/AccessBody1.md new file mode 100644 index 00000000..68968950 --- /dev/null +++ b/sdk/python/sdk/zrok/docs/AccessBody1.md @@ -0,0 +1,11 @@ +# AccessBody1 + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**frontend_token** | **str** | | [optional] +**bind_address** | **str** | | [optional] +**description** | **str** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/sdk/python/sdk/zrok/docs/AccountApi.md b/sdk/python/sdk/zrok/docs/AccountApi.md new file mode 100644 index 00000000..531caa12 --- /dev/null +++ b/sdk/python/sdk/zrok/docs/AccountApi.md @@ -0,0 +1,383 @@ +# zrok_api.AccountApi + +All URIs are relative to */api/v1* + +Method | HTTP request | Description +------------- | ------------- | ------------- +[**change_password**](AccountApi.md#change_password) | **POST** /changePassword | +[**invite**](AccountApi.md#invite) | **POST** /invite | +[**login**](AccountApi.md#login) | **POST** /login | +[**regenerate_account_token**](AccountApi.md#regenerate_account_token) | **POST** /regenerateAccountToken | +[**register**](AccountApi.md#register) | **POST** /register | +[**reset_password**](AccountApi.md#reset_password) | **POST** /resetPassword | +[**reset_password_request**](AccountApi.md#reset_password_request) | **POST** /resetPasswordRequest | +[**verify**](AccountApi.md#verify) | **POST** /verify | + +# **change_password** +> change_password(body=body) + + + +### Example +```python +from __future__ import print_function +import time +import zrok_api +from zrok_api.rest import ApiException +from pprint import pprint + +# Configure API key authorization: key +configuration = zrok_api.Configuration() +configuration.api_key['x-token'] = 'YOUR_API_KEY' +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['x-token'] = 'Bearer' + +# create an instance of the API class +api_instance = zrok_api.AccountApi(zrok_api.ApiClient(configuration)) +body = zrok_api.ChangePasswordBody() # ChangePasswordBody | (optional) + +try: + api_instance.change_password(body=body) +except ApiException as e: + print("Exception when calling AccountApi->change_password: %s\n" % e) +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **body** | [**ChangePasswordBody**](ChangePasswordBody.md)| | [optional] + +### Return type + +void (empty response body) + +### Authorization + +[key](../README.md#key) + +### HTTP request headers + + - **Content-Type**: application/zrok.v1+json + - **Accept**: application/zrok.v1+json + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **invite** +> invite(body=body) + + + +### Example +```python +from __future__ import print_function +import time +import zrok_api +from zrok_api.rest import ApiException +from pprint import pprint + +# create an instance of the API class +api_instance = zrok_api.AccountApi() +body = zrok_api.InviteBody() # InviteBody | (optional) + +try: + api_instance.invite(body=body) +except ApiException as e: + print("Exception when calling AccountApi->invite: %s\n" % e) +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **body** | [**InviteBody**](InviteBody.md)| | [optional] + +### Return type + +void (empty response body) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: application/zrok.v1+json + - **Accept**: application/zrok.v1+json + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **login** +> str login(body=body) + + + +### Example +```python +from __future__ import print_function +import time +import zrok_api +from zrok_api.rest import ApiException +from pprint import pprint + +# create an instance of the API class +api_instance = zrok_api.AccountApi() +body = zrok_api.LoginBody() # LoginBody | (optional) + +try: + api_response = api_instance.login(body=body) + pprint(api_response) +except ApiException as e: + print("Exception when calling AccountApi->login: %s\n" % e) +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **body** | [**LoginBody**](LoginBody.md)| | [optional] + +### Return type + +**str** + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: application/zrok.v1+json + - **Accept**: application/zrok.v1+json + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **regenerate_account_token** +> InlineResponse200 regenerate_account_token(body=body) + + + +### Example +```python +from __future__ import print_function +import time +import zrok_api +from zrok_api.rest import ApiException +from pprint import pprint + +# Configure API key authorization: key +configuration = zrok_api.Configuration() +configuration.api_key['x-token'] = 'YOUR_API_KEY' +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['x-token'] = 'Bearer' + +# create an instance of the API class +api_instance = zrok_api.AccountApi(zrok_api.ApiClient(configuration)) +body = zrok_api.RegenerateAccountTokenBody() # RegenerateAccountTokenBody | (optional) + +try: + api_response = api_instance.regenerate_account_token(body=body) + pprint(api_response) +except ApiException as e: + print("Exception when calling AccountApi->regenerate_account_token: %s\n" % e) +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **body** | [**RegenerateAccountTokenBody**](RegenerateAccountTokenBody.md)| | [optional] + +### Return type + +[**InlineResponse200**](InlineResponse200.md) + +### Authorization + +[key](../README.md#key) + +### HTTP request headers + + - **Content-Type**: application/zrok.v1+json + - **Accept**: application/zrok.v1+json + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **register** +> InlineResponse200 register(body=body) + + + +### Example +```python +from __future__ import print_function +import time +import zrok_api +from zrok_api.rest import ApiException +from pprint import pprint + +# create an instance of the API class +api_instance = zrok_api.AccountApi() +body = zrok_api.RegisterBody() # RegisterBody | (optional) + +try: + api_response = api_instance.register(body=body) + pprint(api_response) +except ApiException as e: + print("Exception when calling AccountApi->register: %s\n" % e) +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **body** | [**RegisterBody**](RegisterBody.md)| | [optional] + +### Return type + +[**InlineResponse200**](InlineResponse200.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: application/zrok.v1+json + - **Accept**: application/zrok.v1+json + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **reset_password** +> reset_password(body=body) + + + +### Example +```python +from __future__ import print_function +import time +import zrok_api +from zrok_api.rest import ApiException +from pprint import pprint + +# create an instance of the API class +api_instance = zrok_api.AccountApi() +body = zrok_api.ResetPasswordBody() # ResetPasswordBody | (optional) + +try: + api_instance.reset_password(body=body) +except ApiException as e: + print("Exception when calling AccountApi->reset_password: %s\n" % e) +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **body** | [**ResetPasswordBody**](ResetPasswordBody.md)| | [optional] + +### Return type + +void (empty response body) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: application/zrok.v1+json + - **Accept**: application/zrok.v1+json + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **reset_password_request** +> reset_password_request(body=body) + + + +### Example +```python +from __future__ import print_function +import time +import zrok_api +from zrok_api.rest import ApiException +from pprint import pprint + +# create an instance of the API class +api_instance = zrok_api.AccountApi() +body = zrok_api.ResetPasswordRequestBody() # ResetPasswordRequestBody | (optional) + +try: + api_instance.reset_password_request(body=body) +except ApiException as e: + print("Exception when calling AccountApi->reset_password_request: %s\n" % e) +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **body** | [**ResetPasswordRequestBody**](ResetPasswordRequestBody.md)| | [optional] + +### Return type + +void (empty response body) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: application/zrok.v1+json + - **Accept**: Not defined + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **verify** +> InlineResponse2001 verify(body=body) + + + +### Example +```python +from __future__ import print_function +import time +import zrok_api +from zrok_api.rest import ApiException +from pprint import pprint + +# create an instance of the API class +api_instance = zrok_api.AccountApi() +body = zrok_api.VerifyBody() # VerifyBody | (optional) + +try: + api_response = api_instance.verify(body=body) + pprint(api_response) +except ApiException as e: + print("Exception when calling AccountApi->verify: %s\n" % e) +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **body** | [**VerifyBody**](VerifyBody.md)| | [optional] + +### Return type + +[**InlineResponse2001**](InlineResponse2001.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: application/zrok.v1+json + - **Accept**: application/zrok.v1+json + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + diff --git a/sdk/python/sdk/zrok/docs/AccountBody.md b/sdk/python/sdk/zrok/docs/AccountBody.md new file mode 100644 index 00000000..076efa50 --- /dev/null +++ b/sdk/python/sdk/zrok/docs/AccountBody.md @@ -0,0 +1,10 @@ +# AccountBody + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**email** | **str** | | [optional] +**password** | **str** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/sdk/python/sdk/zrok/docs/AdminApi.md b/sdk/python/sdk/zrok/docs/AdminApi.md new file mode 100644 index 00000000..34977dd4 --- /dev/null +++ b/sdk/python/sdk/zrok/docs/AdminApi.md @@ -0,0 +1,720 @@ +# zrok_api.AdminApi + +All URIs are relative to */api/v1* + +Method | HTTP request | Description +------------- | ------------- | ------------- +[**add_organization_member**](AdminApi.md#add_organization_member) | **POST** /organization/add | +[**create_account**](AdminApi.md#create_account) | **POST** /account | +[**create_frontend**](AdminApi.md#create_frontend) | **POST** /frontend | +[**create_identity**](AdminApi.md#create_identity) | **POST** /identity | +[**create_organization**](AdminApi.md#create_organization) | **POST** /organization | +[**delete_frontend**](AdminApi.md#delete_frontend) | **DELETE** /frontend | +[**delete_organization**](AdminApi.md#delete_organization) | **DELETE** /organization | +[**grants**](AdminApi.md#grants) | **POST** /grants | +[**invite_token_generate**](AdminApi.md#invite_token_generate) | **POST** /invite/token/generate | +[**list_frontends**](AdminApi.md#list_frontends) | **GET** /frontends | +[**list_organization_members**](AdminApi.md#list_organization_members) | **POST** /organization/list | +[**list_organizations**](AdminApi.md#list_organizations) | **GET** /organizations | +[**remove_organization_member**](AdminApi.md#remove_organization_member) | **POST** /organization/remove | +[**update_frontend**](AdminApi.md#update_frontend) | **PATCH** /frontend | + +# **add_organization_member** +> add_organization_member(body=body) + + + +### Example +```python +from __future__ import print_function +import time +import zrok_api +from zrok_api.rest import ApiException +from pprint import pprint + +# Configure API key authorization: key +configuration = zrok_api.Configuration() +configuration.api_key['x-token'] = 'YOUR_API_KEY' +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['x-token'] = 'Bearer' + +# create an instance of the API class +api_instance = zrok_api.AdminApi(zrok_api.ApiClient(configuration)) +body = zrok_api.OrganizationAddBody() # OrganizationAddBody | (optional) + +try: + api_instance.add_organization_member(body=body) +except ApiException as e: + print("Exception when calling AdminApi->add_organization_member: %s\n" % e) +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **body** | [**OrganizationAddBody**](OrganizationAddBody.md)| | [optional] + +### Return type + +void (empty response body) + +### Authorization + +[key](../README.md#key) + +### HTTP request headers + + - **Content-Type**: application/zrok.v1+json + - **Accept**: Not defined + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **create_account** +> InlineResponse200 create_account(body=body) + + + +### Example +```python +from __future__ import print_function +import time +import zrok_api +from zrok_api.rest import ApiException +from pprint import pprint + +# Configure API key authorization: key +configuration = zrok_api.Configuration() +configuration.api_key['x-token'] = 'YOUR_API_KEY' +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['x-token'] = 'Bearer' + +# create an instance of the API class +api_instance = zrok_api.AdminApi(zrok_api.ApiClient(configuration)) +body = zrok_api.AccountBody() # AccountBody | (optional) + +try: + api_response = api_instance.create_account(body=body) + pprint(api_response) +except ApiException as e: + print("Exception when calling AdminApi->create_account: %s\n" % e) +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **body** | [**AccountBody**](AccountBody.md)| | [optional] + +### Return type + +[**InlineResponse200**](InlineResponse200.md) + +### Authorization + +[key](../README.md#key) + +### HTTP request headers + + - **Content-Type**: application/zrok.v1+json + - **Accept**: application/zrok.v1+json + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **create_frontend** +> InlineResponse201 create_frontend(body=body) + + + +### Example +```python +from __future__ import print_function +import time +import zrok_api +from zrok_api.rest import ApiException +from pprint import pprint + +# Configure API key authorization: key +configuration = zrok_api.Configuration() +configuration.api_key['x-token'] = 'YOUR_API_KEY' +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['x-token'] = 'Bearer' + +# create an instance of the API class +api_instance = zrok_api.AdminApi(zrok_api.ApiClient(configuration)) +body = zrok_api.FrontendBody() # FrontendBody | (optional) + +try: + api_response = api_instance.create_frontend(body=body) + pprint(api_response) +except ApiException as e: + print("Exception when calling AdminApi->create_frontend: %s\n" % e) +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **body** | [**FrontendBody**](FrontendBody.md)| | [optional] + +### Return type + +[**InlineResponse201**](InlineResponse201.md) + +### Authorization + +[key](../README.md#key) + +### HTTP request headers + + - **Content-Type**: application/zrok.v1+json + - **Accept**: application/zrok.v1+json + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **create_identity** +> InlineResponse2011 create_identity(body=body) + + + +### Example +```python +from __future__ import print_function +import time +import zrok_api +from zrok_api.rest import ApiException +from pprint import pprint + +# Configure API key authorization: key +configuration = zrok_api.Configuration() +configuration.api_key['x-token'] = 'YOUR_API_KEY' +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['x-token'] = 'Bearer' + +# create an instance of the API class +api_instance = zrok_api.AdminApi(zrok_api.ApiClient(configuration)) +body = zrok_api.IdentityBody() # IdentityBody | (optional) + +try: + api_response = api_instance.create_identity(body=body) + pprint(api_response) +except ApiException as e: + print("Exception when calling AdminApi->create_identity: %s\n" % e) +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **body** | [**IdentityBody**](IdentityBody.md)| | [optional] + +### Return type + +[**InlineResponse2011**](InlineResponse2011.md) + +### Authorization + +[key](../README.md#key) + +### HTTP request headers + + - **Content-Type**: application/zrok.v1+json + - **Accept**: application/zrok.v1+json + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **create_organization** +> InlineResponse2012 create_organization(body=body) + + + +### Example +```python +from __future__ import print_function +import time +import zrok_api +from zrok_api.rest import ApiException +from pprint import pprint + +# Configure API key authorization: key +configuration = zrok_api.Configuration() +configuration.api_key['x-token'] = 'YOUR_API_KEY' +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['x-token'] = 'Bearer' + +# create an instance of the API class +api_instance = zrok_api.AdminApi(zrok_api.ApiClient(configuration)) +body = zrok_api.OrganizationBody() # OrganizationBody | (optional) + +try: + api_response = api_instance.create_organization(body=body) + pprint(api_response) +except ApiException as e: + print("Exception when calling AdminApi->create_organization: %s\n" % e) +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **body** | [**OrganizationBody**](OrganizationBody.md)| | [optional] + +### Return type + +[**InlineResponse2012**](InlineResponse2012.md) + +### Authorization + +[key](../README.md#key) + +### HTTP request headers + + - **Content-Type**: application/zrok.v1+json + - **Accept**: application/zrok.v1+json + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **delete_frontend** +> delete_frontend(body=body) + + + +### Example +```python +from __future__ import print_function +import time +import zrok_api +from zrok_api.rest import ApiException +from pprint import pprint + +# Configure API key authorization: key +configuration = zrok_api.Configuration() +configuration.api_key['x-token'] = 'YOUR_API_KEY' +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['x-token'] = 'Bearer' + +# create an instance of the API class +api_instance = zrok_api.AdminApi(zrok_api.ApiClient(configuration)) +body = zrok_api.FrontendBody1() # FrontendBody1 | (optional) + +try: + api_instance.delete_frontend(body=body) +except ApiException as e: + print("Exception when calling AdminApi->delete_frontend: %s\n" % e) +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **body** | [**FrontendBody1**](FrontendBody1.md)| | [optional] + +### Return type + +void (empty response body) + +### Authorization + +[key](../README.md#key) + +### HTTP request headers + + - **Content-Type**: application/zrok.v1+json + - **Accept**: Not defined + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **delete_organization** +> delete_organization(body=body) + + + +### Example +```python +from __future__ import print_function +import time +import zrok_api +from zrok_api.rest import ApiException +from pprint import pprint + +# Configure API key authorization: key +configuration = zrok_api.Configuration() +configuration.api_key['x-token'] = 'YOUR_API_KEY' +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['x-token'] = 'Bearer' + +# create an instance of the API class +api_instance = zrok_api.AdminApi(zrok_api.ApiClient(configuration)) +body = zrok_api.OrganizationBody1() # OrganizationBody1 | (optional) + +try: + api_instance.delete_organization(body=body) +except ApiException as e: + print("Exception when calling AdminApi->delete_organization: %s\n" % e) +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **body** | [**OrganizationBody1**](OrganizationBody1.md)| | [optional] + +### Return type + +void (empty response body) + +### Authorization + +[key](../README.md#key) + +### HTTP request headers + + - **Content-Type**: application/zrok.v1+json + - **Accept**: Not defined + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **grants** +> grants(body=body) + + + +### Example +```python +from __future__ import print_function +import time +import zrok_api +from zrok_api.rest import ApiException +from pprint import pprint + +# Configure API key authorization: key +configuration = zrok_api.Configuration() +configuration.api_key['x-token'] = 'YOUR_API_KEY' +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['x-token'] = 'Bearer' + +# create an instance of the API class +api_instance = zrok_api.AdminApi(zrok_api.ApiClient(configuration)) +body = zrok_api.GrantsBody() # GrantsBody | (optional) + +try: + api_instance.grants(body=body) +except ApiException as e: + print("Exception when calling AdminApi->grants: %s\n" % e) +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **body** | [**GrantsBody**](GrantsBody.md)| | [optional] + +### Return type + +void (empty response body) + +### Authorization + +[key](../README.md#key) + +### HTTP request headers + + - **Content-Type**: application/zrok.v1+json + - **Accept**: Not defined + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **invite_token_generate** +> invite_token_generate(body=body) + + + +### Example +```python +from __future__ import print_function +import time +import zrok_api +from zrok_api.rest import ApiException +from pprint import pprint + +# Configure API key authorization: key +configuration = zrok_api.Configuration() +configuration.api_key['x-token'] = 'YOUR_API_KEY' +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['x-token'] = 'Bearer' + +# create an instance of the API class +api_instance = zrok_api.AdminApi(zrok_api.ApiClient(configuration)) +body = zrok_api.TokenGenerateBody() # TokenGenerateBody | (optional) + +try: + api_instance.invite_token_generate(body=body) +except ApiException as e: + print("Exception when calling AdminApi->invite_token_generate: %s\n" % e) +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **body** | [**TokenGenerateBody**](TokenGenerateBody.md)| | [optional] + +### Return type + +void (empty response body) + +### Authorization + +[key](../README.md#key) + +### HTTP request headers + + - **Content-Type**: application/zrok.v1+json + - **Accept**: Not defined + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **list_frontends** +> list[InlineResponse2002] list_frontends() + + + +### Example +```python +from __future__ import print_function +import time +import zrok_api +from zrok_api.rest import ApiException +from pprint import pprint + +# Configure API key authorization: key +configuration = zrok_api.Configuration() +configuration.api_key['x-token'] = 'YOUR_API_KEY' +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['x-token'] = 'Bearer' + +# create an instance of the API class +api_instance = zrok_api.AdminApi(zrok_api.ApiClient(configuration)) + +try: + api_response = api_instance.list_frontends() + pprint(api_response) +except ApiException as e: + print("Exception when calling AdminApi->list_frontends: %s\n" % e) +``` + +### Parameters +This endpoint does not need any parameter. + +### Return type + +[**list[InlineResponse2002]**](InlineResponse2002.md) + +### Authorization + +[key](../README.md#key) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/zrok.v1+json + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **list_organization_members** +> InlineResponse2003 list_organization_members(body=body) + + + +### Example +```python +from __future__ import print_function +import time +import zrok_api +from zrok_api.rest import ApiException +from pprint import pprint + +# Configure API key authorization: key +configuration = zrok_api.Configuration() +configuration.api_key['x-token'] = 'YOUR_API_KEY' +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['x-token'] = 'Bearer' + +# create an instance of the API class +api_instance = zrok_api.AdminApi(zrok_api.ApiClient(configuration)) +body = zrok_api.OrganizationListBody() # OrganizationListBody | (optional) + +try: + api_response = api_instance.list_organization_members(body=body) + pprint(api_response) +except ApiException as e: + print("Exception when calling AdminApi->list_organization_members: %s\n" % e) +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **body** | [**OrganizationListBody**](OrganizationListBody.md)| | [optional] + +### Return type + +[**InlineResponse2003**](InlineResponse2003.md) + +### Authorization + +[key](../README.md#key) + +### HTTP request headers + + - **Content-Type**: application/zrok.v1+json + - **Accept**: application/zrok.v1+json + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **list_organizations** +> InlineResponse2004 list_organizations() + + + +### Example +```python +from __future__ import print_function +import time +import zrok_api +from zrok_api.rest import ApiException +from pprint import pprint + +# Configure API key authorization: key +configuration = zrok_api.Configuration() +configuration.api_key['x-token'] = 'YOUR_API_KEY' +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['x-token'] = 'Bearer' + +# create an instance of the API class +api_instance = zrok_api.AdminApi(zrok_api.ApiClient(configuration)) + +try: + api_response = api_instance.list_organizations() + pprint(api_response) +except ApiException as e: + print("Exception when calling AdminApi->list_organizations: %s\n" % e) +``` + +### Parameters +This endpoint does not need any parameter. + +### Return type + +[**InlineResponse2004**](InlineResponse2004.md) + +### Authorization + +[key](../README.md#key) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/zrok.v1+json + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **remove_organization_member** +> remove_organization_member(body=body) + + + +### Example +```python +from __future__ import print_function +import time +import zrok_api +from zrok_api.rest import ApiException +from pprint import pprint + +# Configure API key authorization: key +configuration = zrok_api.Configuration() +configuration.api_key['x-token'] = 'YOUR_API_KEY' +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['x-token'] = 'Bearer' + +# create an instance of the API class +api_instance = zrok_api.AdminApi(zrok_api.ApiClient(configuration)) +body = zrok_api.OrganizationRemoveBody() # OrganizationRemoveBody | (optional) + +try: + api_instance.remove_organization_member(body=body) +except ApiException as e: + print("Exception when calling AdminApi->remove_organization_member: %s\n" % e) +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **body** | [**OrganizationRemoveBody**](OrganizationRemoveBody.md)| | [optional] + +### Return type + +void (empty response body) + +### Authorization + +[key](../README.md#key) + +### HTTP request headers + + - **Content-Type**: application/zrok.v1+json + - **Accept**: Not defined + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **update_frontend** +> update_frontend(body=body) + + + +### Example +```python +from __future__ import print_function +import time +import zrok_api +from zrok_api.rest import ApiException +from pprint import pprint + +# Configure API key authorization: key +configuration = zrok_api.Configuration() +configuration.api_key['x-token'] = 'YOUR_API_KEY' +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['x-token'] = 'Bearer' + +# create an instance of the API class +api_instance = zrok_api.AdminApi(zrok_api.ApiClient(configuration)) +body = zrok_api.FrontendBody2() # FrontendBody2 | (optional) + +try: + api_instance.update_frontend(body=body) +except ApiException as e: + print("Exception when calling AdminApi->update_frontend: %s\n" % e) +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **body** | [**FrontendBody2**](FrontendBody2.md)| | [optional] + +### Return type + +void (empty response body) + +### Authorization + +[key](../README.md#key) + +### HTTP request headers + + - **Content-Type**: application/zrok.v1+json + - **Accept**: Not defined + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + diff --git a/sdk/python/sdk/zrok/docs/AuthUser.md b/sdk/python/sdk/zrok/docs/AuthUser.md new file mode 100644 index 00000000..2abe24ba --- /dev/null +++ b/sdk/python/sdk/zrok/docs/AuthUser.md @@ -0,0 +1,10 @@ +# AuthUser + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**username** | **str** | | [optional] +**password** | **str** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/sdk/python/sdk/zrok/docs/ChangePasswordBody.md b/sdk/python/sdk/zrok/docs/ChangePasswordBody.md new file mode 100644 index 00000000..1137de72 --- /dev/null +++ b/sdk/python/sdk/zrok/docs/ChangePasswordBody.md @@ -0,0 +1,11 @@ +# ChangePasswordBody + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**email** | **str** | | [optional] +**old_password** | **str** | | [optional] +**new_password** | **str** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/sdk/python/sdk/zrok/docs/Configuration.md b/sdk/python/sdk/zrok/docs/Configuration.md new file mode 100644 index 00000000..ee94f24b --- /dev/null +++ b/sdk/python/sdk/zrok/docs/Configuration.md @@ -0,0 +1,13 @@ +# Configuration + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**version** | **str** | | [optional] +**tou_link** | **str** | | [optional] +**invites_open** | **bool** | | [optional] +**requires_invite_token** | **bool** | | [optional] +**invite_token_contact** | **str** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/sdk/python/sdk/zrok/docs/DisableBody.md b/sdk/python/sdk/zrok/docs/DisableBody.md new file mode 100644 index 00000000..f6ee65f2 --- /dev/null +++ b/sdk/python/sdk/zrok/docs/DisableBody.md @@ -0,0 +1,9 @@ +# DisableBody + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**identity** | **str** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/sdk/python/sdk/zrok/docs/EnableBody.md b/sdk/python/sdk/zrok/docs/EnableBody.md new file mode 100644 index 00000000..7ba7d7b3 --- /dev/null +++ b/sdk/python/sdk/zrok/docs/EnableBody.md @@ -0,0 +1,10 @@ +# EnableBody + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**description** | **str** | | [optional] +**host** | **str** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/sdk/python/sdk/zrok/docs/Environment.md b/sdk/python/sdk/zrok/docs/Environment.md new file mode 100644 index 00000000..bd71fee9 --- /dev/null +++ b/sdk/python/sdk/zrok/docs/Environment.md @@ -0,0 +1,16 @@ +# Environment + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**description** | **str** | | [optional] +**host** | **str** | | [optional] +**address** | **str** | | [optional] +**z_id** | **str** | | [optional] +**activity** | [**SparkData**](SparkData.md) | | [optional] +**limited** | **bool** | | [optional] +**created_at** | **int** | | [optional] +**updated_at** | **int** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/sdk/python/sdk/zrok/docs/EnvironmentAndResources.md b/sdk/python/sdk/zrok/docs/EnvironmentAndResources.md new file mode 100644 index 00000000..7ed1a39a --- /dev/null +++ b/sdk/python/sdk/zrok/docs/EnvironmentAndResources.md @@ -0,0 +1,11 @@ +# EnvironmentAndResources + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**environment** | [**Environment**](Environment.md) | | [optional] +**frontends** | [**Frontends**](Frontends.md) | | [optional] +**shares** | [**Shares**](Shares.md) | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/sdk/python/sdk/zrok/docs/EnvironmentApi.md b/sdk/python/sdk/zrok/docs/EnvironmentApi.md new file mode 100644 index 00000000..f9e49447 --- /dev/null +++ b/sdk/python/sdk/zrok/docs/EnvironmentApi.md @@ -0,0 +1,110 @@ +# zrok_api.EnvironmentApi + +All URIs are relative to */api/v1* + +Method | HTTP request | Description +------------- | ------------- | ------------- +[**disable**](EnvironmentApi.md#disable) | **POST** /disable | +[**enable**](EnvironmentApi.md#enable) | **POST** /enable | + +# **disable** +> disable(body=body) + + + +### Example +```python +from __future__ import print_function +import time +import zrok_api +from zrok_api.rest import ApiException +from pprint import pprint + +# Configure API key authorization: key +configuration = zrok_api.Configuration() +configuration.api_key['x-token'] = 'YOUR_API_KEY' +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['x-token'] = 'Bearer' + +# create an instance of the API class +api_instance = zrok_api.EnvironmentApi(zrok_api.ApiClient(configuration)) +body = zrok_api.DisableBody() # DisableBody | (optional) + +try: + api_instance.disable(body=body) +except ApiException as e: + print("Exception when calling EnvironmentApi->disable: %s\n" % e) +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **body** | [**DisableBody**](DisableBody.md)| | [optional] + +### Return type + +void (empty response body) + +### Authorization + +[key](../README.md#key) + +### HTTP request headers + + - **Content-Type**: application/zrok.v1+json + - **Accept**: Not defined + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **enable** +> InlineResponse2011 enable(body=body) + + + +### Example +```python +from __future__ import print_function +import time +import zrok_api +from zrok_api.rest import ApiException +from pprint import pprint + +# Configure API key authorization: key +configuration = zrok_api.Configuration() +configuration.api_key['x-token'] = 'YOUR_API_KEY' +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['x-token'] = 'Bearer' + +# create an instance of the API class +api_instance = zrok_api.EnvironmentApi(zrok_api.ApiClient(configuration)) +body = zrok_api.EnableBody() # EnableBody | (optional) + +try: + api_response = api_instance.enable(body=body) + pprint(api_response) +except ApiException as e: + print("Exception when calling EnvironmentApi->enable: %s\n" % e) +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **body** | [**EnableBody**](EnableBody.md)| | [optional] + +### Return type + +[**InlineResponse2011**](InlineResponse2011.md) + +### Authorization + +[key](../README.md#key) + +### HTTP request headers + + - **Content-Type**: application/zrok.v1+json + - **Accept**: application/zrok.v1+json + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + diff --git a/sdk/python/sdk/zrok/docs/Environments.md b/sdk/python/sdk/zrok/docs/Environments.md new file mode 100644 index 00000000..5cdc8b26 --- /dev/null +++ b/sdk/python/sdk/zrok/docs/Environments.md @@ -0,0 +1,8 @@ +# Environments + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/sdk/python/sdk/zrok/docs/ErrorMessage.md b/sdk/python/sdk/zrok/docs/ErrorMessage.md new file mode 100644 index 00000000..25d74334 --- /dev/null +++ b/sdk/python/sdk/zrok/docs/ErrorMessage.md @@ -0,0 +1,8 @@ +# ErrorMessage + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/sdk/python/sdk/zrok/docs/Frontend.md b/sdk/python/sdk/zrok/docs/Frontend.md new file mode 100644 index 00000000..428eb19d --- /dev/null +++ b/sdk/python/sdk/zrok/docs/Frontend.md @@ -0,0 +1,17 @@ +# Frontend + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**id** | **int** | | [optional] +**frontend_token** | **str** | | [optional] +**share_token** | **str** | | [optional] +**backend_mode** | **str** | | [optional] +**bind_address** | **str** | | [optional] +**description** | **str** | | [optional] +**z_id** | **str** | | [optional] +**created_at** | **int** | | [optional] +**updated_at** | **int** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/sdk/python/sdk/zrok/docs/FrontendBody.md b/sdk/python/sdk/zrok/docs/FrontendBody.md new file mode 100644 index 00000000..5d0a3e37 --- /dev/null +++ b/sdk/python/sdk/zrok/docs/FrontendBody.md @@ -0,0 +1,12 @@ +# FrontendBody + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**z_id** | **str** | | [optional] +**url_template** | **str** | | [optional] +**public_name** | **str** | | [optional] +**permission_mode** | **str** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/sdk/python/sdk/zrok/docs/FrontendBody1.md b/sdk/python/sdk/zrok/docs/FrontendBody1.md new file mode 100644 index 00000000..7bcd3be5 --- /dev/null +++ b/sdk/python/sdk/zrok/docs/FrontendBody1.md @@ -0,0 +1,9 @@ +# FrontendBody1 + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**frontend_token** | **str** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/sdk/python/sdk/zrok/docs/FrontendBody2.md b/sdk/python/sdk/zrok/docs/FrontendBody2.md new file mode 100644 index 00000000..e459d152 --- /dev/null +++ b/sdk/python/sdk/zrok/docs/FrontendBody2.md @@ -0,0 +1,11 @@ +# FrontendBody2 + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**frontend_token** | **str** | | [optional] +**public_name** | **str** | | [optional] +**url_template** | **str** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/sdk/python/sdk/zrok/docs/Frontends.md b/sdk/python/sdk/zrok/docs/Frontends.md new file mode 100644 index 00000000..c308436b --- /dev/null +++ b/sdk/python/sdk/zrok/docs/Frontends.md @@ -0,0 +1,8 @@ +# Frontends + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/sdk/python/sdk/zrok/docs/GrantsBody.md b/sdk/python/sdk/zrok/docs/GrantsBody.md new file mode 100644 index 00000000..1e744a53 --- /dev/null +++ b/sdk/python/sdk/zrok/docs/GrantsBody.md @@ -0,0 +1,9 @@ +# GrantsBody + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**email** | **str** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/sdk/python/sdk/zrok/docs/IdentityBody.md b/sdk/python/sdk/zrok/docs/IdentityBody.md new file mode 100644 index 00000000..39125ca5 --- /dev/null +++ b/sdk/python/sdk/zrok/docs/IdentityBody.md @@ -0,0 +1,9 @@ +# IdentityBody + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**name** | **str** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/sdk/python/sdk/zrok/docs/InlineResponse200.md b/sdk/python/sdk/zrok/docs/InlineResponse200.md new file mode 100644 index 00000000..cc5f9b8b --- /dev/null +++ b/sdk/python/sdk/zrok/docs/InlineResponse200.md @@ -0,0 +1,9 @@ +# InlineResponse200 + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**account_token** | **str** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/sdk/python/sdk/zrok/docs/InlineResponse2001.md b/sdk/python/sdk/zrok/docs/InlineResponse2001.md new file mode 100644 index 00000000..820bf042 --- /dev/null +++ b/sdk/python/sdk/zrok/docs/InlineResponse2001.md @@ -0,0 +1,9 @@ +# InlineResponse2001 + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**email** | **str** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/sdk/python/sdk/zrok/docs/InlineResponse2002.md b/sdk/python/sdk/zrok/docs/InlineResponse2002.md new file mode 100644 index 00000000..d50b57e3 --- /dev/null +++ b/sdk/python/sdk/zrok/docs/InlineResponse2002.md @@ -0,0 +1,14 @@ +# InlineResponse2002 + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**frontend_token** | **str** | | [optional] +**z_id** | **str** | | [optional] +**url_template** | **str** | | [optional] +**public_name** | **str** | | [optional] +**created_at** | **int** | | [optional] +**updated_at** | **int** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/sdk/python/sdk/zrok/docs/InlineResponse2003.md b/sdk/python/sdk/zrok/docs/InlineResponse2003.md new file mode 100644 index 00000000..39488d9e --- /dev/null +++ b/sdk/python/sdk/zrok/docs/InlineResponse2003.md @@ -0,0 +1,9 @@ +# InlineResponse2003 + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**members** | [**list[InlineResponse2003Members]**](InlineResponse2003Members.md) | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/sdk/python/sdk/zrok/docs/InlineResponse2003Members.md b/sdk/python/sdk/zrok/docs/InlineResponse2003Members.md new file mode 100644 index 00000000..ddc3c4dd --- /dev/null +++ b/sdk/python/sdk/zrok/docs/InlineResponse2003Members.md @@ -0,0 +1,10 @@ +# InlineResponse2003Members + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**email** | **str** | | [optional] +**admin** | **bool** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/sdk/python/sdk/zrok/docs/InlineResponse2004.md b/sdk/python/sdk/zrok/docs/InlineResponse2004.md new file mode 100644 index 00000000..8c11d95d --- /dev/null +++ b/sdk/python/sdk/zrok/docs/InlineResponse2004.md @@ -0,0 +1,9 @@ +# InlineResponse2004 + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**organizations** | [**list[InlineResponse2004Organizations]**](InlineResponse2004Organizations.md) | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/sdk/python/sdk/zrok/docs/InlineResponse2004Members.md b/sdk/python/sdk/zrok/docs/InlineResponse2004Members.md new file mode 100644 index 00000000..9a3ba443 --- /dev/null +++ b/sdk/python/sdk/zrok/docs/InlineResponse2004Members.md @@ -0,0 +1,10 @@ +# InlineResponse2004Members + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**email** | **str** | | [optional] +**admin** | **bool** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/sdk/python/sdk/zrok/docs/InlineResponse2004Organizations.md b/sdk/python/sdk/zrok/docs/InlineResponse2004Organizations.md new file mode 100644 index 00000000..053d9f98 --- /dev/null +++ b/sdk/python/sdk/zrok/docs/InlineResponse2004Organizations.md @@ -0,0 +1,10 @@ +# InlineResponse2004Organizations + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**organization_token** | **str** | | [optional] +**description** | **str** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/sdk/python/sdk/zrok/docs/InlineResponse2005.md b/sdk/python/sdk/zrok/docs/InlineResponse2005.md new file mode 100644 index 00000000..8f539747 --- /dev/null +++ b/sdk/python/sdk/zrok/docs/InlineResponse2005.md @@ -0,0 +1,9 @@ +# InlineResponse2005 + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**memberships** | [**list[InlineResponse2005Memberships]**](InlineResponse2005Memberships.md) | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/sdk/python/sdk/zrok/docs/InlineResponse2005Memberships.md b/sdk/python/sdk/zrok/docs/InlineResponse2005Memberships.md new file mode 100644 index 00000000..147189c3 --- /dev/null +++ b/sdk/python/sdk/zrok/docs/InlineResponse2005Memberships.md @@ -0,0 +1,11 @@ +# InlineResponse2005Memberships + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**organization_token** | **str** | | [optional] +**description** | **str** | | [optional] +**admin** | **bool** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/sdk/python/sdk/zrok/docs/InlineResponse2005Organizations.md b/sdk/python/sdk/zrok/docs/InlineResponse2005Organizations.md new file mode 100644 index 00000000..2f4ba151 --- /dev/null +++ b/sdk/python/sdk/zrok/docs/InlineResponse2005Organizations.md @@ -0,0 +1,10 @@ +# InlineResponse2005Organizations + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**token** | **str** | | [optional] +**description** | **str** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/sdk/python/sdk/zrok/docs/InlineResponse2006.md b/sdk/python/sdk/zrok/docs/InlineResponse2006.md new file mode 100644 index 00000000..7a03d61e --- /dev/null +++ b/sdk/python/sdk/zrok/docs/InlineResponse2006.md @@ -0,0 +1,9 @@ +# InlineResponse2006 + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**sparklines** | [**list[Metrics]**](Metrics.md) | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/sdk/python/sdk/zrok/docs/InlineResponse2006Memberships.md b/sdk/python/sdk/zrok/docs/InlineResponse2006Memberships.md new file mode 100644 index 00000000..942c1d52 --- /dev/null +++ b/sdk/python/sdk/zrok/docs/InlineResponse2006Memberships.md @@ -0,0 +1,11 @@ +# InlineResponse2006Memberships + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**token** | **str** | | [optional] +**description** | **str** | | [optional] +**admin** | **bool** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/sdk/python/sdk/zrok/docs/InlineResponse2007.md b/sdk/python/sdk/zrok/docs/InlineResponse2007.md new file mode 100644 index 00000000..4e7c07b3 --- /dev/null +++ b/sdk/python/sdk/zrok/docs/InlineResponse2007.md @@ -0,0 +1,9 @@ +# InlineResponse2007 + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**sparklines** | [**list[Metrics]**](Metrics.md) | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/sdk/python/sdk/zrok/docs/InlineResponse201.md b/sdk/python/sdk/zrok/docs/InlineResponse201.md new file mode 100644 index 00000000..bbe25b94 --- /dev/null +++ b/sdk/python/sdk/zrok/docs/InlineResponse201.md @@ -0,0 +1,9 @@ +# InlineResponse201 + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**frontend_token** | **str** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/sdk/python/sdk/zrok/docs/InlineResponse2011.md b/sdk/python/sdk/zrok/docs/InlineResponse2011.md new file mode 100644 index 00000000..8fd74494 --- /dev/null +++ b/sdk/python/sdk/zrok/docs/InlineResponse2011.md @@ -0,0 +1,10 @@ +# InlineResponse2011 + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**identity** | **str** | | [optional] +**cfg** | **str** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/sdk/python/sdk/zrok/docs/InlineResponse2012.md b/sdk/python/sdk/zrok/docs/InlineResponse2012.md new file mode 100644 index 00000000..a72f2065 --- /dev/null +++ b/sdk/python/sdk/zrok/docs/InlineResponse2012.md @@ -0,0 +1,9 @@ +# InlineResponse2012 + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**organization_token** | **str** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/sdk/python/sdk/zrok/docs/InlineResponse2013.md b/sdk/python/sdk/zrok/docs/InlineResponse2013.md new file mode 100644 index 00000000..98930cb2 --- /dev/null +++ b/sdk/python/sdk/zrok/docs/InlineResponse2013.md @@ -0,0 +1,10 @@ +# InlineResponse2013 + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**frontend_token** | **str** | | [optional] +**backend_mode** | **str** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/sdk/python/sdk/zrok/docs/InlineResponse400.md b/sdk/python/sdk/zrok/docs/InlineResponse400.md new file mode 100644 index 00000000..29c731f6 --- /dev/null +++ b/sdk/python/sdk/zrok/docs/InlineResponse400.md @@ -0,0 +1,9 @@ +# InlineResponse400 + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**message** | **str** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/sdk/python/sdk/zrok/docs/InviteBody.md b/sdk/python/sdk/zrok/docs/InviteBody.md new file mode 100644 index 00000000..0fb2fcb0 --- /dev/null +++ b/sdk/python/sdk/zrok/docs/InviteBody.md @@ -0,0 +1,10 @@ +# InviteBody + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**email** | **str** | | [optional] +**invite_token** | **str** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/sdk/python/sdk/zrok/docs/LoginBody.md b/sdk/python/sdk/zrok/docs/LoginBody.md new file mode 100644 index 00000000..b877ebb8 --- /dev/null +++ b/sdk/python/sdk/zrok/docs/LoginBody.md @@ -0,0 +1,10 @@ +# LoginBody + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**email** | **str** | | [optional] +**password** | **str** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/sdk/python/sdk/zrok/docs/MetadataApi.md b/sdk/python/sdk/zrok/docs/MetadataApi.md new file mode 100644 index 00000000..6c0ce6c9 --- /dev/null +++ b/sdk/python/sdk/zrok/docs/MetadataApi.md @@ -0,0 +1,754 @@ +# zrok_api.MetadataApi + +All URIs are relative to */api/v1* + +Method | HTTP request | Description +------------- | ------------- | ------------- +[**client_version_check**](MetadataApi.md#client_version_check) | **POST** /version | +[**configuration**](MetadataApi.md#configuration) | **GET** /configuration | +[**get_account_detail**](MetadataApi.md#get_account_detail) | **GET** /detail/account | +[**get_account_metrics**](MetadataApi.md#get_account_metrics) | **GET** /metrics/account | +[**get_environment_detail**](MetadataApi.md#get_environment_detail) | **GET** /detail/environment/{envZId} | +[**get_environment_metrics**](MetadataApi.md#get_environment_metrics) | **GET** /metrics/environment/{envId} | +[**get_frontend_detail**](MetadataApi.md#get_frontend_detail) | **GET** /detail/frontend/{frontendId} | +[**get_share_detail**](MetadataApi.md#get_share_detail) | **GET** /detail/share/{shareToken} | +[**get_share_metrics**](MetadataApi.md#get_share_metrics) | **GET** /metrics/share/{shareToken} | +[**get_sparklines**](MetadataApi.md#get_sparklines) | **POST** /sparklines | +[**list_memberships**](MetadataApi.md#list_memberships) | **GET** /memberships | +[**list_org_members**](MetadataApi.md#list_org_members) | **GET** /members/{organizationToken} | +[**org_account_overview**](MetadataApi.md#org_account_overview) | **GET** /overview/{organizationToken}/{accountEmail} | +[**overview**](MetadataApi.md#overview) | **GET** /overview | +[**version**](MetadataApi.md#version) | **GET** /version | + +# **client_version_check** +> client_version_check(body=body) + + + +### Example +```python +from __future__ import print_function +import time +import zrok_api +from zrok_api.rest import ApiException +from pprint import pprint + +# create an instance of the API class +api_instance = zrok_api.MetadataApi() +body = zrok_api.VersionBody() # VersionBody | (optional) + +try: + api_instance.client_version_check(body=body) +except ApiException as e: + print("Exception when calling MetadataApi->client_version_check: %s\n" % e) +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **body** | [**VersionBody**](VersionBody.md)| | [optional] + +### Return type + +void (empty response body) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: application/zrok.v1+json + - **Accept**: application/zrok.v1+json + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **configuration** +> Configuration configuration() + + + +### Example +```python +from __future__ import print_function +import time +import zrok_api +from zrok_api.rest import ApiException +from pprint import pprint + +# create an instance of the API class +api_instance = zrok_api.MetadataApi() + +try: + api_response = api_instance.configuration() + pprint(api_response) +except ApiException as e: + print("Exception when calling MetadataApi->configuration: %s\n" % e) +``` + +### Parameters +This endpoint does not need any parameter. + +### Return type + +[**Configuration**](Configuration.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/zrok.v1+json + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **get_account_detail** +> Environments get_account_detail() + + + +### Example +```python +from __future__ import print_function +import time +import zrok_api +from zrok_api.rest import ApiException +from pprint import pprint + +# Configure API key authorization: key +configuration = zrok_api.Configuration() +configuration.api_key['x-token'] = 'YOUR_API_KEY' +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['x-token'] = 'Bearer' + +# create an instance of the API class +api_instance = zrok_api.MetadataApi(zrok_api.ApiClient(configuration)) + +try: + api_response = api_instance.get_account_detail() + pprint(api_response) +except ApiException as e: + print("Exception when calling MetadataApi->get_account_detail: %s\n" % e) +``` + +### Parameters +This endpoint does not need any parameter. + +### Return type + +[**Environments**](Environments.md) + +### Authorization + +[key](../README.md#key) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/zrok.v1+json + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **get_account_metrics** +> Metrics get_account_metrics(duration=duration) + + + +### Example +```python +from __future__ import print_function +import time +import zrok_api +from zrok_api.rest import ApiException +from pprint import pprint + +# Configure API key authorization: key +configuration = zrok_api.Configuration() +configuration.api_key['x-token'] = 'YOUR_API_KEY' +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['x-token'] = 'Bearer' + +# create an instance of the API class +api_instance = zrok_api.MetadataApi(zrok_api.ApiClient(configuration)) +duration = 'duration_example' # str | (optional) + +try: + api_response = api_instance.get_account_metrics(duration=duration) + pprint(api_response) +except ApiException as e: + print("Exception when calling MetadataApi->get_account_metrics: %s\n" % e) +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **duration** | **str**| | [optional] + +### Return type + +[**Metrics**](Metrics.md) + +### Authorization + +[key](../README.md#key) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/zrok.v1+json + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **get_environment_detail** +> EnvironmentAndResources get_environment_detail(env_zid) + + + +### Example +```python +from __future__ import print_function +import time +import zrok_api +from zrok_api.rest import ApiException +from pprint import pprint + +# Configure API key authorization: key +configuration = zrok_api.Configuration() +configuration.api_key['x-token'] = 'YOUR_API_KEY' +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['x-token'] = 'Bearer' + +# create an instance of the API class +api_instance = zrok_api.MetadataApi(zrok_api.ApiClient(configuration)) +env_zid = 'env_zid_example' # str | + +try: + api_response = api_instance.get_environment_detail(env_zid) + pprint(api_response) +except ApiException as e: + print("Exception when calling MetadataApi->get_environment_detail: %s\n" % e) +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **env_zid** | **str**| | + +### Return type + +[**EnvironmentAndResources**](EnvironmentAndResources.md) + +### Authorization + +[key](../README.md#key) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/zrok.v1+json + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **get_environment_metrics** +> Metrics get_environment_metrics(env_id, duration=duration) + + + +### Example +```python +from __future__ import print_function +import time +import zrok_api +from zrok_api.rest import ApiException +from pprint import pprint + +# Configure API key authorization: key +configuration = zrok_api.Configuration() +configuration.api_key['x-token'] = 'YOUR_API_KEY' +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['x-token'] = 'Bearer' + +# create an instance of the API class +api_instance = zrok_api.MetadataApi(zrok_api.ApiClient(configuration)) +env_id = 'env_id_example' # str | +duration = 'duration_example' # str | (optional) + +try: + api_response = api_instance.get_environment_metrics(env_id, duration=duration) + pprint(api_response) +except ApiException as e: + print("Exception when calling MetadataApi->get_environment_metrics: %s\n" % e) +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **env_id** | **str**| | + **duration** | **str**| | [optional] + +### Return type + +[**Metrics**](Metrics.md) + +### Authorization + +[key](../README.md#key) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/zrok.v1+json + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **get_frontend_detail** +> Frontend get_frontend_detail(frontend_id) + + + +### Example +```python +from __future__ import print_function +import time +import zrok_api +from zrok_api.rest import ApiException +from pprint import pprint + +# Configure API key authorization: key +configuration = zrok_api.Configuration() +configuration.api_key['x-token'] = 'YOUR_API_KEY' +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['x-token'] = 'Bearer' + +# create an instance of the API class +api_instance = zrok_api.MetadataApi(zrok_api.ApiClient(configuration)) +frontend_id = 56 # int | + +try: + api_response = api_instance.get_frontend_detail(frontend_id) + pprint(api_response) +except ApiException as e: + print("Exception when calling MetadataApi->get_frontend_detail: %s\n" % e) +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **frontend_id** | **int**| | + +### Return type + +[**Frontend**](Frontend.md) + +### Authorization + +[key](../README.md#key) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/zrok.v1+json + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **get_share_detail** +> Share get_share_detail(share_token) + + + +### Example +```python +from __future__ import print_function +import time +import zrok_api +from zrok_api.rest import ApiException +from pprint import pprint + +# Configure API key authorization: key +configuration = zrok_api.Configuration() +configuration.api_key['x-token'] = 'YOUR_API_KEY' +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['x-token'] = 'Bearer' + +# create an instance of the API class +api_instance = zrok_api.MetadataApi(zrok_api.ApiClient(configuration)) +share_token = 'share_token_example' # str | + +try: + api_response = api_instance.get_share_detail(share_token) + pprint(api_response) +except ApiException as e: + print("Exception when calling MetadataApi->get_share_detail: %s\n" % e) +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **share_token** | **str**| | + +### Return type + +[**Share**](Share.md) + +### Authorization + +[key](../README.md#key) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/zrok.v1+json + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **get_share_metrics** +> Metrics get_share_metrics(share_token, duration=duration) + + + +### Example +```python +from __future__ import print_function +import time +import zrok_api +from zrok_api.rest import ApiException +from pprint import pprint + +# Configure API key authorization: key +configuration = zrok_api.Configuration() +configuration.api_key['x-token'] = 'YOUR_API_KEY' +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['x-token'] = 'Bearer' + +# create an instance of the API class +api_instance = zrok_api.MetadataApi(zrok_api.ApiClient(configuration)) +share_token = 'share_token_example' # str | +duration = 'duration_example' # str | (optional) + +try: + api_response = api_instance.get_share_metrics(share_token, duration=duration) + pprint(api_response) +except ApiException as e: + print("Exception when calling MetadataApi->get_share_metrics: %s\n" % e) +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **share_token** | **str**| | + **duration** | **str**| | [optional] + +### Return type + +[**Metrics**](Metrics.md) + +### Authorization + +[key](../README.md#key) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/zrok.v1+json + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **get_sparklines** +> InlineResponse2006 get_sparklines(body=body) + + + +### Example +```python +from __future__ import print_function +import time +import zrok_api +from zrok_api.rest import ApiException +from pprint import pprint + +# Configure API key authorization: key +configuration = zrok_api.Configuration() +configuration.api_key['x-token'] = 'YOUR_API_KEY' +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['x-token'] = 'Bearer' + +# create an instance of the API class +api_instance = zrok_api.MetadataApi(zrok_api.ApiClient(configuration)) +body = zrok_api.SparklinesBody() # SparklinesBody | (optional) + +try: + api_response = api_instance.get_sparklines(body=body) + pprint(api_response) +except ApiException as e: + print("Exception when calling MetadataApi->get_sparklines: %s\n" % e) +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **body** | [**SparklinesBody**](SparklinesBody.md)| | [optional] + +### Return type + +[**InlineResponse2006**](InlineResponse2006.md) + +### Authorization + +[key](../README.md#key) + +### HTTP request headers + + - **Content-Type**: application/zrok.v1+json + - **Accept**: application/zrok.v1+json + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **list_memberships** +> InlineResponse2005 list_memberships() + + + +### Example +```python +from __future__ import print_function +import time +import zrok_api +from zrok_api.rest import ApiException +from pprint import pprint + +# Configure API key authorization: key +configuration = zrok_api.Configuration() +configuration.api_key['x-token'] = 'YOUR_API_KEY' +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['x-token'] = 'Bearer' + +# create an instance of the API class +api_instance = zrok_api.MetadataApi(zrok_api.ApiClient(configuration)) + +try: + api_response = api_instance.list_memberships() + pprint(api_response) +except ApiException as e: + print("Exception when calling MetadataApi->list_memberships: %s\n" % e) +``` + +### Parameters +This endpoint does not need any parameter. + +### Return type + +[**InlineResponse2005**](InlineResponse2005.md) + +### Authorization + +[key](../README.md#key) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/zrok.v1+json + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **list_org_members** +> InlineResponse2003 list_org_members(organization_token) + + + +### Example +```python +from __future__ import print_function +import time +import zrok_api +from zrok_api.rest import ApiException +from pprint import pprint + +# Configure API key authorization: key +configuration = zrok_api.Configuration() +configuration.api_key['x-token'] = 'YOUR_API_KEY' +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['x-token'] = 'Bearer' + +# create an instance of the API class +api_instance = zrok_api.MetadataApi(zrok_api.ApiClient(configuration)) +organization_token = 'organization_token_example' # str | + +try: + api_response = api_instance.list_org_members(organization_token) + pprint(api_response) +except ApiException as e: + print("Exception when calling MetadataApi->list_org_members: %s\n" % e) +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **organization_token** | **str**| | + +### Return type + +[**InlineResponse2003**](InlineResponse2003.md) + +### Authorization + +[key](../README.md#key) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/zrok.v1+json + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **org_account_overview** +> Overview org_account_overview(organization_token, account_email) + + + +### Example +```python +from __future__ import print_function +import time +import zrok_api +from zrok_api.rest import ApiException +from pprint import pprint + +# Configure API key authorization: key +configuration = zrok_api.Configuration() +configuration.api_key['x-token'] = 'YOUR_API_KEY' +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['x-token'] = 'Bearer' + +# create an instance of the API class +api_instance = zrok_api.MetadataApi(zrok_api.ApiClient(configuration)) +organization_token = 'organization_token_example' # str | +account_email = 'account_email_example' # str | + +try: + api_response = api_instance.org_account_overview(organization_token, account_email) + pprint(api_response) +except ApiException as e: + print("Exception when calling MetadataApi->org_account_overview: %s\n" % e) +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **organization_token** | **str**| | + **account_email** | **str**| | + +### Return type + +[**Overview**](Overview.md) + +### Authorization + +[key](../README.md#key) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/zrok.v1+json + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **overview** +> Overview overview() + + + +### Example +```python +from __future__ import print_function +import time +import zrok_api +from zrok_api.rest import ApiException +from pprint import pprint + +# Configure API key authorization: key +configuration = zrok_api.Configuration() +configuration.api_key['x-token'] = 'YOUR_API_KEY' +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['x-token'] = 'Bearer' + +# create an instance of the API class +api_instance = zrok_api.MetadataApi(zrok_api.ApiClient(configuration)) + +try: + api_response = api_instance.overview() + pprint(api_response) +except ApiException as e: + print("Exception when calling MetadataApi->overview: %s\n" % e) +``` + +### Parameters +This endpoint does not need any parameter. + +### Return type + +[**Overview**](Overview.md) + +### Authorization + +[key](../README.md#key) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/zrok.v1+json + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **version** +> Version version() + + + +### Example +```python +from __future__ import print_function +import time +import zrok_api +from zrok_api.rest import ApiException +from pprint import pprint + +# create an instance of the API class +api_instance = zrok_api.MetadataApi() + +try: + api_response = api_instance.version() + pprint(api_response) +except ApiException as e: + print("Exception when calling MetadataApi->version: %s\n" % e) +``` + +### Parameters +This endpoint does not need any parameter. + +### Return type + +[**Version**](Version.md) + +### Authorization + +No authorization required + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: application/zrok.v1+json + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + diff --git a/sdk/python/sdk/zrok/docs/Metrics.md b/sdk/python/sdk/zrok/docs/Metrics.md new file mode 100644 index 00000000..0be4994b --- /dev/null +++ b/sdk/python/sdk/zrok/docs/Metrics.md @@ -0,0 +1,12 @@ +# Metrics + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**scope** | **str** | | [optional] +**id** | **str** | | [optional] +**period** | **float** | | [optional] +**samples** | [**list[MetricsSample]**](MetricsSample.md) | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/sdk/python/sdk/zrok/docs/MetricsSample.md b/sdk/python/sdk/zrok/docs/MetricsSample.md new file mode 100644 index 00000000..60863b05 --- /dev/null +++ b/sdk/python/sdk/zrok/docs/MetricsSample.md @@ -0,0 +1,11 @@ +# MetricsSample + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**rx** | **float** | | [optional] +**tx** | **float** | | [optional] +**timestamp** | **float** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/sdk/python/sdk/zrok/docs/OrganizationAddBody.md b/sdk/python/sdk/zrok/docs/OrganizationAddBody.md new file mode 100644 index 00000000..485613d0 --- /dev/null +++ b/sdk/python/sdk/zrok/docs/OrganizationAddBody.md @@ -0,0 +1,11 @@ +# OrganizationAddBody + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**organization_token** | **str** | | [optional] +**email** | **str** | | [optional] +**admin** | **bool** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/sdk/python/sdk/zrok/docs/OrganizationBody.md b/sdk/python/sdk/zrok/docs/OrganizationBody.md new file mode 100644 index 00000000..014b7e7a --- /dev/null +++ b/sdk/python/sdk/zrok/docs/OrganizationBody.md @@ -0,0 +1,9 @@ +# OrganizationBody + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**description** | **str** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/sdk/python/sdk/zrok/docs/OrganizationBody1.md b/sdk/python/sdk/zrok/docs/OrganizationBody1.md new file mode 100644 index 00000000..2fbaf697 --- /dev/null +++ b/sdk/python/sdk/zrok/docs/OrganizationBody1.md @@ -0,0 +1,9 @@ +# OrganizationBody1 + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**organization_token** | **str** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/sdk/python/sdk/zrok/docs/OrganizationListBody.md b/sdk/python/sdk/zrok/docs/OrganizationListBody.md new file mode 100644 index 00000000..2ceb8a7d --- /dev/null +++ b/sdk/python/sdk/zrok/docs/OrganizationListBody.md @@ -0,0 +1,9 @@ +# OrganizationListBody + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**organization_token** | **str** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/sdk/python/sdk/zrok/docs/OrganizationRemoveBody.md b/sdk/python/sdk/zrok/docs/OrganizationRemoveBody.md new file mode 100644 index 00000000..f61c0b93 --- /dev/null +++ b/sdk/python/sdk/zrok/docs/OrganizationRemoveBody.md @@ -0,0 +1,10 @@ +# OrganizationRemoveBody + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**organization_token** | **str** | | [optional] +**email** | **str** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/sdk/python/sdk/zrok/docs/Overview.md b/sdk/python/sdk/zrok/docs/Overview.md new file mode 100644 index 00000000..4d477740 --- /dev/null +++ b/sdk/python/sdk/zrok/docs/Overview.md @@ -0,0 +1,10 @@ +# Overview + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**account_limited** | **bool** | | [optional] +**environments** | [**list[EnvironmentAndResources]**](EnvironmentAndResources.md) | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/sdk/python/sdk/zrok/docs/Principal.md b/sdk/python/sdk/zrok/docs/Principal.md new file mode 100644 index 00000000..c45a677a --- /dev/null +++ b/sdk/python/sdk/zrok/docs/Principal.md @@ -0,0 +1,13 @@ +# Principal + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**id** | **int** | | [optional] +**email** | **str** | | [optional] +**token** | **str** | | [optional] +**limitless** | **bool** | | [optional] +**admin** | **bool** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/sdk/python/sdk/zrok/docs/RegenerateAccountTokenBody.md b/sdk/python/sdk/zrok/docs/RegenerateAccountTokenBody.md new file mode 100644 index 00000000..930d7945 --- /dev/null +++ b/sdk/python/sdk/zrok/docs/RegenerateAccountTokenBody.md @@ -0,0 +1,9 @@ +# RegenerateAccountTokenBody + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**email_address** | **str** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/sdk/python/sdk/zrok/docs/RegenerateTokenBody.md b/sdk/python/sdk/zrok/docs/RegenerateTokenBody.md new file mode 100644 index 00000000..2c863aba --- /dev/null +++ b/sdk/python/sdk/zrok/docs/RegenerateTokenBody.md @@ -0,0 +1,9 @@ +# RegenerateTokenBody + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**email_address** | **str** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/sdk/python/sdk/zrok/docs/RegisterBody.md b/sdk/python/sdk/zrok/docs/RegisterBody.md new file mode 100644 index 00000000..0adc3fc8 --- /dev/null +++ b/sdk/python/sdk/zrok/docs/RegisterBody.md @@ -0,0 +1,10 @@ +# RegisterBody + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**register_token** | **str** | | [optional] +**password** | **str** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/sdk/python/sdk/zrok/docs/ResetPasswordBody.md b/sdk/python/sdk/zrok/docs/ResetPasswordBody.md new file mode 100644 index 00000000..9f74c6d6 --- /dev/null +++ b/sdk/python/sdk/zrok/docs/ResetPasswordBody.md @@ -0,0 +1,10 @@ +# ResetPasswordBody + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**reset_token** | **str** | | [optional] +**password** | **str** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/sdk/python/sdk/zrok/docs/ResetPasswordRequestBody.md b/sdk/python/sdk/zrok/docs/ResetPasswordRequestBody.md new file mode 100644 index 00000000..a59834d9 --- /dev/null +++ b/sdk/python/sdk/zrok/docs/ResetPasswordRequestBody.md @@ -0,0 +1,9 @@ +# ResetPasswordRequestBody + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**email_address** | **str** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/sdk/python/sdk/zrok/docs/Share.md b/sdk/python/sdk/zrok/docs/Share.md new file mode 100644 index 00000000..8a5d67ab --- /dev/null +++ b/sdk/python/sdk/zrok/docs/Share.md @@ -0,0 +1,20 @@ +# Share + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**share_token** | **str** | | [optional] +**z_id** | **str** | | [optional] +**share_mode** | **str** | | [optional] +**backend_mode** | **str** | | [optional] +**frontend_selection** | **str** | | [optional] +**frontend_endpoint** | **str** | | [optional] +**backend_proxy_endpoint** | **str** | | [optional] +**reserved** | **bool** | | [optional] +**activity** | [**SparkData**](SparkData.md) | | [optional] +**limited** | **bool** | | [optional] +**created_at** | **int** | | [optional] +**updated_at** | **int** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/sdk/python/sdk/zrok/docs/ShareApi.md b/sdk/python/sdk/zrok/docs/ShareApi.md new file mode 100644 index 00000000..86a8b390 --- /dev/null +++ b/sdk/python/sdk/zrok/docs/ShareApi.md @@ -0,0 +1,315 @@ +# zrok_api.ShareApi + +All URIs are relative to */api/v1* + +Method | HTTP request | Description +------------- | ------------- | ------------- +[**access**](ShareApi.md#access) | **POST** /access | +[**share**](ShareApi.md#share) | **POST** /share | +[**unaccess**](ShareApi.md#unaccess) | **DELETE** /unaccess | +[**unshare**](ShareApi.md#unshare) | **DELETE** /unshare | +[**update_access**](ShareApi.md#update_access) | **PATCH** /access | +[**update_share**](ShareApi.md#update_share) | **PATCH** /share | + +# **access** +> InlineResponse2013 access(body=body) + + + +### Example +```python +from __future__ import print_function +import time +import zrok_api +from zrok_api.rest import ApiException +from pprint import pprint + +# Configure API key authorization: key +configuration = zrok_api.Configuration() +configuration.api_key['x-token'] = 'YOUR_API_KEY' +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['x-token'] = 'Bearer' + +# create an instance of the API class +api_instance = zrok_api.ShareApi(zrok_api.ApiClient(configuration)) +body = zrok_api.AccessBody() # AccessBody | (optional) + +try: + api_response = api_instance.access(body=body) + pprint(api_response) +except ApiException as e: + print("Exception when calling ShareApi->access: %s\n" % e) +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **body** | [**AccessBody**](AccessBody.md)| | [optional] + +### Return type + +[**InlineResponse2013**](InlineResponse2013.md) + +### Authorization + +[key](../README.md#key) + +### HTTP request headers + + - **Content-Type**: application/zrok.v1+json + - **Accept**: application/zrok.v1+json + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **share** +> ShareResponse share(body=body) + + + +### Example +```python +from __future__ import print_function +import time +import zrok_api +from zrok_api.rest import ApiException +from pprint import pprint + +# Configure API key authorization: key +configuration = zrok_api.Configuration() +configuration.api_key['x-token'] = 'YOUR_API_KEY' +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['x-token'] = 'Bearer' + +# create an instance of the API class +api_instance = zrok_api.ShareApi(zrok_api.ApiClient(configuration)) +body = zrok_api.ShareRequest() # ShareRequest | (optional) + +try: + api_response = api_instance.share(body=body) + pprint(api_response) +except ApiException as e: + print("Exception when calling ShareApi->share: %s\n" % e) +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **body** | [**ShareRequest**](ShareRequest.md)| | [optional] + +### Return type + +[**ShareResponse**](ShareResponse.md) + +### Authorization + +[key](../README.md#key) + +### HTTP request headers + + - **Content-Type**: application/zrok.v1+json + - **Accept**: application/zrok.v1+json + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **unaccess** +> unaccess(body=body) + + + +### Example +```python +from __future__ import print_function +import time +import zrok_api +from zrok_api.rest import ApiException +from pprint import pprint + +# Configure API key authorization: key +configuration = zrok_api.Configuration() +configuration.api_key['x-token'] = 'YOUR_API_KEY' +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['x-token'] = 'Bearer' + +# create an instance of the API class +api_instance = zrok_api.ShareApi(zrok_api.ApiClient(configuration)) +body = zrok_api.UnaccessBody() # UnaccessBody | (optional) + +try: + api_instance.unaccess(body=body) +except ApiException as e: + print("Exception when calling ShareApi->unaccess: %s\n" % e) +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **body** | [**UnaccessBody**](UnaccessBody.md)| | [optional] + +### Return type + +void (empty response body) + +### Authorization + +[key](../README.md#key) + +### HTTP request headers + + - **Content-Type**: application/zrok.v1+json + - **Accept**: Not defined + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **unshare** +> unshare(body=body) + + + +### Example +```python +from __future__ import print_function +import time +import zrok_api +from zrok_api.rest import ApiException +from pprint import pprint + +# Configure API key authorization: key +configuration = zrok_api.Configuration() +configuration.api_key['x-token'] = 'YOUR_API_KEY' +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['x-token'] = 'Bearer' + +# create an instance of the API class +api_instance = zrok_api.ShareApi(zrok_api.ApiClient(configuration)) +body = zrok_api.UnshareBody() # UnshareBody | (optional) + +try: + api_instance.unshare(body=body) +except ApiException as e: + print("Exception when calling ShareApi->unshare: %s\n" % e) +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **body** | [**UnshareBody**](UnshareBody.md)| | [optional] + +### Return type + +void (empty response body) + +### Authorization + +[key](../README.md#key) + +### HTTP request headers + + - **Content-Type**: application/zrok.v1+json + - **Accept**: application/zrok.v1+json + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **update_access** +> update_access(body=body) + + + +### Example +```python +from __future__ import print_function +import time +import zrok_api +from zrok_api.rest import ApiException +from pprint import pprint + +# Configure API key authorization: key +configuration = zrok_api.Configuration() +configuration.api_key['x-token'] = 'YOUR_API_KEY' +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['x-token'] = 'Bearer' + +# create an instance of the API class +api_instance = zrok_api.ShareApi(zrok_api.ApiClient(configuration)) +body = zrok_api.AccessBody1() # AccessBody1 | (optional) + +try: + api_instance.update_access(body=body) +except ApiException as e: + print("Exception when calling ShareApi->update_access: %s\n" % e) +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **body** | [**AccessBody1**](AccessBody1.md)| | [optional] + +### Return type + +void (empty response body) + +### Authorization + +[key](../README.md#key) + +### HTTP request headers + + - **Content-Type**: application/zrok.v1+json + - **Accept**: Not defined + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **update_share** +> update_share(body=body) + + + +### Example +```python +from __future__ import print_function +import time +import zrok_api +from zrok_api.rest import ApiException +from pprint import pprint + +# Configure API key authorization: key +configuration = zrok_api.Configuration() +configuration.api_key['x-token'] = 'YOUR_API_KEY' +# Uncomment below to setup prefix (e.g. Bearer) for API key, if needed +# configuration.api_key_prefix['x-token'] = 'Bearer' + +# create an instance of the API class +api_instance = zrok_api.ShareApi(zrok_api.ApiClient(configuration)) +body = zrok_api.ShareBody() # ShareBody | (optional) + +try: + api_instance.update_share(body=body) +except ApiException as e: + print("Exception when calling ShareApi->update_share: %s\n" % e) +``` + +### Parameters + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **body** | [**ShareBody**](ShareBody.md)| | [optional] + +### Return type + +void (empty response body) + +### Authorization + +[key](../README.md#key) + +### HTTP request headers + + - **Content-Type**: application/zrok.v1+json + - **Accept**: Not defined + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + diff --git a/sdk/python/sdk/zrok/docs/ShareBody.md b/sdk/python/sdk/zrok/docs/ShareBody.md new file mode 100644 index 00000000..4c01d818 --- /dev/null +++ b/sdk/python/sdk/zrok/docs/ShareBody.md @@ -0,0 +1,12 @@ +# ShareBody + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**share_token** | **str** | | [optional] +**backend_proxy_endpoint** | **str** | | [optional] +**add_access_grants** | **list[str]** | | [optional] +**remove_access_grants** | **list[str]** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/sdk/python/sdk/zrok/docs/ShareRequest.md b/sdk/python/sdk/zrok/docs/ShareRequest.md new file mode 100644 index 00000000..d1054fc7 --- /dev/null +++ b/sdk/python/sdk/zrok/docs/ShareRequest.md @@ -0,0 +1,22 @@ +# ShareRequest + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**env_zid** | **str** | | [optional] +**share_mode** | **str** | | [optional] +**frontend_selection** | **list[str]** | | [optional] +**backend_mode** | **str** | | [optional] +**backend_proxy_endpoint** | **str** | | [optional] +**auth_scheme** | **str** | | [optional] +**auth_users** | [**list[AuthUser]**](AuthUser.md) | | [optional] +**oauth_provider** | **str** | | [optional] +**oauth_email_domains** | **list[str]** | | [optional] +**oauth_authorization_check_interval** | **str** | | [optional] +**reserved** | **bool** | | [optional] +**permission_mode** | **str** | | [optional] +**access_grants** | **list[str]** | | [optional] +**unique_name** | **str** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/sdk/python/sdk/zrok/docs/ShareResponse.md b/sdk/python/sdk/zrok/docs/ShareResponse.md new file mode 100644 index 00000000..f6d09e89 --- /dev/null +++ b/sdk/python/sdk/zrok/docs/ShareResponse.md @@ -0,0 +1,10 @@ +# ShareResponse + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**frontend_proxy_endpoints** | **list[str]** | | [optional] +**share_token** | **str** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/sdk/python/sdk/zrok/docs/Shares.md b/sdk/python/sdk/zrok/docs/Shares.md new file mode 100644 index 00000000..5e8cabd6 --- /dev/null +++ b/sdk/python/sdk/zrok/docs/Shares.md @@ -0,0 +1,8 @@ +# Shares + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/sdk/python/sdk/zrok/docs/SparkData.md b/sdk/python/sdk/zrok/docs/SparkData.md new file mode 100644 index 00000000..a0065208 --- /dev/null +++ b/sdk/python/sdk/zrok/docs/SparkData.md @@ -0,0 +1,8 @@ +# SparkData + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/sdk/python/sdk/zrok/docs/SparkDataSample.md b/sdk/python/sdk/zrok/docs/SparkDataSample.md new file mode 100644 index 00000000..192675b6 --- /dev/null +++ b/sdk/python/sdk/zrok/docs/SparkDataSample.md @@ -0,0 +1,10 @@ +# SparkDataSample + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**rx** | **float** | | [optional] +**tx** | **float** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/sdk/python/sdk/zrok/docs/SparklinesBody.md b/sdk/python/sdk/zrok/docs/SparklinesBody.md new file mode 100644 index 00000000..94437504 --- /dev/null +++ b/sdk/python/sdk/zrok/docs/SparklinesBody.md @@ -0,0 +1,11 @@ +# SparklinesBody + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**account** | **bool** | | [optional] +**environments** | **list[str]** | | [optional] +**shares** | **list[str]** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/sdk/python/sdk/zrok/docs/TokenGenerateBody.md b/sdk/python/sdk/zrok/docs/TokenGenerateBody.md new file mode 100644 index 00000000..0622eb92 --- /dev/null +++ b/sdk/python/sdk/zrok/docs/TokenGenerateBody.md @@ -0,0 +1,9 @@ +# TokenGenerateBody + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**invite_tokens** | **list[str]** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/sdk/python/sdk/zrok/docs/UnaccessBody.md b/sdk/python/sdk/zrok/docs/UnaccessBody.md new file mode 100644 index 00000000..d3bcdfbe --- /dev/null +++ b/sdk/python/sdk/zrok/docs/UnaccessBody.md @@ -0,0 +1,11 @@ +# UnaccessBody + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**frontend_token** | **str** | | [optional] +**env_zid** | **str** | | [optional] +**share_token** | **str** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/sdk/python/sdk/zrok/docs/UnshareBody.md b/sdk/python/sdk/zrok/docs/UnshareBody.md new file mode 100644 index 00000000..ec7c4dd1 --- /dev/null +++ b/sdk/python/sdk/zrok/docs/UnshareBody.md @@ -0,0 +1,11 @@ +# UnshareBody + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**env_zid** | **str** | | [optional] +**share_token** | **str** | | [optional] +**reserved** | **bool** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/sdk/python/sdk/zrok/docs/VerifyBody.md b/sdk/python/sdk/zrok/docs/VerifyBody.md new file mode 100644 index 00000000..993e6a34 --- /dev/null +++ b/sdk/python/sdk/zrok/docs/VerifyBody.md @@ -0,0 +1,9 @@ +# VerifyBody + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**register_token** | **str** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/sdk/python/sdk/zrok/docs/Version.md b/sdk/python/sdk/zrok/docs/Version.md new file mode 100644 index 00000000..203ff4a1 --- /dev/null +++ b/sdk/python/sdk/zrok/docs/Version.md @@ -0,0 +1,8 @@ +# Version + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/sdk/python/sdk/zrok/docs/VersionBody.md b/sdk/python/sdk/zrok/docs/VersionBody.md new file mode 100644 index 00000000..43f385ee --- /dev/null +++ b/sdk/python/sdk/zrok/docs/VersionBody.md @@ -0,0 +1,9 @@ +# VersionBody + +## Properties +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**client_version** | **str** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + diff --git a/sdk/python/sdk/zrok/git_push.sh b/sdk/python/sdk/zrok/git_push.sh new file mode 100644 index 00000000..ae01b182 --- /dev/null +++ b/sdk/python/sdk/zrok/git_push.sh @@ -0,0 +1,52 @@ +#!/bin/sh +# ref: https://help.github.com/articles/adding-an-existing-project-to-github-using-the-command-line/ +# +# Usage example: /bin/sh ./git_push.sh wing328 swagger-petstore-perl "minor update" + +git_user_id=$1 +git_repo_id=$2 +release_note=$3 + +if [ "$git_user_id" = "" ]; then + git_user_id="GIT_USER_ID" + echo "[INFO] No command line input provided. Set \$git_user_id to $git_user_id" +fi + +if [ "$git_repo_id" = "" ]; then + git_repo_id="GIT_REPO_ID" + echo "[INFO] No command line input provided. Set \$git_repo_id to $git_repo_id" +fi + +if [ "$release_note" = "" ]; then + release_note="Minor update" + echo "[INFO] No command line input provided. Set \$release_note to $release_note" +fi + +# Initialize the local directory as a Git repository +git init + +# Adds the files in the local repository and stages them for commit. +git add . + +# Commits the tracked changes and prepares them to be pushed to a remote repository. +git commit -m "$release_note" + +# Sets the new remote +git_remote=`git remote` +if [ "$git_remote" = "" ]; then # git remote not defined + + if [ "$GIT_TOKEN" = "" ]; then + echo "[INFO] \$GIT_TOKEN (environment variable) is not set. Using the git credential in your environment." + git remote add origin https://github.com/${git_user_id}/${git_repo_id}.git + else + git remote add origin https://${git_user_id}:${GIT_TOKEN}@github.com/${git_user_id}/${git_repo_id}.git + fi + +fi + +git pull origin master + +# Pushes (Forces) the changes in the local repository up to the remote repository +echo "Git pushing to https://github.com/${git_user_id}/${git_repo_id}.git" +git push origin master 2>&1 | grep -v 'To https' + diff --git a/sdk/python/sdk/zrok/setup.cfg b/sdk/python/sdk/zrok/setup.cfg deleted file mode 100644 index 2194d4d2..00000000 --- a/sdk/python/sdk/zrok/setup.cfg +++ /dev/null @@ -1,33 +0,0 @@ -[metadata] -name = openziti -author = OpenZiti Developers -author_email = developers@openziti.org -description = Ziti Python SDK -long_description = file: README.md -long_description_content_type = text/markdown -url = https://github.com/openziti/zrok -license = Apache 2.0 -project_urls = - Source = https://github.com/openziti/zrok - Tracker = https://github.com/openziti/zrok/issues - Discussion = https://openziti.discourse.group/ - -[options] -package_dir = - = . -packages = find: - -[options.packages.find] -where = . - -[flake8] -exclude = zrok_api, build -max-line-length = 120 - -[versioneer] -VCS = git -style = pep440-pre -versionfile_source = zrok/_version.py -versionfile_build = zrok/_version.py -tag_prefix = v -parentdir_prefix = zrok- diff --git a/sdk/python/sdk/zrok/setup.py b/sdk/python/sdk/zrok/setup.py index 801f64a3..3d0fc92b 100644 --- a/sdk/python/sdk/zrok/setup.py +++ b/sdk/python/sdk/zrok/setup.py @@ -1,9 +1,18 @@ -from setuptools import setup, find_packages # noqa: H301 -import os -import versioneer +# coding: utf-8 -# optionally upload to TestPyPi with alternative name in testing repo -NAME = os.getenv('ZROK_PY_NAME', "zrok") +""" + zrok + + zrok client access # noqa: E501 + + OpenAPI spec version: 1.0.0 + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +from setuptools import setup, find_packages # noqa: H301 + +NAME = "zrok_sdk" VERSION = "1.0.0" # To install the library, run the following # @@ -12,21 +21,19 @@ VERSION = "1.0.0" # prerequisite: setuptools # http://pypi.python.org/pypi/setuptools -REQUIRES = ["urllib3 >= 1.15", "six >= 1.10", "certifi", "python-dateutil", "openziti >= 0.8.1"] +REQUIRES = ["urllib3 >= 1.15", "six >= 1.10", "certifi", "python-dateutil"] setup( name=NAME, - cmdclass=versioneer.get_cmdclass(dict()), - version=versioneer.get_version(), + version=VERSION, description="zrok", author_email="", url="", keywords=["Swagger", "zrok"], install_requires=REQUIRES, - python_requires='>3.10.0', packages=find_packages(), include_package_data=True, long_description="""\ - Geo-scale, next-generation peer-to-peer sharing platform built on top of OpenZiti. + zrok client access # noqa: E501 """ ) diff --git a/sdk/python/sdk/zrok/test-requirements.txt b/sdk/python/sdk/zrok/test-requirements.txt new file mode 100644 index 00000000..2702246c --- /dev/null +++ b/sdk/python/sdk/zrok/test-requirements.txt @@ -0,0 +1,5 @@ +coverage>=4.0.3 +nose>=1.3.7 +pluggy>=0.3.1 +py>=1.4.31 +randomize>=0.13 diff --git a/sdk/python/sdk/zrok/test/__init__.py b/sdk/python/sdk/zrok/test/__init__.py new file mode 100644 index 00000000..576f56f8 --- /dev/null +++ b/sdk/python/sdk/zrok/test/__init__.py @@ -0,0 +1 @@ +# coding: utf-8 \ No newline at end of file diff --git a/sdk/python/sdk/zrok/test/test_access_body.py b/sdk/python/sdk/zrok/test/test_access_body.py new file mode 100644 index 00000000..7e936247 --- /dev/null +++ b/sdk/python/sdk/zrok/test/test_access_body.py @@ -0,0 +1,39 @@ +# coding: utf-8 + +""" + zrok + + zrok client access # noqa: E501 + + OpenAPI spec version: 1.0.0 + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +from __future__ import absolute_import + +import unittest + +import zrok_api +from zrok_api.models.access_body import AccessBody # noqa: E501 +from zrok_api.rest import ApiException + + +class TestAccessBody(unittest.TestCase): + """AccessBody unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testAccessBody(self): + """Test AccessBody""" + # FIXME: construct object with mandatory attributes with example values + # model = zrok_api.models.access_body.AccessBody() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/sdk/python/sdk/zrok/test/test_access_body1.py b/sdk/python/sdk/zrok/test/test_access_body1.py new file mode 100644 index 00000000..53e78285 --- /dev/null +++ b/sdk/python/sdk/zrok/test/test_access_body1.py @@ -0,0 +1,39 @@ +# coding: utf-8 + +""" + zrok + + zrok client access # noqa: E501 + + OpenAPI spec version: 1.0.0 + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +from __future__ import absolute_import + +import unittest + +import zrok_api +from zrok_api.models.access_body1 import AccessBody1 # noqa: E501 +from zrok_api.rest import ApiException + + +class TestAccessBody1(unittest.TestCase): + """AccessBody1 unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testAccessBody1(self): + """Test AccessBody1""" + # FIXME: construct object with mandatory attributes with example values + # model = zrok_api.models.access_body1.AccessBody1() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/sdk/python/sdk/zrok/test/test_account_api.py b/sdk/python/sdk/zrok/test/test_account_api.py new file mode 100644 index 00000000..2a02a258 --- /dev/null +++ b/sdk/python/sdk/zrok/test/test_account_api.py @@ -0,0 +1,81 @@ +# coding: utf-8 + +""" + zrok + + zrok client access # noqa: E501 + + OpenAPI spec version: 1.0.0 + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +from __future__ import absolute_import + +import unittest + +import zrok_api +from zrok_api.api.account_api import AccountApi # noqa: E501 +from zrok_api.rest import ApiException + + +class TestAccountApi(unittest.TestCase): + """AccountApi unit test stubs""" + + def setUp(self): + self.api = AccountApi() # noqa: E501 + + def tearDown(self): + pass + + def test_change_password(self): + """Test case for change_password + + """ + pass + + def test_invite(self): + """Test case for invite + + """ + pass + + def test_login(self): + """Test case for login + + """ + pass + + def test_regenerate_token(self): + """Test case for regenerate_token + + """ + pass + + def test_register(self): + """Test case for register + + """ + pass + + def test_reset_password(self): + """Test case for reset_password + + """ + pass + + def test_reset_password_request(self): + """Test case for reset_password_request + + """ + pass + + def test_verify(self): + """Test case for verify + + """ + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/sdk/python/sdk/zrok/test/test_account_body.py b/sdk/python/sdk/zrok/test/test_account_body.py new file mode 100644 index 00000000..56a6837a --- /dev/null +++ b/sdk/python/sdk/zrok/test/test_account_body.py @@ -0,0 +1,39 @@ +# coding: utf-8 + +""" + zrok + + zrok client access # noqa: E501 + + OpenAPI spec version: 1.0.0 + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +from __future__ import absolute_import + +import unittest + +import zrok_api +from zrok_api.models.account_body import AccountBody # noqa: E501 +from zrok_api.rest import ApiException + + +class TestAccountBody(unittest.TestCase): + """AccountBody unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testAccountBody(self): + """Test AccountBody""" + # FIXME: construct object with mandatory attributes with example values + # model = zrok_api.models.account_body.AccountBody() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/sdk/python/sdk/zrok/test/test_admin_api.py b/sdk/python/sdk/zrok/test/test_admin_api.py new file mode 100644 index 00000000..5b9a30b4 --- /dev/null +++ b/sdk/python/sdk/zrok/test/test_admin_api.py @@ -0,0 +1,117 @@ +# coding: utf-8 + +""" + zrok + + zrok client access # noqa: E501 + + OpenAPI spec version: 1.0.0 + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +from __future__ import absolute_import + +import unittest + +import zrok_api +from zrok_api.api.admin_api import AdminApi # noqa: E501 +from zrok_api.rest import ApiException + + +class TestAdminApi(unittest.TestCase): + """AdminApi unit test stubs""" + + def setUp(self): + self.api = AdminApi() # noqa: E501 + + def tearDown(self): + pass + + def test_add_organization_member(self): + """Test case for add_organization_member + + """ + pass + + def test_create_account(self): + """Test case for create_account + + """ + pass + + def test_create_frontend(self): + """Test case for create_frontend + + """ + pass + + def test_create_identity(self): + """Test case for create_identity + + """ + pass + + def test_create_organization(self): + """Test case for create_organization + + """ + pass + + def test_delete_frontend(self): + """Test case for delete_frontend + + """ + pass + + def test_delete_organization(self): + """Test case for delete_organization + + """ + pass + + def test_grants(self): + """Test case for grants + + """ + pass + + def test_invite_token_generate(self): + """Test case for invite_token_generate + + """ + pass + + def test_list_frontends(self): + """Test case for list_frontends + + """ + pass + + def test_list_organization_members(self): + """Test case for list_organization_members + + """ + pass + + def test_list_organizations(self): + """Test case for list_organizations + + """ + pass + + def test_remove_organization_member(self): + """Test case for remove_organization_member + + """ + pass + + def test_update_frontend(self): + """Test case for update_frontend + + """ + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/sdk/python/sdk/zrok/test/test_auth_user.py b/sdk/python/sdk/zrok/test/test_auth_user.py new file mode 100644 index 00000000..3e362a20 --- /dev/null +++ b/sdk/python/sdk/zrok/test/test_auth_user.py @@ -0,0 +1,39 @@ +# coding: utf-8 + +""" + zrok + + zrok client access # noqa: E501 + + OpenAPI spec version: 1.0.0 + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +from __future__ import absolute_import + +import unittest + +import zrok_api +from zrok_api.models.auth_user import AuthUser # noqa: E501 +from zrok_api.rest import ApiException + + +class TestAuthUser(unittest.TestCase): + """AuthUser unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testAuthUser(self): + """Test AuthUser""" + # FIXME: construct object with mandatory attributes with example values + # model = zrok_api.models.auth_user.AuthUser() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/sdk/python/sdk/zrok/test/test_change_password_body.py b/sdk/python/sdk/zrok/test/test_change_password_body.py new file mode 100644 index 00000000..d1ebf600 --- /dev/null +++ b/sdk/python/sdk/zrok/test/test_change_password_body.py @@ -0,0 +1,39 @@ +# coding: utf-8 + +""" + zrok + + zrok client access # noqa: E501 + + OpenAPI spec version: 1.0.0 + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +from __future__ import absolute_import + +import unittest + +import zrok_api +from zrok_api.models.change_password_body import ChangePasswordBody # noqa: E501 +from zrok_api.rest import ApiException + + +class TestChangePasswordBody(unittest.TestCase): + """ChangePasswordBody unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testChangePasswordBody(self): + """Test ChangePasswordBody""" + # FIXME: construct object with mandatory attributes with example values + # model = zrok_api.models.change_password_body.ChangePasswordBody() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/sdk/python/sdk/zrok/test/test_configuration.py b/sdk/python/sdk/zrok/test/test_configuration.py new file mode 100644 index 00000000..29ad044b --- /dev/null +++ b/sdk/python/sdk/zrok/test/test_configuration.py @@ -0,0 +1,39 @@ +# coding: utf-8 + +""" + zrok + + zrok client access # noqa: E501 + + OpenAPI spec version: 1.0.0 + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +from __future__ import absolute_import + +import unittest + +import zrok_api +from zrok_api.models.configuration import Configuration # noqa: E501 +from zrok_api.rest import ApiException + + +class TestConfiguration(unittest.TestCase): + """Configuration unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testConfiguration(self): + """Test Configuration""" + # FIXME: construct object with mandatory attributes with example values + # model = zrok_api.models.configuration.Configuration() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/sdk/python/sdk/zrok/test/test_disable_body.py b/sdk/python/sdk/zrok/test/test_disable_body.py new file mode 100644 index 00000000..ab342d59 --- /dev/null +++ b/sdk/python/sdk/zrok/test/test_disable_body.py @@ -0,0 +1,39 @@ +# coding: utf-8 + +""" + zrok + + zrok client access # noqa: E501 + + OpenAPI spec version: 1.0.0 + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +from __future__ import absolute_import + +import unittest + +import zrok_api +from zrok_api.models.disable_body import DisableBody # noqa: E501 +from zrok_api.rest import ApiException + + +class TestDisableBody(unittest.TestCase): + """DisableBody unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testDisableBody(self): + """Test DisableBody""" + # FIXME: construct object with mandatory attributes with example values + # model = zrok_api.models.disable_body.DisableBody() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/sdk/python/sdk/zrok/test/test_enable_body.py b/sdk/python/sdk/zrok/test/test_enable_body.py new file mode 100644 index 00000000..d3eec4b3 --- /dev/null +++ b/sdk/python/sdk/zrok/test/test_enable_body.py @@ -0,0 +1,39 @@ +# coding: utf-8 + +""" + zrok + + zrok client access # noqa: E501 + + OpenAPI spec version: 1.0.0 + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +from __future__ import absolute_import + +import unittest + +import zrok_api +from zrok_api.models.enable_body import EnableBody # noqa: E501 +from zrok_api.rest import ApiException + + +class TestEnableBody(unittest.TestCase): + """EnableBody unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testEnableBody(self): + """Test EnableBody""" + # FIXME: construct object with mandatory attributes with example values + # model = zrok_api.models.enable_body.EnableBody() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/sdk/python/sdk/zrok/test/test_environment.py b/sdk/python/sdk/zrok/test/test_environment.py new file mode 100644 index 00000000..3a339b29 --- /dev/null +++ b/sdk/python/sdk/zrok/test/test_environment.py @@ -0,0 +1,39 @@ +# coding: utf-8 + +""" + zrok + + zrok client access # noqa: E501 + + OpenAPI spec version: 1.0.0 + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +from __future__ import absolute_import + +import unittest + +import zrok_api +from zrok_api.models.environment import Environment # noqa: E501 +from zrok_api.rest import ApiException + + +class TestEnvironment(unittest.TestCase): + """Environment unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testEnvironment(self): + """Test Environment""" + # FIXME: construct object with mandatory attributes with example values + # model = zrok_api.models.environment.Environment() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/sdk/python/sdk/zrok/test/test_environment_and_resources.py b/sdk/python/sdk/zrok/test/test_environment_and_resources.py new file mode 100644 index 00000000..ab4f4501 --- /dev/null +++ b/sdk/python/sdk/zrok/test/test_environment_and_resources.py @@ -0,0 +1,39 @@ +# coding: utf-8 + +""" + zrok + + zrok client access # noqa: E501 + + OpenAPI spec version: 1.0.0 + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +from __future__ import absolute_import + +import unittest + +import zrok_api +from zrok_api.models.environment_and_resources import EnvironmentAndResources # noqa: E501 +from zrok_api.rest import ApiException + + +class TestEnvironmentAndResources(unittest.TestCase): + """EnvironmentAndResources unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testEnvironmentAndResources(self): + """Test EnvironmentAndResources""" + # FIXME: construct object with mandatory attributes with example values + # model = zrok_api.models.environment_and_resources.EnvironmentAndResources() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/sdk/python/sdk/zrok/test/test_environment_api.py b/sdk/python/sdk/zrok/test/test_environment_api.py new file mode 100644 index 00000000..c70480e6 --- /dev/null +++ b/sdk/python/sdk/zrok/test/test_environment_api.py @@ -0,0 +1,45 @@ +# coding: utf-8 + +""" + zrok + + zrok client access # noqa: E501 + + OpenAPI spec version: 1.0.0 + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +from __future__ import absolute_import + +import unittest + +import zrok_api +from zrok_api.api.environment_api import EnvironmentApi # noqa: E501 +from zrok_api.rest import ApiException + + +class TestEnvironmentApi(unittest.TestCase): + """EnvironmentApi unit test stubs""" + + def setUp(self): + self.api = EnvironmentApi() # noqa: E501 + + def tearDown(self): + pass + + def test_disable(self): + """Test case for disable + + """ + pass + + def test_enable(self): + """Test case for enable + + """ + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/sdk/python/sdk/zrok/test/test_environments.py b/sdk/python/sdk/zrok/test/test_environments.py new file mode 100644 index 00000000..21972eca --- /dev/null +++ b/sdk/python/sdk/zrok/test/test_environments.py @@ -0,0 +1,39 @@ +# coding: utf-8 + +""" + zrok + + zrok client access # noqa: E501 + + OpenAPI spec version: 1.0.0 + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +from __future__ import absolute_import + +import unittest + +import zrok_api +from zrok_api.models.environments import Environments # noqa: E501 +from zrok_api.rest import ApiException + + +class TestEnvironments(unittest.TestCase): + """Environments unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testEnvironments(self): + """Test Environments""" + # FIXME: construct object with mandatory attributes with example values + # model = zrok_api.models.environments.Environments() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/sdk/python/sdk/zrok/test/test_error_message.py b/sdk/python/sdk/zrok/test/test_error_message.py new file mode 100644 index 00000000..db509710 --- /dev/null +++ b/sdk/python/sdk/zrok/test/test_error_message.py @@ -0,0 +1,39 @@ +# coding: utf-8 + +""" + zrok + + zrok client access # noqa: E501 + + OpenAPI spec version: 1.0.0 + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +from __future__ import absolute_import + +import unittest + +import zrok_api +from zrok_api.models.error_message import ErrorMessage # noqa: E501 +from zrok_api.rest import ApiException + + +class TestErrorMessage(unittest.TestCase): + """ErrorMessage unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testErrorMessage(self): + """Test ErrorMessage""" + # FIXME: construct object with mandatory attributes with example values + # model = zrok_api.models.error_message.ErrorMessage() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/sdk/python/sdk/zrok/test/test_frontend.py b/sdk/python/sdk/zrok/test/test_frontend.py new file mode 100644 index 00000000..7b44e3ef --- /dev/null +++ b/sdk/python/sdk/zrok/test/test_frontend.py @@ -0,0 +1,39 @@ +# coding: utf-8 + +""" + zrok + + zrok client access # noqa: E501 + + OpenAPI spec version: 1.0.0 + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +from __future__ import absolute_import + +import unittest + +import zrok_api +from zrok_api.models.frontend import Frontend # noqa: E501 +from zrok_api.rest import ApiException + + +class TestFrontend(unittest.TestCase): + """Frontend unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testFrontend(self): + """Test Frontend""" + # FIXME: construct object with mandatory attributes with example values + # model = zrok_api.models.frontend.Frontend() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/sdk/python/sdk/zrok/test/test_frontend_body.py b/sdk/python/sdk/zrok/test/test_frontend_body.py new file mode 100644 index 00000000..8519edbc --- /dev/null +++ b/sdk/python/sdk/zrok/test/test_frontend_body.py @@ -0,0 +1,39 @@ +# coding: utf-8 + +""" + zrok + + zrok client access # noqa: E501 + + OpenAPI spec version: 1.0.0 + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +from __future__ import absolute_import + +import unittest + +import zrok_api +from zrok_api.models.frontend_body import FrontendBody # noqa: E501 +from zrok_api.rest import ApiException + + +class TestFrontendBody(unittest.TestCase): + """FrontendBody unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testFrontendBody(self): + """Test FrontendBody""" + # FIXME: construct object with mandatory attributes with example values + # model = zrok_api.models.frontend_body.FrontendBody() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/sdk/python/sdk/zrok/test/test_frontend_body1.py b/sdk/python/sdk/zrok/test/test_frontend_body1.py new file mode 100644 index 00000000..5a560aff --- /dev/null +++ b/sdk/python/sdk/zrok/test/test_frontend_body1.py @@ -0,0 +1,39 @@ +# coding: utf-8 + +""" + zrok + + zrok client access # noqa: E501 + + OpenAPI spec version: 1.0.0 + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +from __future__ import absolute_import + +import unittest + +import zrok_api +from zrok_api.models.frontend_body1 import FrontendBody1 # noqa: E501 +from zrok_api.rest import ApiException + + +class TestFrontendBody1(unittest.TestCase): + """FrontendBody1 unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testFrontendBody1(self): + """Test FrontendBody1""" + # FIXME: construct object with mandatory attributes with example values + # model = zrok_api.models.frontend_body1.FrontendBody1() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/sdk/python/sdk/zrok/test/test_frontend_body2.py b/sdk/python/sdk/zrok/test/test_frontend_body2.py new file mode 100644 index 00000000..c8b2016c --- /dev/null +++ b/sdk/python/sdk/zrok/test/test_frontend_body2.py @@ -0,0 +1,39 @@ +# coding: utf-8 + +""" + zrok + + zrok client access # noqa: E501 + + OpenAPI spec version: 1.0.0 + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +from __future__ import absolute_import + +import unittest + +import zrok_api +from zrok_api.models.frontend_body2 import FrontendBody2 # noqa: E501 +from zrok_api.rest import ApiException + + +class TestFrontendBody2(unittest.TestCase): + """FrontendBody2 unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testFrontendBody2(self): + """Test FrontendBody2""" + # FIXME: construct object with mandatory attributes with example values + # model = zrok_api.models.frontend_body2.FrontendBody2() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/sdk/python/sdk/zrok/test/test_frontends.py b/sdk/python/sdk/zrok/test/test_frontends.py new file mode 100644 index 00000000..cb96d34b --- /dev/null +++ b/sdk/python/sdk/zrok/test/test_frontends.py @@ -0,0 +1,39 @@ +# coding: utf-8 + +""" + zrok + + zrok client access # noqa: E501 + + OpenAPI spec version: 1.0.0 + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +from __future__ import absolute_import + +import unittest + +import zrok_api +from zrok_api.models.frontends import Frontends # noqa: E501 +from zrok_api.rest import ApiException + + +class TestFrontends(unittest.TestCase): + """Frontends unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testFrontends(self): + """Test Frontends""" + # FIXME: construct object with mandatory attributes with example values + # model = zrok_api.models.frontends.Frontends() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/sdk/python/sdk/zrok/test/test_grants_body.py b/sdk/python/sdk/zrok/test/test_grants_body.py new file mode 100644 index 00000000..431fd27b --- /dev/null +++ b/sdk/python/sdk/zrok/test/test_grants_body.py @@ -0,0 +1,39 @@ +# coding: utf-8 + +""" + zrok + + zrok client access # noqa: E501 + + OpenAPI spec version: 1.0.0 + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +from __future__ import absolute_import + +import unittest + +import zrok_api +from zrok_api.models.grants_body import GrantsBody # noqa: E501 +from zrok_api.rest import ApiException + + +class TestGrantsBody(unittest.TestCase): + """GrantsBody unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testGrantsBody(self): + """Test GrantsBody""" + # FIXME: construct object with mandatory attributes with example values + # model = zrok_api.models.grants_body.GrantsBody() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/sdk/python/sdk/zrok/test/test_identity_body.py b/sdk/python/sdk/zrok/test/test_identity_body.py new file mode 100644 index 00000000..b3716d87 --- /dev/null +++ b/sdk/python/sdk/zrok/test/test_identity_body.py @@ -0,0 +1,39 @@ +# coding: utf-8 + +""" + zrok + + zrok client access # noqa: E501 + + OpenAPI spec version: 1.0.0 + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +from __future__ import absolute_import + +import unittest + +import zrok_api +from zrok_api.models.identity_body import IdentityBody # noqa: E501 +from zrok_api.rest import ApiException + + +class TestIdentityBody(unittest.TestCase): + """IdentityBody unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testIdentityBody(self): + """Test IdentityBody""" + # FIXME: construct object with mandatory attributes with example values + # model = zrok_api.models.identity_body.IdentityBody() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/sdk/python/sdk/zrok/test/test_inline_response200.py b/sdk/python/sdk/zrok/test/test_inline_response200.py new file mode 100644 index 00000000..a447716d --- /dev/null +++ b/sdk/python/sdk/zrok/test/test_inline_response200.py @@ -0,0 +1,39 @@ +# coding: utf-8 + +""" + zrok + + zrok client access # noqa: E501 + + OpenAPI spec version: 1.0.0 + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +from __future__ import absolute_import + +import unittest + +import zrok_api +from zrok_api.models.inline_response200 import InlineResponse200 # noqa: E501 +from zrok_api.rest import ApiException + + +class TestInlineResponse200(unittest.TestCase): + """InlineResponse200 unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testInlineResponse200(self): + """Test InlineResponse200""" + # FIXME: construct object with mandatory attributes with example values + # model = zrok_api.models.inline_response200.InlineResponse200() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/sdk/python/sdk/zrok/test/test_inline_response2001.py b/sdk/python/sdk/zrok/test/test_inline_response2001.py new file mode 100644 index 00000000..73fc1356 --- /dev/null +++ b/sdk/python/sdk/zrok/test/test_inline_response2001.py @@ -0,0 +1,39 @@ +# coding: utf-8 + +""" + zrok + + zrok client access # noqa: E501 + + OpenAPI spec version: 1.0.0 + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +from __future__ import absolute_import + +import unittest + +import zrok_api +from zrok_api.models.inline_response2001 import InlineResponse2001 # noqa: E501 +from zrok_api.rest import ApiException + + +class TestInlineResponse2001(unittest.TestCase): + """InlineResponse2001 unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testInlineResponse2001(self): + """Test InlineResponse2001""" + # FIXME: construct object with mandatory attributes with example values + # model = zrok_api.models.inline_response2001.InlineResponse2001() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/sdk/python/sdk/zrok/test/test_inline_response2002.py b/sdk/python/sdk/zrok/test/test_inline_response2002.py new file mode 100644 index 00000000..0230ae38 --- /dev/null +++ b/sdk/python/sdk/zrok/test/test_inline_response2002.py @@ -0,0 +1,39 @@ +# coding: utf-8 + +""" + zrok + + zrok client access # noqa: E501 + + OpenAPI spec version: 1.0.0 + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +from __future__ import absolute_import + +import unittest + +import zrok_api +from zrok_api.models.inline_response2002 import InlineResponse2002 # noqa: E501 +from zrok_api.rest import ApiException + + +class TestInlineResponse2002(unittest.TestCase): + """InlineResponse2002 unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testInlineResponse2002(self): + """Test InlineResponse2002""" + # FIXME: construct object with mandatory attributes with example values + # model = zrok_api.models.inline_response2002.InlineResponse2002() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/sdk/python/sdk/zrok/test/test_inline_response2003.py b/sdk/python/sdk/zrok/test/test_inline_response2003.py new file mode 100644 index 00000000..dc30845e --- /dev/null +++ b/sdk/python/sdk/zrok/test/test_inline_response2003.py @@ -0,0 +1,39 @@ +# coding: utf-8 + +""" + zrok + + zrok client access # noqa: E501 + + OpenAPI spec version: 1.0.0 + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +from __future__ import absolute_import + +import unittest + +import zrok_api +from zrok_api.models.inline_response2003 import InlineResponse2003 # noqa: E501 +from zrok_api.rest import ApiException + + +class TestInlineResponse2003(unittest.TestCase): + """InlineResponse2003 unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testInlineResponse2003(self): + """Test InlineResponse2003""" + # FIXME: construct object with mandatory attributes with example values + # model = zrok_api.models.inline_response2003.InlineResponse2003() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/sdk/python/sdk/zrok/test/test_inline_response2003_members.py b/sdk/python/sdk/zrok/test/test_inline_response2003_members.py new file mode 100644 index 00000000..1fd04fa1 --- /dev/null +++ b/sdk/python/sdk/zrok/test/test_inline_response2003_members.py @@ -0,0 +1,39 @@ +# coding: utf-8 + +""" + zrok + + zrok client access # noqa: E501 + + OpenAPI spec version: 1.0.0 + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +from __future__ import absolute_import + +import unittest + +import zrok_api +from zrok_api.models.inline_response2003_members import InlineResponse2003Members # noqa: E501 +from zrok_api.rest import ApiException + + +class TestInlineResponse2003Members(unittest.TestCase): + """InlineResponse2003Members unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testInlineResponse2003Members(self): + """Test InlineResponse2003Members""" + # FIXME: construct object with mandatory attributes with example values + # model = zrok_api.models.inline_response2003_members.InlineResponse2003Members() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/sdk/python/sdk/zrok/test/test_inline_response2004.py b/sdk/python/sdk/zrok/test/test_inline_response2004.py new file mode 100644 index 00000000..264bc094 --- /dev/null +++ b/sdk/python/sdk/zrok/test/test_inline_response2004.py @@ -0,0 +1,39 @@ +# coding: utf-8 + +""" + zrok + + zrok client access # noqa: E501 + + OpenAPI spec version: 1.0.0 + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +from __future__ import absolute_import + +import unittest + +import zrok_api +from zrok_api.models.inline_response2004 import InlineResponse2004 # noqa: E501 +from zrok_api.rest import ApiException + + +class TestInlineResponse2004(unittest.TestCase): + """InlineResponse2004 unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testInlineResponse2004(self): + """Test InlineResponse2004""" + # FIXME: construct object with mandatory attributes with example values + # model = zrok_api.models.inline_response2004.InlineResponse2004() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/sdk/python/sdk/zrok/test/test_inline_response2004_members.py b/sdk/python/sdk/zrok/test/test_inline_response2004_members.py new file mode 100644 index 00000000..7376a0b9 --- /dev/null +++ b/sdk/python/sdk/zrok/test/test_inline_response2004_members.py @@ -0,0 +1,39 @@ +# coding: utf-8 + +""" + zrok + + zrok client access # noqa: E501 + + OpenAPI spec version: 1.0.0 + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +from __future__ import absolute_import + +import unittest + +import zrok_api +from zrok_api.models.inline_response2004_members import InlineResponse2004Members # noqa: E501 +from zrok_api.rest import ApiException + + +class TestInlineResponse2004Members(unittest.TestCase): + """InlineResponse2004Members unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testInlineResponse2004Members(self): + """Test InlineResponse2004Members""" + # FIXME: construct object with mandatory attributes with example values + # model = zrok_api.models.inline_response2004_members.InlineResponse2004Members() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/sdk/python/sdk/zrok/test/test_inline_response2004_organizations.py b/sdk/python/sdk/zrok/test/test_inline_response2004_organizations.py new file mode 100644 index 00000000..598471e6 --- /dev/null +++ b/sdk/python/sdk/zrok/test/test_inline_response2004_organizations.py @@ -0,0 +1,39 @@ +# coding: utf-8 + +""" + zrok + + zrok client access # noqa: E501 + + OpenAPI spec version: 1.0.0 + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +from __future__ import absolute_import + +import unittest + +import zrok_api +from zrok_api.models.inline_response2004_organizations import InlineResponse2004Organizations # noqa: E501 +from zrok_api.rest import ApiException + + +class TestInlineResponse2004Organizations(unittest.TestCase): + """InlineResponse2004Organizations unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testInlineResponse2004Organizations(self): + """Test InlineResponse2004Organizations""" + # FIXME: construct object with mandatory attributes with example values + # model = zrok_api.models.inline_response2004_organizations.InlineResponse2004Organizations() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/sdk/python/sdk/zrok/test/test_inline_response2005.py b/sdk/python/sdk/zrok/test/test_inline_response2005.py new file mode 100644 index 00000000..cf3b41ac --- /dev/null +++ b/sdk/python/sdk/zrok/test/test_inline_response2005.py @@ -0,0 +1,39 @@ +# coding: utf-8 + +""" + zrok + + zrok client access # noqa: E501 + + OpenAPI spec version: 1.0.0 + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +from __future__ import absolute_import + +import unittest + +import zrok_api +from zrok_api.models.inline_response2005 import InlineResponse2005 # noqa: E501 +from zrok_api.rest import ApiException + + +class TestInlineResponse2005(unittest.TestCase): + """InlineResponse2005 unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testInlineResponse2005(self): + """Test InlineResponse2005""" + # FIXME: construct object with mandatory attributes with example values + # model = zrok_api.models.inline_response2005.InlineResponse2005() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/sdk/python/sdk/zrok/test/test_inline_response2005_memberships.py b/sdk/python/sdk/zrok/test/test_inline_response2005_memberships.py new file mode 100644 index 00000000..230a6ac2 --- /dev/null +++ b/sdk/python/sdk/zrok/test/test_inline_response2005_memberships.py @@ -0,0 +1,39 @@ +# coding: utf-8 + +""" + zrok + + zrok client access # noqa: E501 + + OpenAPI spec version: 1.0.0 + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +from __future__ import absolute_import + +import unittest + +import zrok_api +from zrok_api.models.inline_response2005_memberships import InlineResponse2005Memberships # noqa: E501 +from zrok_api.rest import ApiException + + +class TestInlineResponse2005Memberships(unittest.TestCase): + """InlineResponse2005Memberships unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testInlineResponse2005Memberships(self): + """Test InlineResponse2005Memberships""" + # FIXME: construct object with mandatory attributes with example values + # model = zrok_api.models.inline_response2005_memberships.InlineResponse2005Memberships() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/sdk/python/sdk/zrok/test/test_inline_response2005_organizations.py b/sdk/python/sdk/zrok/test/test_inline_response2005_organizations.py new file mode 100644 index 00000000..6c3e995e --- /dev/null +++ b/sdk/python/sdk/zrok/test/test_inline_response2005_organizations.py @@ -0,0 +1,39 @@ +# coding: utf-8 + +""" + zrok + + zrok client access # noqa: E501 + + OpenAPI spec version: 1.0.0 + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +from __future__ import absolute_import + +import unittest + +import zrok_api +from zrok_api.models.inline_response2005_organizations import InlineResponse2005Organizations # noqa: E501 +from zrok_api.rest import ApiException + + +class TestInlineResponse2005Organizations(unittest.TestCase): + """InlineResponse2005Organizations unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testInlineResponse2005Organizations(self): + """Test InlineResponse2005Organizations""" + # FIXME: construct object with mandatory attributes with example values + # model = zrok_api.models.inline_response2005_organizations.InlineResponse2005Organizations() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/sdk/python/sdk/zrok/test/test_inline_response2006.py b/sdk/python/sdk/zrok/test/test_inline_response2006.py new file mode 100644 index 00000000..fd19aa10 --- /dev/null +++ b/sdk/python/sdk/zrok/test/test_inline_response2006.py @@ -0,0 +1,39 @@ +# coding: utf-8 + +""" + zrok + + zrok client access # noqa: E501 + + OpenAPI spec version: 1.0.0 + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +from __future__ import absolute_import + +import unittest + +import zrok_api +from zrok_api.models.inline_response2006 import InlineResponse2006 # noqa: E501 +from zrok_api.rest import ApiException + + +class TestInlineResponse2006(unittest.TestCase): + """InlineResponse2006 unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testInlineResponse2006(self): + """Test InlineResponse2006""" + # FIXME: construct object with mandatory attributes with example values + # model = zrok_api.models.inline_response2006.InlineResponse2006() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/sdk/python/sdk/zrok/test/test_inline_response2006_memberships.py b/sdk/python/sdk/zrok/test/test_inline_response2006_memberships.py new file mode 100644 index 00000000..1a779c3e --- /dev/null +++ b/sdk/python/sdk/zrok/test/test_inline_response2006_memberships.py @@ -0,0 +1,39 @@ +# coding: utf-8 + +""" + zrok + + zrok client access # noqa: E501 + + OpenAPI spec version: 1.0.0 + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +from __future__ import absolute_import + +import unittest + +import zrok_api +from zrok_api.models.inline_response2006_memberships import InlineResponse2006Memberships # noqa: E501 +from zrok_api.rest import ApiException + + +class TestInlineResponse2006Memberships(unittest.TestCase): + """InlineResponse2006Memberships unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testInlineResponse2006Memberships(self): + """Test InlineResponse2006Memberships""" + # FIXME: construct object with mandatory attributes with example values + # model = zrok_api.models.inline_response2006_memberships.InlineResponse2006Memberships() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/sdk/python/sdk/zrok/test/test_inline_response2007.py b/sdk/python/sdk/zrok/test/test_inline_response2007.py new file mode 100644 index 00000000..52ae67ba --- /dev/null +++ b/sdk/python/sdk/zrok/test/test_inline_response2007.py @@ -0,0 +1,39 @@ +# coding: utf-8 + +""" + zrok + + zrok client access # noqa: E501 + + OpenAPI spec version: 1.0.0 + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +from __future__ import absolute_import + +import unittest + +import zrok_api +from zrok_api.models.inline_response2007 import InlineResponse2007 # noqa: E501 +from zrok_api.rest import ApiException + + +class TestInlineResponse2007(unittest.TestCase): + """InlineResponse2007 unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testInlineResponse2007(self): + """Test InlineResponse2007""" + # FIXME: construct object with mandatory attributes with example values + # model = zrok_api.models.inline_response2007.InlineResponse2007() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/sdk/python/sdk/zrok/test/test_inline_response201.py b/sdk/python/sdk/zrok/test/test_inline_response201.py new file mode 100644 index 00000000..3c719ebd --- /dev/null +++ b/sdk/python/sdk/zrok/test/test_inline_response201.py @@ -0,0 +1,39 @@ +# coding: utf-8 + +""" + zrok + + zrok client access # noqa: E501 + + OpenAPI spec version: 1.0.0 + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +from __future__ import absolute_import + +import unittest + +import zrok_api +from zrok_api.models.inline_response201 import InlineResponse201 # noqa: E501 +from zrok_api.rest import ApiException + + +class TestInlineResponse201(unittest.TestCase): + """InlineResponse201 unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testInlineResponse201(self): + """Test InlineResponse201""" + # FIXME: construct object with mandatory attributes with example values + # model = zrok_api.models.inline_response201.InlineResponse201() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/sdk/python/sdk/zrok/test/test_inline_response2011.py b/sdk/python/sdk/zrok/test/test_inline_response2011.py new file mode 100644 index 00000000..3594d34c --- /dev/null +++ b/sdk/python/sdk/zrok/test/test_inline_response2011.py @@ -0,0 +1,39 @@ +# coding: utf-8 + +""" + zrok + + zrok client access # noqa: E501 + + OpenAPI spec version: 1.0.0 + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +from __future__ import absolute_import + +import unittest + +import zrok_api +from zrok_api.models.inline_response2011 import InlineResponse2011 # noqa: E501 +from zrok_api.rest import ApiException + + +class TestInlineResponse2011(unittest.TestCase): + """InlineResponse2011 unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testInlineResponse2011(self): + """Test InlineResponse2011""" + # FIXME: construct object with mandatory attributes with example values + # model = zrok_api.models.inline_response2011.InlineResponse2011() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/sdk/python/sdk/zrok/test/test_inline_response2012.py b/sdk/python/sdk/zrok/test/test_inline_response2012.py new file mode 100644 index 00000000..cc69a570 --- /dev/null +++ b/sdk/python/sdk/zrok/test/test_inline_response2012.py @@ -0,0 +1,39 @@ +# coding: utf-8 + +""" + zrok + + zrok client access # noqa: E501 + + OpenAPI spec version: 1.0.0 + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +from __future__ import absolute_import + +import unittest + +import zrok_api +from zrok_api.models.inline_response2012 import InlineResponse2012 # noqa: E501 +from zrok_api.rest import ApiException + + +class TestInlineResponse2012(unittest.TestCase): + """InlineResponse2012 unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testInlineResponse2012(self): + """Test InlineResponse2012""" + # FIXME: construct object with mandatory attributes with example values + # model = zrok_api.models.inline_response2012.InlineResponse2012() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/sdk/python/sdk/zrok/test/test_inline_response2013.py b/sdk/python/sdk/zrok/test/test_inline_response2013.py new file mode 100644 index 00000000..3b028a6c --- /dev/null +++ b/sdk/python/sdk/zrok/test/test_inline_response2013.py @@ -0,0 +1,39 @@ +# coding: utf-8 + +""" + zrok + + zrok client access # noqa: E501 + + OpenAPI spec version: 1.0.0 + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +from __future__ import absolute_import + +import unittest + +import zrok_api +from zrok_api.models.inline_response2013 import InlineResponse2013 # noqa: E501 +from zrok_api.rest import ApiException + + +class TestInlineResponse2013(unittest.TestCase): + """InlineResponse2013 unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testInlineResponse2013(self): + """Test InlineResponse2013""" + # FIXME: construct object with mandatory attributes with example values + # model = zrok_api.models.inline_response2013.InlineResponse2013() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/sdk/python/sdk/zrok/test/test_inline_response400.py b/sdk/python/sdk/zrok/test/test_inline_response400.py new file mode 100644 index 00000000..13e6f8c6 --- /dev/null +++ b/sdk/python/sdk/zrok/test/test_inline_response400.py @@ -0,0 +1,39 @@ +# coding: utf-8 + +""" + zrok + + zrok client access # noqa: E501 + + OpenAPI spec version: 1.0.0 + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +from __future__ import absolute_import + +import unittest + +import zrok_api +from zrok_api.models.inline_response400 import InlineResponse400 # noqa: E501 +from zrok_api.rest import ApiException + + +class TestInlineResponse400(unittest.TestCase): + """InlineResponse400 unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testInlineResponse400(self): + """Test InlineResponse400""" + # FIXME: construct object with mandatory attributes with example values + # model = zrok_api.models.inline_response400.InlineResponse400() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/sdk/python/sdk/zrok/test/test_invite_body.py b/sdk/python/sdk/zrok/test/test_invite_body.py new file mode 100644 index 00000000..8228bdc0 --- /dev/null +++ b/sdk/python/sdk/zrok/test/test_invite_body.py @@ -0,0 +1,39 @@ +# coding: utf-8 + +""" + zrok + + zrok client access # noqa: E501 + + OpenAPI spec version: 1.0.0 + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +from __future__ import absolute_import + +import unittest + +import zrok_api +from zrok_api.models.invite_body import InviteBody # noqa: E501 +from zrok_api.rest import ApiException + + +class TestInviteBody(unittest.TestCase): + """InviteBody unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testInviteBody(self): + """Test InviteBody""" + # FIXME: construct object with mandatory attributes with example values + # model = zrok_api.models.invite_body.InviteBody() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/sdk/python/sdk/zrok/test/test_login_body.py b/sdk/python/sdk/zrok/test/test_login_body.py new file mode 100644 index 00000000..3dd5df4d --- /dev/null +++ b/sdk/python/sdk/zrok/test/test_login_body.py @@ -0,0 +1,39 @@ +# coding: utf-8 + +""" + zrok + + zrok client access # noqa: E501 + + OpenAPI spec version: 1.0.0 + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +from __future__ import absolute_import + +import unittest + +import zrok_api +from zrok_api.models.login_body import LoginBody # noqa: E501 +from zrok_api.rest import ApiException + + +class TestLoginBody(unittest.TestCase): + """LoginBody unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testLoginBody(self): + """Test LoginBody""" + # FIXME: construct object with mandatory attributes with example values + # model = zrok_api.models.login_body.LoginBody() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/sdk/python/sdk/zrok/test/test_metadata_api.py b/sdk/python/sdk/zrok/test/test_metadata_api.py new file mode 100644 index 00000000..4d75a9a4 --- /dev/null +++ b/sdk/python/sdk/zrok/test/test_metadata_api.py @@ -0,0 +1,117 @@ +# coding: utf-8 + +""" + zrok + + zrok client access # noqa: E501 + + OpenAPI spec version: 1.0.0 + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +from __future__ import absolute_import + +import unittest + +import zrok_api +from zrok_api.api.metadata_api import MetadataApi # noqa: E501 +from zrok_api.rest import ApiException + + +class TestMetadataApi(unittest.TestCase): + """MetadataApi unit test stubs""" + + def setUp(self): + self.api = MetadataApi() # noqa: E501 + + def tearDown(self): + pass + + def test_configuration(self): + """Test case for configuration + + """ + pass + + def test_get_account_detail(self): + """Test case for get_account_detail + + """ + pass + + def test_get_account_metrics(self): + """Test case for get_account_metrics + + """ + pass + + def test_get_environment_detail(self): + """Test case for get_environment_detail + + """ + pass + + def test_get_environment_metrics(self): + """Test case for get_environment_metrics + + """ + pass + + def test_get_frontend_detail(self): + """Test case for get_frontend_detail + + """ + pass + + def test_get_share_detail(self): + """Test case for get_share_detail + + """ + pass + + def test_get_share_metrics(self): + """Test case for get_share_metrics + + """ + pass + + def test_get_sparklines(self): + """Test case for get_sparklines + + """ + pass + + def test_list_memberships(self): + """Test case for list_memberships + + """ + pass + + def test_list_org_members(self): + """Test case for list_org_members + + """ + pass + + def test_org_account_overview(self): + """Test case for org_account_overview + + """ + pass + + def test_overview(self): + """Test case for overview + + """ + pass + + def test_version(self): + """Test case for version + + """ + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/sdk/python/sdk/zrok/test/test_metrics.py b/sdk/python/sdk/zrok/test/test_metrics.py new file mode 100644 index 00000000..71ae9c2a --- /dev/null +++ b/sdk/python/sdk/zrok/test/test_metrics.py @@ -0,0 +1,39 @@ +# coding: utf-8 + +""" + zrok + + zrok client access # noqa: E501 + + OpenAPI spec version: 1.0.0 + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +from __future__ import absolute_import + +import unittest + +import zrok_api +from zrok_api.models.metrics import Metrics # noqa: E501 +from zrok_api.rest import ApiException + + +class TestMetrics(unittest.TestCase): + """Metrics unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testMetrics(self): + """Test Metrics""" + # FIXME: construct object with mandatory attributes with example values + # model = zrok_api.models.metrics.Metrics() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/sdk/python/sdk/zrok/test/test_metrics_sample.py b/sdk/python/sdk/zrok/test/test_metrics_sample.py new file mode 100644 index 00000000..19e956f0 --- /dev/null +++ b/sdk/python/sdk/zrok/test/test_metrics_sample.py @@ -0,0 +1,39 @@ +# coding: utf-8 + +""" + zrok + + zrok client access # noqa: E501 + + OpenAPI spec version: 1.0.0 + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +from __future__ import absolute_import + +import unittest + +import zrok_api +from zrok_api.models.metrics_sample import MetricsSample # noqa: E501 +from zrok_api.rest import ApiException + + +class TestMetricsSample(unittest.TestCase): + """MetricsSample unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testMetricsSample(self): + """Test MetricsSample""" + # FIXME: construct object with mandatory attributes with example values + # model = zrok_api.models.metrics_sample.MetricsSample() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/sdk/python/sdk/zrok/test/test_organization_add_body.py b/sdk/python/sdk/zrok/test/test_organization_add_body.py new file mode 100644 index 00000000..13274497 --- /dev/null +++ b/sdk/python/sdk/zrok/test/test_organization_add_body.py @@ -0,0 +1,39 @@ +# coding: utf-8 + +""" + zrok + + zrok client access # noqa: E501 + + OpenAPI spec version: 1.0.0 + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +from __future__ import absolute_import + +import unittest + +import zrok_api +from zrok_api.models.organization_add_body import OrganizationAddBody # noqa: E501 +from zrok_api.rest import ApiException + + +class TestOrganizationAddBody(unittest.TestCase): + """OrganizationAddBody unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testOrganizationAddBody(self): + """Test OrganizationAddBody""" + # FIXME: construct object with mandatory attributes with example values + # model = zrok_api.models.organization_add_body.OrganizationAddBody() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/sdk/python/sdk/zrok/test/test_organization_body.py b/sdk/python/sdk/zrok/test/test_organization_body.py new file mode 100644 index 00000000..05e57436 --- /dev/null +++ b/sdk/python/sdk/zrok/test/test_organization_body.py @@ -0,0 +1,39 @@ +# coding: utf-8 + +""" + zrok + + zrok client access # noqa: E501 + + OpenAPI spec version: 1.0.0 + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +from __future__ import absolute_import + +import unittest + +import zrok_api +from zrok_api.models.organization_body import OrganizationBody # noqa: E501 +from zrok_api.rest import ApiException + + +class TestOrganizationBody(unittest.TestCase): + """OrganizationBody unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testOrganizationBody(self): + """Test OrganizationBody""" + # FIXME: construct object with mandatory attributes with example values + # model = zrok_api.models.organization_body.OrganizationBody() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/sdk/python/sdk/zrok/test/test_organization_body1.py b/sdk/python/sdk/zrok/test/test_organization_body1.py new file mode 100644 index 00000000..930378cb --- /dev/null +++ b/sdk/python/sdk/zrok/test/test_organization_body1.py @@ -0,0 +1,39 @@ +# coding: utf-8 + +""" + zrok + + zrok client access # noqa: E501 + + OpenAPI spec version: 1.0.0 + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +from __future__ import absolute_import + +import unittest + +import zrok_api +from zrok_api.models.organization_body1 import OrganizationBody1 # noqa: E501 +from zrok_api.rest import ApiException + + +class TestOrganizationBody1(unittest.TestCase): + """OrganizationBody1 unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testOrganizationBody1(self): + """Test OrganizationBody1""" + # FIXME: construct object with mandatory attributes with example values + # model = zrok_api.models.organization_body1.OrganizationBody1() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/sdk/python/sdk/zrok/test/test_organization_list_body.py b/sdk/python/sdk/zrok/test/test_organization_list_body.py new file mode 100644 index 00000000..b43c57e4 --- /dev/null +++ b/sdk/python/sdk/zrok/test/test_organization_list_body.py @@ -0,0 +1,39 @@ +# coding: utf-8 + +""" + zrok + + zrok client access # noqa: E501 + + OpenAPI spec version: 1.0.0 + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +from __future__ import absolute_import + +import unittest + +import zrok_api +from zrok_api.models.organization_list_body import OrganizationListBody # noqa: E501 +from zrok_api.rest import ApiException + + +class TestOrganizationListBody(unittest.TestCase): + """OrganizationListBody unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testOrganizationListBody(self): + """Test OrganizationListBody""" + # FIXME: construct object with mandatory attributes with example values + # model = zrok_api.models.organization_list_body.OrganizationListBody() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/sdk/python/sdk/zrok/test/test_organization_remove_body.py b/sdk/python/sdk/zrok/test/test_organization_remove_body.py new file mode 100644 index 00000000..07128ed8 --- /dev/null +++ b/sdk/python/sdk/zrok/test/test_organization_remove_body.py @@ -0,0 +1,39 @@ +# coding: utf-8 + +""" + zrok + + zrok client access # noqa: E501 + + OpenAPI spec version: 1.0.0 + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +from __future__ import absolute_import + +import unittest + +import zrok_api +from zrok_api.models.organization_remove_body import OrganizationRemoveBody # noqa: E501 +from zrok_api.rest import ApiException + + +class TestOrganizationRemoveBody(unittest.TestCase): + """OrganizationRemoveBody unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testOrganizationRemoveBody(self): + """Test OrganizationRemoveBody""" + # FIXME: construct object with mandatory attributes with example values + # model = zrok_api.models.organization_remove_body.OrganizationRemoveBody() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/sdk/python/sdk/zrok/test/test_overview.py b/sdk/python/sdk/zrok/test/test_overview.py new file mode 100644 index 00000000..8a92ad55 --- /dev/null +++ b/sdk/python/sdk/zrok/test/test_overview.py @@ -0,0 +1,39 @@ +# coding: utf-8 + +""" + zrok + + zrok client access # noqa: E501 + + OpenAPI spec version: 1.0.0 + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +from __future__ import absolute_import + +import unittest + +import zrok_api +from zrok_api.models.overview import Overview # noqa: E501 +from zrok_api.rest import ApiException + + +class TestOverview(unittest.TestCase): + """Overview unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testOverview(self): + """Test Overview""" + # FIXME: construct object with mandatory attributes with example values + # model = zrok_api.models.overview.Overview() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/sdk/python/sdk/zrok/test/test_principal.py b/sdk/python/sdk/zrok/test/test_principal.py new file mode 100644 index 00000000..f38cb221 --- /dev/null +++ b/sdk/python/sdk/zrok/test/test_principal.py @@ -0,0 +1,39 @@ +# coding: utf-8 + +""" + zrok + + zrok client access # noqa: E501 + + OpenAPI spec version: 1.0.0 + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +from __future__ import absolute_import + +import unittest + +import zrok_api +from zrok_api.models.principal import Principal # noqa: E501 +from zrok_api.rest import ApiException + + +class TestPrincipal(unittest.TestCase): + """Principal unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testPrincipal(self): + """Test Principal""" + # FIXME: construct object with mandatory attributes with example values + # model = zrok_api.models.principal.Principal() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/sdk/python/sdk/zrok/test/test_regenerate_account_token_body.py b/sdk/python/sdk/zrok/test/test_regenerate_account_token_body.py new file mode 100644 index 00000000..405b07c4 --- /dev/null +++ b/sdk/python/sdk/zrok/test/test_regenerate_account_token_body.py @@ -0,0 +1,39 @@ +# coding: utf-8 + +""" + zrok + + zrok client access # noqa: E501 + + OpenAPI spec version: 1.0.0 + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +from __future__ import absolute_import + +import unittest + +import zrok_api +from zrok_api.models.regenerate_account_token_body import RegenerateAccountTokenBody # noqa: E501 +from zrok_api.rest import ApiException + + +class TestRegenerateAccountTokenBody(unittest.TestCase): + """RegenerateAccountTokenBody unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testRegenerateAccountTokenBody(self): + """Test RegenerateAccountTokenBody""" + # FIXME: construct object with mandatory attributes with example values + # model = zrok_api.models.regenerate_account_token_body.RegenerateAccountTokenBody() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/sdk/python/sdk/zrok/test/test_regenerate_token_body.py b/sdk/python/sdk/zrok/test/test_regenerate_token_body.py new file mode 100644 index 00000000..adfd771e --- /dev/null +++ b/sdk/python/sdk/zrok/test/test_regenerate_token_body.py @@ -0,0 +1,39 @@ +# coding: utf-8 + +""" + zrok + + zrok client access # noqa: E501 + + OpenAPI spec version: 1.0.0 + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +from __future__ import absolute_import + +import unittest + +import zrok_api +from zrok_api.models.regenerate_token_body import RegenerateTokenBody # noqa: E501 +from zrok_api.rest import ApiException + + +class TestRegenerateTokenBody(unittest.TestCase): + """RegenerateTokenBody unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testRegenerateTokenBody(self): + """Test RegenerateTokenBody""" + # FIXME: construct object with mandatory attributes with example values + # model = zrok_api.models.regenerate_token_body.RegenerateTokenBody() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/sdk/python/sdk/zrok/test/test_register_body.py b/sdk/python/sdk/zrok/test/test_register_body.py new file mode 100644 index 00000000..fe72be1e --- /dev/null +++ b/sdk/python/sdk/zrok/test/test_register_body.py @@ -0,0 +1,39 @@ +# coding: utf-8 + +""" + zrok + + zrok client access # noqa: E501 + + OpenAPI spec version: 1.0.0 + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +from __future__ import absolute_import + +import unittest + +import zrok_api +from zrok_api.models.register_body import RegisterBody # noqa: E501 +from zrok_api.rest import ApiException + + +class TestRegisterBody(unittest.TestCase): + """RegisterBody unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testRegisterBody(self): + """Test RegisterBody""" + # FIXME: construct object with mandatory attributes with example values + # model = zrok_api.models.register_body.RegisterBody() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/sdk/python/sdk/zrok/test/test_reset_password_body.py b/sdk/python/sdk/zrok/test/test_reset_password_body.py new file mode 100644 index 00000000..f4c4561d --- /dev/null +++ b/sdk/python/sdk/zrok/test/test_reset_password_body.py @@ -0,0 +1,39 @@ +# coding: utf-8 + +""" + zrok + + zrok client access # noqa: E501 + + OpenAPI spec version: 1.0.0 + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +from __future__ import absolute_import + +import unittest + +import zrok_api +from zrok_api.models.reset_password_body import ResetPasswordBody # noqa: E501 +from zrok_api.rest import ApiException + + +class TestResetPasswordBody(unittest.TestCase): + """ResetPasswordBody unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testResetPasswordBody(self): + """Test ResetPasswordBody""" + # FIXME: construct object with mandatory attributes with example values + # model = zrok_api.models.reset_password_body.ResetPasswordBody() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/sdk/python/sdk/zrok/test/test_reset_password_request_body.py b/sdk/python/sdk/zrok/test/test_reset_password_request_body.py new file mode 100644 index 00000000..d9a3360b --- /dev/null +++ b/sdk/python/sdk/zrok/test/test_reset_password_request_body.py @@ -0,0 +1,39 @@ +# coding: utf-8 + +""" + zrok + + zrok client access # noqa: E501 + + OpenAPI spec version: 1.0.0 + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +from __future__ import absolute_import + +import unittest + +import zrok_api +from zrok_api.models.reset_password_request_body import ResetPasswordRequestBody # noqa: E501 +from zrok_api.rest import ApiException + + +class TestResetPasswordRequestBody(unittest.TestCase): + """ResetPasswordRequestBody unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testResetPasswordRequestBody(self): + """Test ResetPasswordRequestBody""" + # FIXME: construct object with mandatory attributes with example values + # model = zrok_api.models.reset_password_request_body.ResetPasswordRequestBody() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/sdk/python/sdk/zrok/test/test_share.py b/sdk/python/sdk/zrok/test/test_share.py new file mode 100644 index 00000000..80a16c16 --- /dev/null +++ b/sdk/python/sdk/zrok/test/test_share.py @@ -0,0 +1,39 @@ +# coding: utf-8 + +""" + zrok + + zrok client access # noqa: E501 + + OpenAPI spec version: 1.0.0 + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +from __future__ import absolute_import + +import unittest + +import zrok_api +from zrok_api.models.share import Share # noqa: E501 +from zrok_api.rest import ApiException + + +class TestShare(unittest.TestCase): + """Share unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testShare(self): + """Test Share""" + # FIXME: construct object with mandatory attributes with example values + # model = zrok_api.models.share.Share() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/sdk/python/sdk/zrok/test/test_share_api.py b/sdk/python/sdk/zrok/test/test_share_api.py new file mode 100644 index 00000000..e799f3c8 --- /dev/null +++ b/sdk/python/sdk/zrok/test/test_share_api.py @@ -0,0 +1,63 @@ +# coding: utf-8 + +""" + zrok + + zrok client access # noqa: E501 + + OpenAPI spec version: 1.0.0 + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +from __future__ import absolute_import + +import unittest + +import zrok_api +from zrok_api.api.share_api import ShareApi # noqa: E501 +from zrok_api.rest import ApiException + + +class TestShareApi(unittest.TestCase): + """ShareApi unit test stubs""" + + def setUp(self): + self.api = ShareApi() # noqa: E501 + + def tearDown(self): + pass + + def test_access(self): + """Test case for access + + """ + pass + + def test_share(self): + """Test case for share + + """ + pass + + def test_unaccess(self): + """Test case for unaccess + + """ + pass + + def test_unshare(self): + """Test case for unshare + + """ + pass + + def test_update_share(self): + """Test case for update_share + + """ + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/sdk/python/sdk/zrok/test/test_share_body.py b/sdk/python/sdk/zrok/test/test_share_body.py new file mode 100644 index 00000000..fcbdb3a2 --- /dev/null +++ b/sdk/python/sdk/zrok/test/test_share_body.py @@ -0,0 +1,39 @@ +# coding: utf-8 + +""" + zrok + + zrok client access # noqa: E501 + + OpenAPI spec version: 1.0.0 + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +from __future__ import absolute_import + +import unittest + +import zrok_api +from zrok_api.models.share_body import ShareBody # noqa: E501 +from zrok_api.rest import ApiException + + +class TestShareBody(unittest.TestCase): + """ShareBody unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testShareBody(self): + """Test ShareBody""" + # FIXME: construct object with mandatory attributes with example values + # model = zrok_api.models.share_body.ShareBody() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/sdk/python/sdk/zrok/test/test_share_request.py b/sdk/python/sdk/zrok/test/test_share_request.py new file mode 100644 index 00000000..79abd431 --- /dev/null +++ b/sdk/python/sdk/zrok/test/test_share_request.py @@ -0,0 +1,39 @@ +# coding: utf-8 + +""" + zrok + + zrok client access # noqa: E501 + + OpenAPI spec version: 1.0.0 + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +from __future__ import absolute_import + +import unittest + +import zrok_api +from zrok_api.models.share_request import ShareRequest # noqa: E501 +from zrok_api.rest import ApiException + + +class TestShareRequest(unittest.TestCase): + """ShareRequest unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testShareRequest(self): + """Test ShareRequest""" + # FIXME: construct object with mandatory attributes with example values + # model = zrok_api.models.share_request.ShareRequest() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/sdk/python/sdk/zrok/test/test_share_response.py b/sdk/python/sdk/zrok/test/test_share_response.py new file mode 100644 index 00000000..e2ef3f94 --- /dev/null +++ b/sdk/python/sdk/zrok/test/test_share_response.py @@ -0,0 +1,39 @@ +# coding: utf-8 + +""" + zrok + + zrok client access # noqa: E501 + + OpenAPI spec version: 1.0.0 + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +from __future__ import absolute_import + +import unittest + +import zrok_api +from zrok_api.models.share_response import ShareResponse # noqa: E501 +from zrok_api.rest import ApiException + + +class TestShareResponse(unittest.TestCase): + """ShareResponse unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testShareResponse(self): + """Test ShareResponse""" + # FIXME: construct object with mandatory attributes with example values + # model = zrok_api.models.share_response.ShareResponse() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/sdk/python/sdk/zrok/test/test_shares.py b/sdk/python/sdk/zrok/test/test_shares.py new file mode 100644 index 00000000..f225a196 --- /dev/null +++ b/sdk/python/sdk/zrok/test/test_shares.py @@ -0,0 +1,39 @@ +# coding: utf-8 + +""" + zrok + + zrok client access # noqa: E501 + + OpenAPI spec version: 1.0.0 + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +from __future__ import absolute_import + +import unittest + +import zrok_api +from zrok_api.models.shares import Shares # noqa: E501 +from zrok_api.rest import ApiException + + +class TestShares(unittest.TestCase): + """Shares unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testShares(self): + """Test Shares""" + # FIXME: construct object with mandatory attributes with example values + # model = zrok_api.models.shares.Shares() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/sdk/python/sdk/zrok/test/test_spark_data.py b/sdk/python/sdk/zrok/test/test_spark_data.py new file mode 100644 index 00000000..0543758e --- /dev/null +++ b/sdk/python/sdk/zrok/test/test_spark_data.py @@ -0,0 +1,39 @@ +# coding: utf-8 + +""" + zrok + + zrok client access # noqa: E501 + + OpenAPI spec version: 1.0.0 + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +from __future__ import absolute_import + +import unittest + +import zrok_api +from zrok_api.models.spark_data import SparkData # noqa: E501 +from zrok_api.rest import ApiException + + +class TestSparkData(unittest.TestCase): + """SparkData unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testSparkData(self): + """Test SparkData""" + # FIXME: construct object with mandatory attributes with example values + # model = zrok_api.models.spark_data.SparkData() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/sdk/python/sdk/zrok/test/test_spark_data_sample.py b/sdk/python/sdk/zrok/test/test_spark_data_sample.py new file mode 100644 index 00000000..993babe2 --- /dev/null +++ b/sdk/python/sdk/zrok/test/test_spark_data_sample.py @@ -0,0 +1,39 @@ +# coding: utf-8 + +""" + zrok + + zrok client access # noqa: E501 + + OpenAPI spec version: 1.0.0 + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +from __future__ import absolute_import + +import unittest + +import zrok_api +from zrok_api.models.spark_data_sample import SparkDataSample # noqa: E501 +from zrok_api.rest import ApiException + + +class TestSparkDataSample(unittest.TestCase): + """SparkDataSample unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testSparkDataSample(self): + """Test SparkDataSample""" + # FIXME: construct object with mandatory attributes with example values + # model = zrok_api.models.spark_data_sample.SparkDataSample() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/sdk/python/sdk/zrok/test/test_sparklines_body.py b/sdk/python/sdk/zrok/test/test_sparklines_body.py new file mode 100644 index 00000000..00165b62 --- /dev/null +++ b/sdk/python/sdk/zrok/test/test_sparklines_body.py @@ -0,0 +1,39 @@ +# coding: utf-8 + +""" + zrok + + zrok client access # noqa: E501 + + OpenAPI spec version: 1.0.0 + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +from __future__ import absolute_import + +import unittest + +import zrok_api +from zrok_api.models.sparklines_body import SparklinesBody # noqa: E501 +from zrok_api.rest import ApiException + + +class TestSparklinesBody(unittest.TestCase): + """SparklinesBody unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testSparklinesBody(self): + """Test SparklinesBody""" + # FIXME: construct object with mandatory attributes with example values + # model = zrok_api.models.sparklines_body.SparklinesBody() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/sdk/python/sdk/zrok/test/test_token_generate_body.py b/sdk/python/sdk/zrok/test/test_token_generate_body.py new file mode 100644 index 00000000..990712d1 --- /dev/null +++ b/sdk/python/sdk/zrok/test/test_token_generate_body.py @@ -0,0 +1,39 @@ +# coding: utf-8 + +""" + zrok + + zrok client access # noqa: E501 + + OpenAPI spec version: 1.0.0 + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +from __future__ import absolute_import + +import unittest + +import zrok_api +from zrok_api.models.token_generate_body import TokenGenerateBody # noqa: E501 +from zrok_api.rest import ApiException + + +class TestTokenGenerateBody(unittest.TestCase): + """TokenGenerateBody unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testTokenGenerateBody(self): + """Test TokenGenerateBody""" + # FIXME: construct object with mandatory attributes with example values + # model = zrok_api.models.token_generate_body.TokenGenerateBody() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/sdk/python/sdk/zrok/test/test_unaccess_body.py b/sdk/python/sdk/zrok/test/test_unaccess_body.py new file mode 100644 index 00000000..23e63156 --- /dev/null +++ b/sdk/python/sdk/zrok/test/test_unaccess_body.py @@ -0,0 +1,39 @@ +# coding: utf-8 + +""" + zrok + + zrok client access # noqa: E501 + + OpenAPI spec version: 1.0.0 + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +from __future__ import absolute_import + +import unittest + +import zrok_api +from zrok_api.models.unaccess_body import UnaccessBody # noqa: E501 +from zrok_api.rest import ApiException + + +class TestUnaccessBody(unittest.TestCase): + """UnaccessBody unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testUnaccessBody(self): + """Test UnaccessBody""" + # FIXME: construct object with mandatory attributes with example values + # model = zrok_api.models.unaccess_body.UnaccessBody() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/sdk/python/sdk/zrok/test/test_unshare_body.py b/sdk/python/sdk/zrok/test/test_unshare_body.py new file mode 100644 index 00000000..23236afe --- /dev/null +++ b/sdk/python/sdk/zrok/test/test_unshare_body.py @@ -0,0 +1,39 @@ +# coding: utf-8 + +""" + zrok + + zrok client access # noqa: E501 + + OpenAPI spec version: 1.0.0 + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +from __future__ import absolute_import + +import unittest + +import zrok_api +from zrok_api.models.unshare_body import UnshareBody # noqa: E501 +from zrok_api.rest import ApiException + + +class TestUnshareBody(unittest.TestCase): + """UnshareBody unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testUnshareBody(self): + """Test UnshareBody""" + # FIXME: construct object with mandatory attributes with example values + # model = zrok_api.models.unshare_body.UnshareBody() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/sdk/python/sdk/zrok/test/test_verify_body.py b/sdk/python/sdk/zrok/test/test_verify_body.py new file mode 100644 index 00000000..9148441b --- /dev/null +++ b/sdk/python/sdk/zrok/test/test_verify_body.py @@ -0,0 +1,39 @@ +# coding: utf-8 + +""" + zrok + + zrok client access # noqa: E501 + + OpenAPI spec version: 1.0.0 + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +from __future__ import absolute_import + +import unittest + +import zrok_api +from zrok_api.models.verify_body import VerifyBody # noqa: E501 +from zrok_api.rest import ApiException + + +class TestVerifyBody(unittest.TestCase): + """VerifyBody unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testVerifyBody(self): + """Test VerifyBody""" + # FIXME: construct object with mandatory attributes with example values + # model = zrok_api.models.verify_body.VerifyBody() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/sdk/python/sdk/zrok/test/test_version.py b/sdk/python/sdk/zrok/test/test_version.py new file mode 100644 index 00000000..cad9c632 --- /dev/null +++ b/sdk/python/sdk/zrok/test/test_version.py @@ -0,0 +1,39 @@ +# coding: utf-8 + +""" + zrok + + zrok client access # noqa: E501 + + OpenAPI spec version: 1.0.0 + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +from __future__ import absolute_import + +import unittest + +import zrok_api +from zrok_api.models.version import Version # noqa: E501 +from zrok_api.rest import ApiException + + +class TestVersion(unittest.TestCase): + """Version unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testVersion(self): + """Test Version""" + # FIXME: construct object with mandatory attributes with example values + # model = zrok_api.models.version.Version() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/sdk/python/sdk/zrok/test/test_version_body.py b/sdk/python/sdk/zrok/test/test_version_body.py new file mode 100644 index 00000000..1c0a1898 --- /dev/null +++ b/sdk/python/sdk/zrok/test/test_version_body.py @@ -0,0 +1,39 @@ +# coding: utf-8 + +""" + zrok + + zrok client access # noqa: E501 + + OpenAPI spec version: 1.0.0 + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +from __future__ import absolute_import + +import unittest + +import zrok_api +from zrok_api.models.version_body import VersionBody # noqa: E501 +from zrok_api.rest import ApiException + + +class TestVersionBody(unittest.TestCase): + """VersionBody unit test stubs""" + + def setUp(self): + pass + + def tearDown(self): + pass + + def testVersionBody(self): + """Test VersionBody""" + # FIXME: construct object with mandatory attributes with example values + # model = zrok_api.models.version_body.VersionBody() # noqa: E501 + pass + + +if __name__ == '__main__': + unittest.main() diff --git a/sdk/python/sdk/zrok/tox.ini b/sdk/python/sdk/zrok/tox.ini new file mode 100644 index 00000000..a310bec9 --- /dev/null +++ b/sdk/python/sdk/zrok/tox.ini @@ -0,0 +1,10 @@ +[tox] +envlist = py3 + +[testenv] +deps=-r{toxinidir}/requirements.txt + -r{toxinidir}/test-requirements.txt + +commands= + nosetests \ + [] diff --git a/sdk/python/sdk/zrok/versioneer.py b/sdk/python/sdk/zrok/versioneer.py deleted file mode 100644 index 1e3753e6..00000000 --- a/sdk/python/sdk/zrok/versioneer.py +++ /dev/null @@ -1,2277 +0,0 @@ - -# Version: 0.29 - -"""The Versioneer - like a rocketeer, but for versions. - -The Versioneer -============== - -* like a rocketeer, but for versions! -* https://github.com/python-versioneer/python-versioneer -* Brian Warner -* License: Public Domain (Unlicense) -* Compatible with: Python 3.7, 3.8, 3.9, 3.10, 3.11 and pypy3 -* [![Latest Version][pypi-image]][pypi-url] -* [![Build Status][travis-image]][travis-url] - -This is a tool for managing a recorded version number in setuptools-based -python projects. The goal is to remove the tedious and error-prone "update -the embedded version string" step from your release process. Making a new -release should be as easy as recording a new tag in your version-control -system, and maybe making new tarballs. - - -## Quick Install - -Versioneer provides two installation modes. The "classic" vendored mode installs -a copy of versioneer into your repository. The experimental build-time dependency mode -is intended to allow you to skip this step and simplify the process of upgrading. - -### Vendored mode - -* `pip install versioneer` to somewhere in your $PATH - * A [conda-forge recipe](https://github.com/conda-forge/versioneer-feedstock) is - available, so you can also use `conda install -c conda-forge versioneer` -* add a `[tool.versioneer]` section to your `pyproject.toml` or a - `[versioneer]` section to your `setup.cfg` (see [Install](INSTALL.md)) - * Note that you will need to add `tomli; python_version < "3.11"` to your - build-time dependencies if you use `pyproject.toml` -* run `versioneer install --vendor` in your source tree, commit the results -* verify version information with `python setup.py version` - -### Build-time dependency mode - -* `pip install versioneer` to somewhere in your $PATH - * A [conda-forge recipe](https://github.com/conda-forge/versioneer-feedstock) is - available, so you can also use `conda install -c conda-forge versioneer` -* add a `[tool.versioneer]` section to your `pyproject.toml` or a - `[versioneer]` section to your `setup.cfg` (see [Install](INSTALL.md)) -* add `versioneer` (with `[toml]` extra, if configuring in `pyproject.toml`) - to the `requires` key of the `build-system` table in `pyproject.toml`: - ```toml - [build-system] - requires = ["setuptools", "versioneer[toml]"] - build-backend = "setuptools.build_meta" - ``` -* run `versioneer install --no-vendor` in your source tree, commit the results -* verify version information with `python setup.py version` - -## Version Identifiers - -Source trees come from a variety of places: - -* a version-control system checkout (mostly used by developers) -* a nightly tarball, produced by build automation -* a snapshot tarball, produced by a web-based VCS browser, like github's - "tarball from tag" feature -* a release tarball, produced by "setup.py sdist", distributed through PyPI - -Within each source tree, the version identifier (either a string or a number, -this tool is format-agnostic) can come from a variety of places: - -* ask the VCS tool itself, e.g. "git describe" (for checkouts), which knows - about recent "tags" and an absolute revision-id -* the name of the directory into which the tarball was unpacked -* an expanded VCS keyword ($Id$, etc) -* a `_version.py` created by some earlier build step - -For released software, the version identifier is closely related to a VCS -tag. Some projects use tag names that include more than just the version -string (e.g. "myproject-1.2" instead of just "1.2"), in which case the tool -needs to strip the tag prefix to extract the version identifier. For -unreleased software (between tags), the version identifier should provide -enough information to help developers recreate the same tree, while also -giving them an idea of roughly how old the tree is (after version 1.2, before -version 1.3). Many VCS systems can report a description that captures this, -for example `git describe --tags --dirty --always` reports things like -"0.7-1-g574ab98-dirty" to indicate that the checkout is one revision past the -0.7 tag, has a unique revision id of "574ab98", and is "dirty" (it has -uncommitted changes). - -The version identifier is used for multiple purposes: - -* to allow the module to self-identify its version: `myproject.__version__` -* to choose a name and prefix for a 'setup.py sdist' tarball - -## Theory of Operation - -Versioneer works by adding a special `_version.py` file into your source -tree, where your `__init__.py` can import it. This `_version.py` knows how to -dynamically ask the VCS tool for version information at import time. - -`_version.py` also contains `$Revision$` markers, and the installation -process marks `_version.py` to have this marker rewritten with a tag name -during the `git archive` command. As a result, generated tarballs will -contain enough information to get the proper version. - -To allow `setup.py` to compute a version too, a `versioneer.py` is added to -the top level of your source tree, next to `setup.py` and the `setup.cfg` -that configures it. This overrides several distutils/setuptools commands to -compute the version when invoked, and changes `setup.py build` and `setup.py -sdist` to replace `_version.py` with a small static file that contains just -the generated version data. - -## Installation - -See [INSTALL.md](./INSTALL.md) for detailed installation instructions. - -## Version-String Flavors - -Code which uses Versioneer can learn about its version string at runtime by -importing `_version` from your main `__init__.py` file and running the -`get_versions()` function. From the "outside" (e.g. in `setup.py`), you can -import the top-level `versioneer.py` and run `get_versions()`. - -Both functions return a dictionary with different flavors of version -information: - -* `['version']`: A condensed version string, rendered using the selected - style. This is the most commonly used value for the project's version - string. The default "pep440" style yields strings like `0.11`, - `0.11+2.g1076c97`, or `0.11+2.g1076c97.dirty`. See the "Styles" section - below for alternative styles. - -* `['full-revisionid']`: detailed revision identifier. For Git, this is the - full SHA1 commit id, e.g. "1076c978a8d3cfc70f408fe5974aa6c092c949ac". - -* `['date']`: Date and time of the latest `HEAD` commit. For Git, it is the - commit date in ISO 8601 format. This will be None if the date is not - available. - -* `['dirty']`: a boolean, True if the tree has uncommitted changes. Note that - this is only accurate if run in a VCS checkout, otherwise it is likely to - be False or None - -* `['error']`: if the version string could not be computed, this will be set - to a string describing the problem, otherwise it will be None. It may be - useful to throw an exception in setup.py if this is set, to avoid e.g. - creating tarballs with a version string of "unknown". - -Some variants are more useful than others. Including `full-revisionid` in a -bug report should allow developers to reconstruct the exact code being tested -(or indicate the presence of local changes that should be shared with the -developers). `version` is suitable for display in an "about" box or a CLI -`--version` output: it can be easily compared against release notes and lists -of bugs fixed in various releases. - -The installer adds the following text to your `__init__.py` to place a basic -version in `YOURPROJECT.__version__`: - - from ._version import get_versions - __version__ = get_versions()['version'] - del get_versions - -## Styles - -The setup.cfg `style=` configuration controls how the VCS information is -rendered into a version string. - -The default style, "pep440", produces a PEP440-compliant string, equal to the -un-prefixed tag name for actual releases, and containing an additional "local -version" section with more detail for in-between builds. For Git, this is -TAG[+DISTANCE.gHEX[.dirty]] , using information from `git describe --tags ---dirty --always`. For example "0.11+2.g1076c97.dirty" indicates that the -tree is like the "1076c97" commit but has uncommitted changes (".dirty"), and -that this commit is two revisions ("+2") beyond the "0.11" tag. For released -software (exactly equal to a known tag), the identifier will only contain the -stripped tag, e.g. "0.11". - -Other styles are available. See [details.md](details.md) in the Versioneer -source tree for descriptions. - -## Debugging - -Versioneer tries to avoid fatal errors: if something goes wrong, it will tend -to return a version of "0+unknown". To investigate the problem, run `setup.py -version`, which will run the version-lookup code in a verbose mode, and will -display the full contents of `get_versions()` (including the `error` string, -which may help identify what went wrong). - -## Known Limitations - -Some situations are known to cause problems for Versioneer. This details the -most significant ones. More can be found on Github -[issues page](https://github.com/python-versioneer/python-versioneer/issues). - -### Subprojects - -Versioneer has limited support for source trees in which `setup.py` is not in -the root directory (e.g. `setup.py` and `.git/` are *not* siblings). The are -two common reasons why `setup.py` might not be in the root: - -* Source trees which contain multiple subprojects, such as - [Buildbot](https://github.com/buildbot/buildbot), which contains both - "master" and "slave" subprojects, each with their own `setup.py`, - `setup.cfg`, and `tox.ini`. Projects like these produce multiple PyPI - distributions (and upload multiple independently-installable tarballs). -* Source trees whose main purpose is to contain a C library, but which also - provide bindings to Python (and perhaps other languages) in subdirectories. - -Versioneer will look for `.git` in parent directories, and most operations -should get the right version string. However `pip` and `setuptools` have bugs -and implementation details which frequently cause `pip install .` from a -subproject directory to fail to find a correct version string (so it usually -defaults to `0+unknown`). - -`pip install --editable .` should work correctly. `setup.py install` might -work too. - -Pip-8.1.1 is known to have this problem, but hopefully it will get fixed in -some later version. - -[Bug #38](https://github.com/python-versioneer/python-versioneer/issues/38) is tracking -this issue. The discussion in -[PR #61](https://github.com/python-versioneer/python-versioneer/pull/61) describes the -issue from the Versioneer side in more detail. -[pip PR#3176](https://github.com/pypa/pip/pull/3176) and -[pip PR#3615](https://github.com/pypa/pip/pull/3615) contain work to improve -pip to let Versioneer work correctly. - -Versioneer-0.16 and earlier only looked for a `.git` directory next to the -`setup.cfg`, so subprojects were completely unsupported with those releases. - -### Editable installs with setuptools <= 18.5 - -`setup.py develop` and `pip install --editable .` allow you to install a -project into a virtualenv once, then continue editing the source code (and -test) without re-installing after every change. - -"Entry-point scripts" (`setup(entry_points={"console_scripts": ..})`) are a -convenient way to specify executable scripts that should be installed along -with the python package. - -These both work as expected when using modern setuptools. When using -setuptools-18.5 or earlier, however, certain operations will cause -`pkg_resources.DistributionNotFound` errors when running the entrypoint -script, which must be resolved by re-installing the package. This happens -when the install happens with one version, then the egg_info data is -regenerated while a different version is checked out. Many setup.py commands -cause egg_info to be rebuilt (including `sdist`, `wheel`, and installing into -a different virtualenv), so this can be surprising. - -[Bug #83](https://github.com/python-versioneer/python-versioneer/issues/83) describes -this one, but upgrading to a newer version of setuptools should probably -resolve it. - - -## Updating Versioneer - -To upgrade your project to a new release of Versioneer, do the following: - -* install the new Versioneer (`pip install -U versioneer` or equivalent) -* edit `setup.cfg` and `pyproject.toml`, if necessary, - to include any new configuration settings indicated by the release notes. - See [UPGRADING](./UPGRADING.md) for details. -* re-run `versioneer install --[no-]vendor` in your source tree, to replace - `SRC/_version.py` -* commit any changed files - -## Future Directions - -This tool is designed to make it easily extended to other version-control -systems: all VCS-specific components are in separate directories like -src/git/ . The top-level `versioneer.py` script is assembled from these -components by running make-versioneer.py . In the future, make-versioneer.py -will take a VCS name as an argument, and will construct a version of -`versioneer.py` that is specific to the given VCS. It might also take the -configuration arguments that are currently provided manually during -installation by editing setup.py . Alternatively, it might go the other -direction and include code from all supported VCS systems, reducing the -number of intermediate scripts. - -## Similar projects - -* [setuptools_scm](https://github.com/pypa/setuptools_scm/) - a non-vendored build-time - dependency -* [minver](https://github.com/jbweston/miniver) - a lightweight reimplementation of - versioneer -* [versioningit](https://github.com/jwodder/versioningit) - a PEP 518-based setuptools - plugin - -## License - -To make Versioneer easier to embed, all its code is dedicated to the public -domain. The `_version.py` that it creates is also in the public domain. -Specifically, both are released under the "Unlicense", as described in -https://unlicense.org/. - -[pypi-image]: https://img.shields.io/pypi/v/versioneer.svg -[pypi-url]: https://pypi.python.org/pypi/versioneer/ -[travis-image]: -https://img.shields.io/travis/com/python-versioneer/python-versioneer.svg -[travis-url]: https://travis-ci.com/github/python-versioneer/python-versioneer - -""" -# pylint:disable=invalid-name,import-outside-toplevel,missing-function-docstring -# pylint:disable=missing-class-docstring,too-many-branches,too-many-statements -# pylint:disable=raise-missing-from,too-many-lines,too-many-locals,import-error -# pylint:disable=too-few-public-methods,redefined-outer-name,consider-using-with -# pylint:disable=attribute-defined-outside-init,too-many-arguments - -import configparser -import errno -import json -import os -import re -import subprocess -import sys -from pathlib import Path -from typing import Any, Callable, cast, Dict, List, Optional, Tuple, Union -from typing import NoReturn -import functools - -have_tomllib = True -if sys.version_info >= (3, 11): - import tomllib -else: - try: - import tomli as tomllib - except ImportError: - have_tomllib = False - - -class VersioneerConfig: - """Container for Versioneer configuration parameters.""" - - VCS: str - style: str - tag_prefix: str - versionfile_source: str - versionfile_build: Optional[str] - parentdir_prefix: Optional[str] - verbose: Optional[bool] - - -def get_root() -> str: - """Get the project root directory. - - We require that all commands are run from the project root, i.e. the - directory that contains setup.py, setup.cfg, and versioneer.py . - """ - root = os.path.realpath(os.path.abspath(os.getcwd())) - setup_py = os.path.join(root, "setup.py") - pyproject_toml = os.path.join(root, "pyproject.toml") - versioneer_py = os.path.join(root, "versioneer.py") - if not ( - os.path.exists(setup_py) - or os.path.exists(pyproject_toml) - or os.path.exists(versioneer_py) - ): - # allow 'python path/to/setup.py COMMAND' - root = os.path.dirname(os.path.realpath(os.path.abspath(sys.argv[0]))) - setup_py = os.path.join(root, "setup.py") - pyproject_toml = os.path.join(root, "pyproject.toml") - versioneer_py = os.path.join(root, "versioneer.py") - if not ( - os.path.exists(setup_py) - or os.path.exists(pyproject_toml) - or os.path.exists(versioneer_py) - ): - err = ("Versioneer was unable to run the project root directory. " - "Versioneer requires setup.py to be executed from " - "its immediate directory (like 'python setup.py COMMAND'), " - "or in a way that lets it use sys.argv[0] to find the root " - "(like 'python path/to/setup.py COMMAND').") - raise VersioneerBadRootError(err) - try: - # Certain runtime workflows (setup.py install/develop in a setuptools - # tree) execute all dependencies in a single python process, so - # "versioneer" may be imported multiple times, and python's shared - # module-import table will cache the first one. So we can't use - # os.path.dirname(__file__), as that will find whichever - # versioneer.py was first imported, even in later projects. - my_path = os.path.realpath(os.path.abspath(__file__)) - me_dir = os.path.normcase(os.path.splitext(my_path)[0]) - vsr_dir = os.path.normcase(os.path.splitext(versioneer_py)[0]) - if me_dir != vsr_dir and "VERSIONEER_PEP518" not in globals(): - print("Warning: build in %s is using versioneer.py from %s" - % (os.path.dirname(my_path), versioneer_py)) - except NameError: - pass - return root - - -def get_config_from_root(root: str) -> VersioneerConfig: - """Read the project setup.cfg file to determine Versioneer config.""" - # This might raise OSError (if setup.cfg is missing), or - # configparser.NoSectionError (if it lacks a [versioneer] section), or - # configparser.NoOptionError (if it lacks "VCS="). See the docstring at - # the top of versioneer.py for instructions on writing your setup.cfg . - root_pth = Path(root) - pyproject_toml = root_pth / "pyproject.toml" - setup_cfg = root_pth / "setup.cfg" - section: Union[Dict[str, Any], configparser.SectionProxy, None] = None - if pyproject_toml.exists() and have_tomllib: - try: - with open(pyproject_toml, 'rb') as fobj: - pp = tomllib.load(fobj) - section = pp['tool']['versioneer'] - except (tomllib.TOMLDecodeError, KeyError) as e: - print(f"Failed to load config from {pyproject_toml}: {e}") - print("Try to load it from setup.cfg") - if not section: - parser = configparser.ConfigParser() - with open(setup_cfg) as cfg_file: - parser.read_file(cfg_file) - parser.get("versioneer", "VCS") # raise error if missing - - section = parser["versioneer"] - - # `cast`` really shouldn't be used, but its simplest for the - # common VersioneerConfig users at the moment. We verify against - # `None` values elsewhere where it matters - - cfg = VersioneerConfig() - cfg.VCS = section['VCS'] - cfg.style = section.get("style", "") - cfg.versionfile_source = cast(str, section.get("versionfile_source")) - cfg.versionfile_build = section.get("versionfile_build") - cfg.tag_prefix = cast(str, section.get("tag_prefix")) - if cfg.tag_prefix in ("''", '""', None): - cfg.tag_prefix = "" - cfg.parentdir_prefix = section.get("parentdir_prefix") - if isinstance(section, configparser.SectionProxy): - # Make sure configparser translates to bool - cfg.verbose = section.getboolean("verbose") - else: - cfg.verbose = section.get("verbose") - - return cfg - - -class NotThisMethod(Exception): - """Exception raised if a method is not valid for the current scenario.""" - - -# these dictionaries contain VCS-specific tools -LONG_VERSION_PY: Dict[str, str] = {} -HANDLERS: Dict[str, Dict[str, Callable]] = {} - - -def register_vcs_handler(vcs: str, method: str) -> Callable: # decorator - """Create decorator to mark a method as the handler of a VCS.""" - def decorate(f: Callable) -> Callable: - """Store f in HANDLERS[vcs][method].""" - HANDLERS.setdefault(vcs, {})[method] = f - return f - return decorate - - -def run_command( - commands: List[str], - args: List[str], - cwd: Optional[str] = None, - verbose: bool = False, - hide_stderr: bool = False, - env: Optional[Dict[str, str]] = None, -) -> Tuple[Optional[str], Optional[int]]: - """Call the given command(s).""" - assert isinstance(commands, list) - process = None - - popen_kwargs: Dict[str, Any] = {} - if sys.platform == "win32": - # This hides the console window if pythonw.exe is used - startupinfo = subprocess.STARTUPINFO() - startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW - popen_kwargs["startupinfo"] = startupinfo - - for command in commands: - try: - dispcmd = str([command] + args) - # remember shell=False, so use git.cmd on windows, not just git - process = subprocess.Popen([command] + args, cwd=cwd, env=env, - stdout=subprocess.PIPE, - stderr=(subprocess.PIPE if hide_stderr - else None), **popen_kwargs) - break - except OSError as e: - if e.errno == errno.ENOENT: - continue - if verbose: - print("unable to run %s" % dispcmd) - print(e) - return None, None - else: - if verbose: - print("unable to find command, tried %s" % (commands,)) - return None, None - stdout = process.communicate()[0].strip().decode() - if process.returncode != 0: - if verbose: - print("unable to run %s (error)" % dispcmd) - print("stdout was %s" % stdout) - return None, process.returncode - return stdout, process.returncode - - -LONG_VERSION_PY['git'] = r''' -# This file helps to compute a version number in source trees obtained from -# git-archive tarball (such as those provided by githubs download-from-tag -# feature). Distribution tarballs (built by setup.py sdist) and build -# directories (produced by setup.py build) will contain a much shorter file -# that just contains the computed version number. - -# This file is released into the public domain. -# Generated by versioneer-0.29 -# https://github.com/python-versioneer/python-versioneer - -"""Git implementation of _version.py.""" - -import errno -import os -import re -import subprocess -import sys -from typing import Any, Callable, Dict, List, Optional, Tuple -import functools - - -def get_keywords() -> Dict[str, str]: - """Get the keywords needed to look up the version information.""" - # these strings will be replaced by git during git-archive. - # setup.py/versioneer.py will grep for the variable names, so they must - # each be defined on a line of their own. _version.py will just call - # get_keywords(). - git_refnames = "%(DOLLAR)sFormat:%%d%(DOLLAR)s" - git_full = "%(DOLLAR)sFormat:%%H%(DOLLAR)s" - git_date = "%(DOLLAR)sFormat:%%ci%(DOLLAR)s" - keywords = {"refnames": git_refnames, "full": git_full, "date": git_date} - return keywords - - -class VersioneerConfig: - """Container for Versioneer configuration parameters.""" - - VCS: str - style: str - tag_prefix: str - parentdir_prefix: str - versionfile_source: str - verbose: bool - - -def get_config() -> VersioneerConfig: - """Create, populate and return the VersioneerConfig() object.""" - # these strings are filled in when 'setup.py versioneer' creates - # _version.py - cfg = VersioneerConfig() - cfg.VCS = "git" - cfg.style = "%(STYLE)s" - cfg.tag_prefix = "%(TAG_PREFIX)s" - cfg.parentdir_prefix = "%(PARENTDIR_PREFIX)s" - cfg.versionfile_source = "%(VERSIONFILE_SOURCE)s" - cfg.verbose = False - return cfg - - -class NotThisMethod(Exception): - """Exception raised if a method is not valid for the current scenario.""" - - -LONG_VERSION_PY: Dict[str, str] = {} -HANDLERS: Dict[str, Dict[str, Callable]] = {} - - -def register_vcs_handler(vcs: str, method: str) -> Callable: # decorator - """Create decorator to mark a method as the handler of a VCS.""" - def decorate(f: Callable) -> Callable: - """Store f in HANDLERS[vcs][method].""" - if vcs not in HANDLERS: - HANDLERS[vcs] = {} - HANDLERS[vcs][method] = f - return f - return decorate - - -def run_command( - commands: List[str], - args: List[str], - cwd: Optional[str] = None, - verbose: bool = False, - hide_stderr: bool = False, - env: Optional[Dict[str, str]] = None, -) -> Tuple[Optional[str], Optional[int]]: - """Call the given command(s).""" - assert isinstance(commands, list) - process = None - - popen_kwargs: Dict[str, Any] = {} - if sys.platform == "win32": - # This hides the console window if pythonw.exe is used - startupinfo = subprocess.STARTUPINFO() - startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW - popen_kwargs["startupinfo"] = startupinfo - - for command in commands: - try: - dispcmd = str([command] + args) - # remember shell=False, so use git.cmd on windows, not just git - process = subprocess.Popen([command] + args, cwd=cwd, env=env, - stdout=subprocess.PIPE, - stderr=(subprocess.PIPE if hide_stderr - else None), **popen_kwargs) - break - except OSError as e: - if e.errno == errno.ENOENT: - continue - if verbose: - print("unable to run %%s" %% dispcmd) - print(e) - return None, None - else: - if verbose: - print("unable to find command, tried %%s" %% (commands,)) - return None, None - stdout = process.communicate()[0].strip().decode() - if process.returncode != 0: - if verbose: - print("unable to run %%s (error)" %% dispcmd) - print("stdout was %%s" %% stdout) - return None, process.returncode - return stdout, process.returncode - - -def versions_from_parentdir( - parentdir_prefix: str, - root: str, - verbose: bool, -) -> Dict[str, Any]: - """Try to determine the version from the parent directory name. - - Source tarballs conventionally unpack into a directory that includes both - the project name and a version string. We will also support searching up - two directory levels for an appropriately named parent directory - """ - rootdirs = [] - - for _ in range(3): - dirname = os.path.basename(root) - if dirname.startswith(parentdir_prefix): - return {"version": dirname[len(parentdir_prefix):], - "full-revisionid": None, - "dirty": False, "error": None, "date": None} - rootdirs.append(root) - root = os.path.dirname(root) # up a level - - if verbose: - print("Tried directories %%s but none started with prefix %%s" %% - (str(rootdirs), parentdir_prefix)) - raise NotThisMethod("rootdir doesn't start with parentdir_prefix") - - -@register_vcs_handler("git", "get_keywords") -def git_get_keywords(versionfile_abs: str) -> Dict[str, str]: - """Extract version information from the given file.""" - # the code embedded in _version.py can just fetch the value of these - # keywords. When used from setup.py, we don't want to import _version.py, - # so we do it with a regexp instead. This function is not used from - # _version.py. - keywords: Dict[str, str] = {} - try: - with open(versionfile_abs, "r") as fobj: - for line in fobj: - if line.strip().startswith("git_refnames ="): - mo = re.search(r'=\s*"(.*)"', line) - if mo: - keywords["refnames"] = mo.group(1) - if line.strip().startswith("git_full ="): - mo = re.search(r'=\s*"(.*)"', line) - if mo: - keywords["full"] = mo.group(1) - if line.strip().startswith("git_date ="): - mo = re.search(r'=\s*"(.*)"', line) - if mo: - keywords["date"] = mo.group(1) - except OSError: - pass - return keywords - - -@register_vcs_handler("git", "keywords") -def git_versions_from_keywords( - keywords: Dict[str, str], - tag_prefix: str, - verbose: bool, -) -> Dict[str, Any]: - """Get version information from git keywords.""" - if "refnames" not in keywords: - raise NotThisMethod("Short version file found") - date = keywords.get("date") - if date is not None: - # Use only the last line. Previous lines may contain GPG signature - # information. - date = date.splitlines()[-1] - - # git-2.2.0 added "%%cI", which expands to an ISO-8601 -compliant - # datestamp. However we prefer "%%ci" (which expands to an "ISO-8601 - # -like" string, which we must then edit to make compliant), because - # it's been around since git-1.5.3, and it's too difficult to - # discover which version we're using, or to work around using an - # older one. - date = date.strip().replace(" ", "T", 1).replace(" ", "", 1) - refnames = keywords["refnames"].strip() - if refnames.startswith("$Format"): - if verbose: - print("keywords are unexpanded, not using") - raise NotThisMethod("unexpanded keywords, not a git-archive tarball") - refs = {r.strip() for r in refnames.strip("()").split(",")} - # starting in git-1.8.3, tags are listed as "tag: foo-1.0" instead of - # just "foo-1.0". If we see a "tag: " prefix, prefer those. - TAG = "tag: " - tags = {r[len(TAG):] for r in refs if r.startswith(TAG)} - if not tags: - # Either we're using git < 1.8.3, or there really are no tags. We use - # a heuristic: assume all version tags have a digit. The old git %%d - # expansion behaves like git log --decorate=short and strips out the - # refs/heads/ and refs/tags/ prefixes that would let us distinguish - # between branches and tags. By ignoring refnames without digits, we - # filter out many common branch names like "release" and - # "stabilization", as well as "HEAD" and "master". - tags = {r for r in refs if re.search(r'\d', r)} - if verbose: - print("discarding '%%s', no digits" %% ",".join(refs - tags)) - if verbose: - print("likely tags: %%s" %% ",".join(sorted(tags))) - for ref in sorted(tags): - # sorting will prefer e.g. "2.0" over "2.0rc1" - if ref.startswith(tag_prefix): - r = ref[len(tag_prefix):] - # Filter out refs that exactly match prefix or that don't start - # with a number once the prefix is stripped (mostly a concern - # when prefix is '') - if not re.match(r'\d', r): - continue - if verbose: - print("picking %%s" %% r) - return {"version": r, - "full-revisionid": keywords["full"].strip(), - "dirty": False, "error": None, - "date": date} - # no suitable tags, so version is "0+unknown", but full hex is still there - if verbose: - print("no suitable tags, using unknown + full revision id") - return {"version": "0+unknown", - "full-revisionid": keywords["full"].strip(), - "dirty": False, "error": "no suitable tags", "date": None} - - -@register_vcs_handler("git", "pieces_from_vcs") -def git_pieces_from_vcs( - tag_prefix: str, - root: str, - verbose: bool, - runner: Callable = run_command -) -> Dict[str, Any]: - """Get version from 'git describe' in the root of the source tree. - - This only gets called if the git-archive 'subst' keywords were *not* - expanded, and _version.py hasn't already been rewritten with a short - version string, meaning we're inside a checked out source tree. - """ - GITS = ["git"] - if sys.platform == "win32": - GITS = ["git.cmd", "git.exe"] - - # GIT_DIR can interfere with correct operation of Versioneer. - # It may be intended to be passed to the Versioneer-versioned project, - # but that should not change where we get our version from. - env = os.environ.copy() - env.pop("GIT_DIR", None) - runner = functools.partial(runner, env=env) - - _, rc = runner(GITS, ["rev-parse", "--git-dir"], cwd=root, - hide_stderr=not verbose) - if rc != 0: - if verbose: - print("Directory %%s not under git control" %% root) - raise NotThisMethod("'git rev-parse --git-dir' returned error") - - # if there is a tag matching tag_prefix, this yields TAG-NUM-gHEX[-dirty] - # if there isn't one, this yields HEX[-dirty] (no NUM) - describe_out, rc = runner(GITS, [ - "describe", "--tags", "--dirty", "--always", "--long", - "--match", f"{tag_prefix}[[:digit:]]*" - ], cwd=root) - # --long was added in git-1.5.5 - if describe_out is None: - raise NotThisMethod("'git describe' failed") - describe_out = describe_out.strip() - full_out, rc = runner(GITS, ["rev-parse", "HEAD"], cwd=root) - if full_out is None: - raise NotThisMethod("'git rev-parse' failed") - full_out = full_out.strip() - - pieces: Dict[str, Any] = {} - pieces["long"] = full_out - pieces["short"] = full_out[:7] # maybe improved later - pieces["error"] = None - - branch_name, rc = runner(GITS, ["rev-parse", "--abbrev-ref", "HEAD"], - cwd=root) - # --abbrev-ref was added in git-1.6.3 - if rc != 0 or branch_name is None: - raise NotThisMethod("'git rev-parse --abbrev-ref' returned error") - branch_name = branch_name.strip() - - if branch_name == "HEAD": - # If we aren't exactly on a branch, pick a branch which represents - # the current commit. If all else fails, we are on a branchless - # commit. - branches, rc = runner(GITS, ["branch", "--contains"], cwd=root) - # --contains was added in git-1.5.4 - if rc != 0 or branches is None: - raise NotThisMethod("'git branch --contains' returned error") - branches = branches.split("\n") - - # Remove the first line if we're running detached - if "(" in branches[0]: - branches.pop(0) - - # Strip off the leading "* " from the list of branches. - branches = [branch[2:] for branch in branches] - if "master" in branches: - branch_name = "master" - elif not branches: - branch_name = None - else: - # Pick the first branch that is returned. Good or bad. - branch_name = branches[0] - - pieces["branch"] = branch_name - - # parse describe_out. It will be like TAG-NUM-gHEX[-dirty] or HEX[-dirty] - # TAG might have hyphens. - git_describe = describe_out - - # look for -dirty suffix - dirty = git_describe.endswith("-dirty") - pieces["dirty"] = dirty - if dirty: - git_describe = git_describe[:git_describe.rindex("-dirty")] - - # now we have TAG-NUM-gHEX or HEX - - if "-" in git_describe: - # TAG-NUM-gHEX - mo = re.search(r'^(.+)-(\d+)-g([0-9a-f]+)$', git_describe) - if not mo: - # unparsable. Maybe git-describe is misbehaving? - pieces["error"] = ("unable to parse git-describe output: '%%s'" - %% describe_out) - return pieces - - # tag - full_tag = mo.group(1) - if not full_tag.startswith(tag_prefix): - if verbose: - fmt = "tag '%%s' doesn't start with prefix '%%s'" - print(fmt %% (full_tag, tag_prefix)) - pieces["error"] = ("tag '%%s' doesn't start with prefix '%%s'" - %% (full_tag, tag_prefix)) - return pieces - pieces["closest-tag"] = full_tag[len(tag_prefix):] - - # distance: number of commits since tag - pieces["distance"] = int(mo.group(2)) - - # commit: short hex revision ID - pieces["short"] = mo.group(3) - - else: - # HEX: no tags - pieces["closest-tag"] = None - out, rc = runner(GITS, ["rev-list", "HEAD", "--left-right"], cwd=root) - pieces["distance"] = len(out.split()) # total number of commits - - # commit date: see ISO-8601 comment in git_versions_from_keywords() - date = runner(GITS, ["show", "-s", "--format=%%ci", "HEAD"], cwd=root)[0].strip() - # Use only the last line. Previous lines may contain GPG signature - # information. - date = date.splitlines()[-1] - pieces["date"] = date.strip().replace(" ", "T", 1).replace(" ", "", 1) - - return pieces - - -def plus_or_dot(pieces: Dict[str, Any]) -> str: - """Return a + if we don't already have one, else return a .""" - if "+" in pieces.get("closest-tag", ""): - return "." - return "+" - - -def render_pep440(pieces: Dict[str, Any]) -> str: - """Build up version string, with post-release "local version identifier". - - Our goal: TAG[+DISTANCE.gHEX[.dirty]] . Note that if you - get a tagged build and then dirty it, you'll get TAG+0.gHEX.dirty - - Exceptions: - 1: no tags. git_describe was just HEX. 0+untagged.DISTANCE.gHEX[.dirty] - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - if pieces["distance"] or pieces["dirty"]: - rendered += plus_or_dot(pieces) - rendered += "%%d.g%%s" %% (pieces["distance"], pieces["short"]) - if pieces["dirty"]: - rendered += ".dirty" - else: - # exception #1 - rendered = "0+untagged.%%d.g%%s" %% (pieces["distance"], - pieces["short"]) - if pieces["dirty"]: - rendered += ".dirty" - return rendered - - -def render_pep440_branch(pieces: Dict[str, Any]) -> str: - """TAG[[.dev0]+DISTANCE.gHEX[.dirty]] . - - The ".dev0" means not master branch. Note that .dev0 sorts backwards - (a feature branch will appear "older" than the master branch). - - Exceptions: - 1: no tags. 0[.dev0]+untagged.DISTANCE.gHEX[.dirty] - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - if pieces["distance"] or pieces["dirty"]: - if pieces["branch"] != "master": - rendered += ".dev0" - rendered += plus_or_dot(pieces) - rendered += "%%d.g%%s" %% (pieces["distance"], pieces["short"]) - if pieces["dirty"]: - rendered += ".dirty" - else: - # exception #1 - rendered = "0" - if pieces["branch"] != "master": - rendered += ".dev0" - rendered += "+untagged.%%d.g%%s" %% (pieces["distance"], - pieces["short"]) - if pieces["dirty"]: - rendered += ".dirty" - return rendered - - -def pep440_split_post(ver: str) -> Tuple[str, Optional[int]]: - """Split pep440 version string at the post-release segment. - - Returns the release segments before the post-release and the - post-release version number (or -1 if no post-release segment is present). - """ - vc = str.split(ver, ".post") - return vc[0], int(vc[1] or 0) if len(vc) == 2 else None - - -def render_pep440_pre(pieces: Dict[str, Any]) -> str: - """TAG[.postN.devDISTANCE] -- No -dirty. - - Exceptions: - 1: no tags. 0.post0.devDISTANCE - """ - if pieces["closest-tag"]: - if pieces["distance"]: - # update the post release segment - tag_version, post_version = pep440_split_post(pieces["closest-tag"]) - rendered = tag_version - if post_version is not None: - rendered += ".post%%d.dev%%d" %% (post_version + 1, pieces["distance"]) - else: - rendered += ".post0.dev%%d" %% (pieces["distance"]) - else: - # no commits, use the tag as the version - rendered = pieces["closest-tag"] - else: - # exception #1 - rendered = "0.post0.dev%%d" %% pieces["distance"] - return rendered - - -def render_pep440_post(pieces: Dict[str, Any]) -> str: - """TAG[.postDISTANCE[.dev0]+gHEX] . - - The ".dev0" means dirty. Note that .dev0 sorts backwards - (a dirty tree will appear "older" than the corresponding clean one), - but you shouldn't be releasing software with -dirty anyways. - - Exceptions: - 1: no tags. 0.postDISTANCE[.dev0] - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - if pieces["distance"] or pieces["dirty"]: - rendered += ".post%%d" %% pieces["distance"] - if pieces["dirty"]: - rendered += ".dev0" - rendered += plus_or_dot(pieces) - rendered += "g%%s" %% pieces["short"] - else: - # exception #1 - rendered = "0.post%%d" %% pieces["distance"] - if pieces["dirty"]: - rendered += ".dev0" - rendered += "+g%%s" %% pieces["short"] - return rendered - - -def render_pep440_post_branch(pieces: Dict[str, Any]) -> str: - """TAG[.postDISTANCE[.dev0]+gHEX[.dirty]] . - - The ".dev0" means not master branch. - - Exceptions: - 1: no tags. 0.postDISTANCE[.dev0]+gHEX[.dirty] - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - if pieces["distance"] or pieces["dirty"]: - rendered += ".post%%d" %% pieces["distance"] - if pieces["branch"] != "master": - rendered += ".dev0" - rendered += plus_or_dot(pieces) - rendered += "g%%s" %% pieces["short"] - if pieces["dirty"]: - rendered += ".dirty" - else: - # exception #1 - rendered = "0.post%%d" %% pieces["distance"] - if pieces["branch"] != "master": - rendered += ".dev0" - rendered += "+g%%s" %% pieces["short"] - if pieces["dirty"]: - rendered += ".dirty" - return rendered - - -def render_pep440_old(pieces: Dict[str, Any]) -> str: - """TAG[.postDISTANCE[.dev0]] . - - The ".dev0" means dirty. - - Exceptions: - 1: no tags. 0.postDISTANCE[.dev0] - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - if pieces["distance"] or pieces["dirty"]: - rendered += ".post%%d" %% pieces["distance"] - if pieces["dirty"]: - rendered += ".dev0" - else: - # exception #1 - rendered = "0.post%%d" %% pieces["distance"] - if pieces["dirty"]: - rendered += ".dev0" - return rendered - - -def render_git_describe(pieces: Dict[str, Any]) -> str: - """TAG[-DISTANCE-gHEX][-dirty]. - - Like 'git describe --tags --dirty --always'. - - Exceptions: - 1: no tags. HEX[-dirty] (note: no 'g' prefix) - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - if pieces["distance"]: - rendered += "-%%d-g%%s" %% (pieces["distance"], pieces["short"]) - else: - # exception #1 - rendered = pieces["short"] - if pieces["dirty"]: - rendered += "-dirty" - return rendered - - -def render_git_describe_long(pieces: Dict[str, Any]) -> str: - """TAG-DISTANCE-gHEX[-dirty]. - - Like 'git describe --tags --dirty --always -long'. - The distance/hash is unconditional. - - Exceptions: - 1: no tags. HEX[-dirty] (note: no 'g' prefix) - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - rendered += "-%%d-g%%s" %% (pieces["distance"], pieces["short"]) - else: - # exception #1 - rendered = pieces["short"] - if pieces["dirty"]: - rendered += "-dirty" - return rendered - - -def render(pieces: Dict[str, Any], style: str) -> Dict[str, Any]: - """Render the given version pieces into the requested style.""" - if pieces["error"]: - return {"version": "unknown", - "full-revisionid": pieces.get("long"), - "dirty": None, - "error": pieces["error"], - "date": None} - - if not style or style == "default": - style = "pep440" # the default - - if style == "pep440": - rendered = render_pep440(pieces) - elif style == "pep440-branch": - rendered = render_pep440_branch(pieces) - elif style == "pep440-pre": - rendered = render_pep440_pre(pieces) - elif style == "pep440-post": - rendered = render_pep440_post(pieces) - elif style == "pep440-post-branch": - rendered = render_pep440_post_branch(pieces) - elif style == "pep440-old": - rendered = render_pep440_old(pieces) - elif style == "git-describe": - rendered = render_git_describe(pieces) - elif style == "git-describe-long": - rendered = render_git_describe_long(pieces) - else: - raise ValueError("unknown style '%%s'" %% style) - - return {"version": rendered, "full-revisionid": pieces["long"], - "dirty": pieces["dirty"], "error": None, - "date": pieces.get("date")} - - -def get_versions() -> Dict[str, Any]: - """Get version information or return default if unable to do so.""" - # I am in _version.py, which lives at ROOT/VERSIONFILE_SOURCE. If we have - # __file__, we can work backwards from there to the root. Some - # py2exe/bbfreeze/non-CPython implementations don't do __file__, in which - # case we can only use expanded keywords. - - cfg = get_config() - verbose = cfg.verbose - - try: - return git_versions_from_keywords(get_keywords(), cfg.tag_prefix, - verbose) - except NotThisMethod: - pass - - try: - root = os.path.realpath(__file__) - # versionfile_source is the relative path from the top of the source - # tree (where the .git directory might live) to this file. Invert - # this to find the root from __file__. - for _ in cfg.versionfile_source.split('/'): - root = os.path.dirname(root) - except NameError: - return {"version": "0+unknown", "full-revisionid": None, - "dirty": None, - "error": "unable to find root of source tree", - "date": None} - - try: - pieces = git_pieces_from_vcs(cfg.tag_prefix, root, verbose) - return render(pieces, cfg.style) - except NotThisMethod: - pass - - try: - if cfg.parentdir_prefix: - return versions_from_parentdir(cfg.parentdir_prefix, root, verbose) - except NotThisMethod: - pass - - return {"version": "0+unknown", "full-revisionid": None, - "dirty": None, - "error": "unable to compute version", "date": None} -''' - - -@register_vcs_handler("git", "get_keywords") -def git_get_keywords(versionfile_abs: str) -> Dict[str, str]: - """Extract version information from the given file.""" - # the code embedded in _version.py can just fetch the value of these - # keywords. When used from setup.py, we don't want to import _version.py, - # so we do it with a regexp instead. This function is not used from - # _version.py. - keywords: Dict[str, str] = {} - try: - with open(versionfile_abs, "r") as fobj: - for line in fobj: - if line.strip().startswith("git_refnames ="): - mo = re.search(r'=\s*"(.*)"', line) - if mo: - keywords["refnames"] = mo.group(1) - if line.strip().startswith("git_full ="): - mo = re.search(r'=\s*"(.*)"', line) - if mo: - keywords["full"] = mo.group(1) - if line.strip().startswith("git_date ="): - mo = re.search(r'=\s*"(.*)"', line) - if mo: - keywords["date"] = mo.group(1) - except OSError: - pass - return keywords - - -@register_vcs_handler("git", "keywords") -def git_versions_from_keywords( - keywords: Dict[str, str], - tag_prefix: str, - verbose: bool, -) -> Dict[str, Any]: - """Get version information from git keywords.""" - if "refnames" not in keywords: - raise NotThisMethod("Short version file found") - date = keywords.get("date") - if date is not None: - # Use only the last line. Previous lines may contain GPG signature - # information. - date = date.splitlines()[-1] - - # git-2.2.0 added "%cI", which expands to an ISO-8601 -compliant - # datestamp. However we prefer "%ci" (which expands to an "ISO-8601 - # -like" string, which we must then edit to make compliant), because - # it's been around since git-1.5.3, and it's too difficult to - # discover which version we're using, or to work around using an - # older one. - date = date.strip().replace(" ", "T", 1).replace(" ", "", 1) - refnames = keywords["refnames"].strip() - if refnames.startswith("$Format"): - if verbose: - print("keywords are unexpanded, not using") - raise NotThisMethod("unexpanded keywords, not a git-archive tarball") - refs = {r.strip() for r in refnames.strip("()").split(",")} - # starting in git-1.8.3, tags are listed as "tag: foo-1.0" instead of - # just "foo-1.0". If we see a "tag: " prefix, prefer those. - TAG = "tag: " - tags = {r[len(TAG):] for r in refs if r.startswith(TAG)} - if not tags: - # Either we're using git < 1.8.3, or there really are no tags. We use - # a heuristic: assume all version tags have a digit. The old git %d - # expansion behaves like git log --decorate=short and strips out the - # refs/heads/ and refs/tags/ prefixes that would let us distinguish - # between branches and tags. By ignoring refnames without digits, we - # filter out many common branch names like "release" and - # "stabilization", as well as "HEAD" and "master". - tags = {r for r in refs if re.search(r'\d', r)} - if verbose: - print("discarding '%s', no digits" % ",".join(refs - tags)) - if verbose: - print("likely tags: %s" % ",".join(sorted(tags))) - for ref in sorted(tags): - # sorting will prefer e.g. "2.0" over "2.0rc1" - if ref.startswith(tag_prefix): - r = ref[len(tag_prefix):] - # Filter out refs that exactly match prefix or that don't start - # with a number once the prefix is stripped (mostly a concern - # when prefix is '') - if not re.match(r'\d', r): - continue - if verbose: - print("picking %s" % r) - return {"version": r, - "full-revisionid": keywords["full"].strip(), - "dirty": False, "error": None, - "date": date} - # no suitable tags, so version is "0+unknown", but full hex is still there - if verbose: - print("no suitable tags, using unknown + full revision id") - return {"version": "0+unknown", - "full-revisionid": keywords["full"].strip(), - "dirty": False, "error": "no suitable tags", "date": None} - - -@register_vcs_handler("git", "pieces_from_vcs") -def git_pieces_from_vcs( - tag_prefix: str, - root: str, - verbose: bool, - runner: Callable = run_command -) -> Dict[str, Any]: - """Get version from 'git describe' in the root of the source tree. - - This only gets called if the git-archive 'subst' keywords were *not* - expanded, and _version.py hasn't already been rewritten with a short - version string, meaning we're inside a checked out source tree. - """ - GITS = ["git"] - if sys.platform == "win32": - GITS = ["git.cmd", "git.exe"] - - # GIT_DIR can interfere with correct operation of Versioneer. - # It may be intended to be passed to the Versioneer-versioned project, - # but that should not change where we get our version from. - env = os.environ.copy() - env.pop("GIT_DIR", None) - runner = functools.partial(runner, env=env) - - _, rc = runner(GITS, ["rev-parse", "--git-dir"], cwd=root, - hide_stderr=not verbose) - if rc != 0: - if verbose: - print("Directory %s not under git control" % root) - raise NotThisMethod("'git rev-parse --git-dir' returned error") - - # if there is a tag matching tag_prefix, this yields TAG-NUM-gHEX[-dirty] - # if there isn't one, this yields HEX[-dirty] (no NUM) - describe_out, rc = runner(GITS, [ - "describe", "--tags", "--dirty", "--always", "--long", - "--match", f"{tag_prefix}[[:digit:]]*" - ], cwd=root) - # --long was added in git-1.5.5 - if describe_out is None: - raise NotThisMethod("'git describe' failed") - describe_out = describe_out.strip() - full_out, rc = runner(GITS, ["rev-parse", "HEAD"], cwd=root) - if full_out is None: - raise NotThisMethod("'git rev-parse' failed") - full_out = full_out.strip() - - pieces: Dict[str, Any] = {} - pieces["long"] = full_out - pieces["short"] = full_out[:7] # maybe improved later - pieces["error"] = None - - branch_name, rc = runner(GITS, ["rev-parse", "--abbrev-ref", "HEAD"], - cwd=root) - # --abbrev-ref was added in git-1.6.3 - if rc != 0 or branch_name is None: - raise NotThisMethod("'git rev-parse --abbrev-ref' returned error") - branch_name = branch_name.strip() - - if branch_name == "HEAD": - # If we aren't exactly on a branch, pick a branch which represents - # the current commit. If all else fails, we are on a branchless - # commit. - branches, rc = runner(GITS, ["branch", "--contains"], cwd=root) - # --contains was added in git-1.5.4 - if rc != 0 or branches is None: - raise NotThisMethod("'git branch --contains' returned error") - branches = branches.split("\n") - - # Remove the first line if we're running detached - if "(" in branches[0]: - branches.pop(0) - - # Strip off the leading "* " from the list of branches. - branches = [branch[2:] for branch in branches] - if "master" in branches: - branch_name = "master" - elif not branches: - branch_name = None - else: - # Pick the first branch that is returned. Good or bad. - branch_name = branches[0] - - pieces["branch"] = branch_name - - # parse describe_out. It will be like TAG-NUM-gHEX[-dirty] or HEX[-dirty] - # TAG might have hyphens. - git_describe = describe_out - - # look for -dirty suffix - dirty = git_describe.endswith("-dirty") - pieces["dirty"] = dirty - if dirty: - git_describe = git_describe[:git_describe.rindex("-dirty")] - - # now we have TAG-NUM-gHEX or HEX - - if "-" in git_describe: - # TAG-NUM-gHEX - mo = re.search(r'^(.+)-(\d+)-g([0-9a-f]+)$', git_describe) - if not mo: - # unparsable. Maybe git-describe is misbehaving? - pieces["error"] = ("unable to parse git-describe output: '%s'" - % describe_out) - return pieces - - # tag - full_tag = mo.group(1) - if not full_tag.startswith(tag_prefix): - if verbose: - fmt = "tag '%s' doesn't start with prefix '%s'" - print(fmt % (full_tag, tag_prefix)) - pieces["error"] = ("tag '%s' doesn't start with prefix '%s'" - % (full_tag, tag_prefix)) - return pieces - pieces["closest-tag"] = full_tag[len(tag_prefix):] - - # distance: number of commits since tag - pieces["distance"] = int(mo.group(2)) - - # commit: short hex revision ID - pieces["short"] = mo.group(3) - - else: - # HEX: no tags - pieces["closest-tag"] = None - out, rc = runner(GITS, ["rev-list", "HEAD", "--left-right"], cwd=root) - pieces["distance"] = len(out.split()) # total number of commits - - # commit date: see ISO-8601 comment in git_versions_from_keywords() - date = runner(GITS, ["show", "-s", "--format=%ci", "HEAD"], cwd=root)[0].strip() - # Use only the last line. Previous lines may contain GPG signature - # information. - date = date.splitlines()[-1] - pieces["date"] = date.strip().replace(" ", "T", 1).replace(" ", "", 1) - - return pieces - - -def do_vcs_install(versionfile_source: str, ipy: Optional[str]) -> None: - """Git-specific installation logic for Versioneer. - - For Git, this means creating/changing .gitattributes to mark _version.py - for export-subst keyword substitution. - """ - GITS = ["git"] - if sys.platform == "win32": - GITS = ["git.cmd", "git.exe"] - files = [versionfile_source] - if ipy: - files.append(ipy) - if "VERSIONEER_PEP518" not in globals(): - try: - my_path = __file__ - if my_path.endswith((".pyc", ".pyo")): - my_path = os.path.splitext(my_path)[0] + ".py" - versioneer_file = os.path.relpath(my_path) - except NameError: - versioneer_file = "versioneer.py" - files.append(versioneer_file) - present = False - try: - with open(".gitattributes", "r") as fobj: - for line in fobj: - if line.strip().startswith(versionfile_source): - if "export-subst" in line.strip().split()[1:]: - present = True - break - except OSError: - pass - if not present: - with open(".gitattributes", "a+") as fobj: - fobj.write(f"{versionfile_source} export-subst\n") - files.append(".gitattributes") - run_command(GITS, ["add", "--"] + files) - - -def versions_from_parentdir( - parentdir_prefix: str, - root: str, - verbose: bool, -) -> Dict[str, Any]: - """Try to determine the version from the parent directory name. - - Source tarballs conventionally unpack into a directory that includes both - the project name and a version string. We will also support searching up - two directory levels for an appropriately named parent directory - """ - rootdirs = [] - - for _ in range(3): - dirname = os.path.basename(root) - if dirname.startswith(parentdir_prefix): - return {"version": dirname[len(parentdir_prefix):], - "full-revisionid": None, - "dirty": False, "error": None, "date": None} - rootdirs.append(root) - root = os.path.dirname(root) # up a level - - if verbose: - print("Tried directories %s but none started with prefix %s" % - (str(rootdirs), parentdir_prefix)) - raise NotThisMethod("rootdir doesn't start with parentdir_prefix") - - -SHORT_VERSION_PY = """ -# This file was generated by 'versioneer.py' (0.29) from -# revision-control system data, or from the parent directory name of an -# unpacked source archive. Distribution tarballs contain a pre-generated copy -# of this file. - -import json - -version_json = ''' -%s -''' # END VERSION_JSON - - -def get_versions(): - return json.loads(version_json) -""" - - -def versions_from_file(filename: str) -> Dict[str, Any]: - """Try to determine the version from _version.py if present.""" - try: - with open(filename) as f: - contents = f.read() - except OSError: - raise NotThisMethod("unable to read _version.py") - mo = re.search(r"version_json = '''\n(.*)''' # END VERSION_JSON", - contents, re.M | re.S) - if not mo: - mo = re.search(r"version_json = '''\r\n(.*)''' # END VERSION_JSON", - contents, re.M | re.S) - if not mo: - raise NotThisMethod("no version_json in _version.py") - return json.loads(mo.group(1)) - - -def write_to_version_file(filename: str, versions: Dict[str, Any]) -> None: - """Write the given version number to the given _version.py file.""" - contents = json.dumps(versions, sort_keys=True, - indent=1, separators=(",", ": ")) - with open(filename, "w") as f: - f.write(SHORT_VERSION_PY % contents) - - print("set %s to '%s'" % (filename, versions["version"])) - - -def plus_or_dot(pieces: Dict[str, Any]) -> str: - """Return a + if we don't already have one, else return a .""" - if "+" in pieces.get("closest-tag", ""): - return "." - return "+" - - -def render_pep440(pieces: Dict[str, Any]) -> str: - """Build up version string, with post-release "local version identifier". - - Our goal: TAG[+DISTANCE.gHEX[.dirty]] . Note that if you - get a tagged build and then dirty it, you'll get TAG+0.gHEX.dirty - - Exceptions: - 1: no tags. git_describe was just HEX. 0+untagged.DISTANCE.gHEX[.dirty] - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - if pieces["distance"] or pieces["dirty"]: - rendered += plus_or_dot(pieces) - rendered += "%d.g%s" % (pieces["distance"], pieces["short"]) - if pieces["dirty"]: - rendered += ".dirty" - else: - # exception #1 - rendered = "0+untagged.%d.g%s" % (pieces["distance"], - pieces["short"]) - if pieces["dirty"]: - rendered += ".dirty" - return rendered - - -def render_pep440_branch(pieces: Dict[str, Any]) -> str: - """TAG[[.dev0]+DISTANCE.gHEX[.dirty]] . - - The ".dev0" means not master branch. Note that .dev0 sorts backwards - (a feature branch will appear "older" than the master branch). - - Exceptions: - 1: no tags. 0[.dev0]+untagged.DISTANCE.gHEX[.dirty] - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - if pieces["distance"] or pieces["dirty"]: - if pieces["branch"] != "master": - rendered += ".dev0" - rendered += plus_or_dot(pieces) - rendered += "%d.g%s" % (pieces["distance"], pieces["short"]) - if pieces["dirty"]: - rendered += ".dirty" - else: - # exception #1 - rendered = "0" - if pieces["branch"] != "master": - rendered += ".dev0" - rendered += "+untagged.%d.g%s" % (pieces["distance"], - pieces["short"]) - if pieces["dirty"]: - rendered += ".dirty" - return rendered - - -def pep440_split_post(ver: str) -> Tuple[str, Optional[int]]: - """Split pep440 version string at the post-release segment. - - Returns the release segments before the post-release and the - post-release version number (or -1 if no post-release segment is present). - """ - vc = str.split(ver, ".post") - return vc[0], int(vc[1] or 0) if len(vc) == 2 else None - - -def render_pep440_pre(pieces: Dict[str, Any]) -> str: - """TAG[.postN.devDISTANCE] -- No -dirty. - - Exceptions: - 1: no tags. 0.post0.devDISTANCE - """ - if pieces["closest-tag"]: - if pieces["distance"]: - # update the post release segment - tag_version, post_version = pep440_split_post(pieces["closest-tag"]) - rendered = tag_version - if post_version is not None: - rendered += ".post%d.dev%d" % (post_version + 1, pieces["distance"]) - else: - rendered += ".post0.dev%d" % (pieces["distance"]) - else: - # no commits, use the tag as the version - rendered = pieces["closest-tag"] - else: - # exception #1 - rendered = "0.post0.dev%d" % pieces["distance"] - return rendered - - -def render_pep440_post(pieces: Dict[str, Any]) -> str: - """TAG[.postDISTANCE[.dev0]+gHEX] . - - The ".dev0" means dirty. Note that .dev0 sorts backwards - (a dirty tree will appear "older" than the corresponding clean one), - but you shouldn't be releasing software with -dirty anyways. - - Exceptions: - 1: no tags. 0.postDISTANCE[.dev0] - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - if pieces["distance"] or pieces["dirty"]: - rendered += ".post%d" % pieces["distance"] - if pieces["dirty"]: - rendered += ".dev0" - rendered += plus_or_dot(pieces) - rendered += "g%s" % pieces["short"] - else: - # exception #1 - rendered = "0.post%d" % pieces["distance"] - if pieces["dirty"]: - rendered += ".dev0" - rendered += "+g%s" % pieces["short"] - return rendered - - -def render_pep440_post_branch(pieces: Dict[str, Any]) -> str: - """TAG[.postDISTANCE[.dev0]+gHEX[.dirty]] . - - The ".dev0" means not master branch. - - Exceptions: - 1: no tags. 0.postDISTANCE[.dev0]+gHEX[.dirty] - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - if pieces["distance"] or pieces["dirty"]: - rendered += ".post%d" % pieces["distance"] - if pieces["branch"] != "master": - rendered += ".dev0" - rendered += plus_or_dot(pieces) - rendered += "g%s" % pieces["short"] - if pieces["dirty"]: - rendered += ".dirty" - else: - # exception #1 - rendered = "0.post%d" % pieces["distance"] - if pieces["branch"] != "master": - rendered += ".dev0" - rendered += "+g%s" % pieces["short"] - if pieces["dirty"]: - rendered += ".dirty" - return rendered - - -def render_pep440_old(pieces: Dict[str, Any]) -> str: - """TAG[.postDISTANCE[.dev0]] . - - The ".dev0" means dirty. - - Exceptions: - 1: no tags. 0.postDISTANCE[.dev0] - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - if pieces["distance"] or pieces["dirty"]: - rendered += ".post%d" % pieces["distance"] - if pieces["dirty"]: - rendered += ".dev0" - else: - # exception #1 - rendered = "0.post%d" % pieces["distance"] - if pieces["dirty"]: - rendered += ".dev0" - return rendered - - -def render_git_describe(pieces: Dict[str, Any]) -> str: - """TAG[-DISTANCE-gHEX][-dirty]. - - Like 'git describe --tags --dirty --always'. - - Exceptions: - 1: no tags. HEX[-dirty] (note: no 'g' prefix) - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - if pieces["distance"]: - rendered += "-%d-g%s" % (pieces["distance"], pieces["short"]) - else: - # exception #1 - rendered = pieces["short"] - if pieces["dirty"]: - rendered += "-dirty" - return rendered - - -def render_git_describe_long(pieces: Dict[str, Any]) -> str: - """TAG-DISTANCE-gHEX[-dirty]. - - Like 'git describe --tags --dirty --always -long'. - The distance/hash is unconditional. - - Exceptions: - 1: no tags. HEX[-dirty] (note: no 'g' prefix) - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - rendered += "-%d-g%s" % (pieces["distance"], pieces["short"]) - else: - # exception #1 - rendered = pieces["short"] - if pieces["dirty"]: - rendered += "-dirty" - return rendered - - -def render(pieces: Dict[str, Any], style: str) -> Dict[str, Any]: - """Render the given version pieces into the requested style.""" - if pieces["error"]: - return {"version": "unknown", - "full-revisionid": pieces.get("long"), - "dirty": None, - "error": pieces["error"], - "date": None} - - if not style or style == "default": - style = "pep440" # the default - - if style == "pep440": - rendered = render_pep440(pieces) - elif style == "pep440-branch": - rendered = render_pep440_branch(pieces) - elif style == "pep440-pre": - rendered = render_pep440_pre(pieces) - elif style == "pep440-post": - rendered = render_pep440_post(pieces) - elif style == "pep440-post-branch": - rendered = render_pep440_post_branch(pieces) - elif style == "pep440-old": - rendered = render_pep440_old(pieces) - elif style == "git-describe": - rendered = render_git_describe(pieces) - elif style == "git-describe-long": - rendered = render_git_describe_long(pieces) - else: - raise ValueError("unknown style '%s'" % style) - - return {"version": rendered, "full-revisionid": pieces["long"], - "dirty": pieces["dirty"], "error": None, - "date": pieces.get("date")} - - -class VersioneerBadRootError(Exception): - """The project root directory is unknown or missing key files.""" - - -def get_versions(verbose: bool = False) -> Dict[str, Any]: - """Get the project version from whatever source is available. - - Returns dict with two keys: 'version' and 'full'. - """ - if "versioneer" in sys.modules: - # see the discussion in cmdclass.py:get_cmdclass() - del sys.modules["versioneer"] - - root = get_root() - cfg = get_config_from_root(root) - - assert cfg.VCS is not None, "please set [versioneer]VCS= in setup.cfg" - handlers = HANDLERS.get(cfg.VCS) - assert handlers, "unrecognized VCS '%s'" % cfg.VCS - verbose = verbose or bool(cfg.verbose) # `bool()` used to avoid `None` - assert cfg.versionfile_source is not None, \ - "please set versioneer.versionfile_source" - assert cfg.tag_prefix is not None, "please set versioneer.tag_prefix" - - versionfile_abs = os.path.join(root, cfg.versionfile_source) - - # extract version from first of: _version.py, VCS command (e.g. 'git - # describe'), parentdir. This is meant to work for developers using a - # source checkout, for users of a tarball created by 'setup.py sdist', - # and for users of a tarball/zipball created by 'git archive' or github's - # download-from-tag feature or the equivalent in other VCSes. - - get_keywords_f = handlers.get("get_keywords") - from_keywords_f = handlers.get("keywords") - if get_keywords_f and from_keywords_f: - try: - keywords = get_keywords_f(versionfile_abs) - ver = from_keywords_f(keywords, cfg.tag_prefix, verbose) - if verbose: - print("got version from expanded keyword %s" % ver) - return ver - except NotThisMethod: - pass - - try: - ver = versions_from_file(versionfile_abs) - if verbose: - print("got version from file %s %s" % (versionfile_abs, ver)) - return ver - except NotThisMethod: - pass - - from_vcs_f = handlers.get("pieces_from_vcs") - if from_vcs_f: - try: - pieces = from_vcs_f(cfg.tag_prefix, root, verbose) - ver = render(pieces, cfg.style) - if verbose: - print("got version from VCS %s" % ver) - return ver - except NotThisMethod: - pass - - try: - if cfg.parentdir_prefix: - ver = versions_from_parentdir(cfg.parentdir_prefix, root, verbose) - if verbose: - print("got version from parentdir %s" % ver) - return ver - except NotThisMethod: - pass - - if verbose: - print("unable to compute version") - - return {"version": "0+unknown", "full-revisionid": None, - "dirty": None, "error": "unable to compute version", - "date": None} - - -def get_version() -> str: - """Get the short version string for this project.""" - return get_versions()["version"] - - -def get_cmdclass(cmdclass: Optional[Dict[str, Any]] = None): - """Get the custom setuptools subclasses used by Versioneer. - - If the package uses a different cmdclass (e.g. one from numpy), it - should be provide as an argument. - """ - if "versioneer" in sys.modules: - del sys.modules["versioneer"] - # this fixes the "python setup.py develop" case (also 'install' and - # 'easy_install .'), in which subdependencies of the main project are - # built (using setup.py bdist_egg) in the same python process. Assume - # a main project A and a dependency B, which use different versions - # of Versioneer. A's setup.py imports A's Versioneer, leaving it in - # sys.modules by the time B's setup.py is executed, causing B to run - # with the wrong versioneer. Setuptools wraps the sub-dep builds in a - # sandbox that restores sys.modules to it's pre-build state, so the - # parent is protected against the child's "import versioneer". By - # removing ourselves from sys.modules here, before the child build - # happens, we protect the child from the parent's versioneer too. - # Also see https://github.com/python-versioneer/python-versioneer/issues/52 - - cmds = {} if cmdclass is None else cmdclass.copy() - - # we add "version" to setuptools - from setuptools import Command - - class cmd_version(Command): - description = "report generated version string" - user_options: List[Tuple[str, str, str]] = [] - boolean_options: List[str] = [] - - def initialize_options(self) -> None: - pass - - def finalize_options(self) -> None: - pass - - def run(self) -> None: - vers = get_versions(verbose=True) - print("Version: %s" % vers["version"]) - print(" full-revisionid: %s" % vers.get("full-revisionid")) - print(" dirty: %s" % vers.get("dirty")) - print(" date: %s" % vers.get("date")) - if vers["error"]: - print(" error: %s" % vers["error"]) - cmds["version"] = cmd_version - - # we override "build_py" in setuptools - # - # most invocation pathways end up running build_py: - # distutils/build -> build_py - # distutils/install -> distutils/build ->.. - # setuptools/bdist_wheel -> distutils/install ->.. - # setuptools/bdist_egg -> distutils/install_lib -> build_py - # setuptools/install -> bdist_egg ->.. - # setuptools/develop -> ? - # pip install: - # copies source tree to a tempdir before running egg_info/etc - # if .git isn't copied too, 'git describe' will fail - # then does setup.py bdist_wheel, or sometimes setup.py install - # setup.py egg_info -> ? - - # pip install -e . and setuptool/editable_wheel will invoke build_py - # but the build_py command is not expected to copy any files. - - # we override different "build_py" commands for both environments - if 'build_py' in cmds: - _build_py: Any = cmds['build_py'] - else: - from setuptools.command.build_py import build_py as _build_py - - class cmd_build_py(_build_py): - def run(self) -> None: - root = get_root() - cfg = get_config_from_root(root) - versions = get_versions() - _build_py.run(self) - if getattr(self, "editable_mode", False): - # During editable installs `.py` and data files are - # not copied to build_lib - return - # now locate _version.py in the new build/ directory and replace - # it with an updated value - if cfg.versionfile_build: - target_versionfile = os.path.join(self.build_lib, - cfg.versionfile_build) - print("UPDATING %s" % target_versionfile) - write_to_version_file(target_versionfile, versions) - cmds["build_py"] = cmd_build_py - - if 'build_ext' in cmds: - _build_ext: Any = cmds['build_ext'] - else: - from setuptools.command.build_ext import build_ext as _build_ext - - class cmd_build_ext(_build_ext): - def run(self) -> None: - root = get_root() - cfg = get_config_from_root(root) - versions = get_versions() - _build_ext.run(self) - if self.inplace: - # build_ext --inplace will only build extensions in - # build/lib<..> dir with no _version.py to write to. - # As in place builds will already have a _version.py - # in the module dir, we do not need to write one. - return - # now locate _version.py in the new build/ directory and replace - # it with an updated value - if not cfg.versionfile_build: - return - target_versionfile = os.path.join(self.build_lib, - cfg.versionfile_build) - if not os.path.exists(target_versionfile): - print(f"Warning: {target_versionfile} does not exist, skipping " - "version update. This can happen if you are running build_ext " - "without first running build_py.") - return - print("UPDATING %s" % target_versionfile) - write_to_version_file(target_versionfile, versions) - cmds["build_ext"] = cmd_build_ext - - if "cx_Freeze" in sys.modules: # cx_freeze enabled? - from cx_Freeze.dist import build_exe as _build_exe # type: ignore - # nczeczulin reports that py2exe won't like the pep440-style string - # as FILEVERSION, but it can be used for PRODUCTVERSION, e.g. - # setup(console=[{ - # "version": versioneer.get_version().split("+", 1)[0], # FILEVERSION - # "product_version": versioneer.get_version(), - # ... - - class cmd_build_exe(_build_exe): - def run(self) -> None: - root = get_root() - cfg = get_config_from_root(root) - versions = get_versions() - target_versionfile = cfg.versionfile_source - print("UPDATING %s" % target_versionfile) - write_to_version_file(target_versionfile, versions) - - _build_exe.run(self) - os.unlink(target_versionfile) - with open(cfg.versionfile_source, "w") as f: - LONG = LONG_VERSION_PY[cfg.VCS] - f.write(LONG % - {"DOLLAR": "$", - "STYLE": cfg.style, - "TAG_PREFIX": cfg.tag_prefix, - "PARENTDIR_PREFIX": cfg.parentdir_prefix, - "VERSIONFILE_SOURCE": cfg.versionfile_source, - }) - cmds["build_exe"] = cmd_build_exe - del cmds["build_py"] - - if 'py2exe' in sys.modules: # py2exe enabled? - try: - from py2exe.setuptools_buildexe import py2exe as _py2exe # type: ignore - except ImportError: - from py2exe.distutils_buildexe import py2exe as _py2exe # type: ignore - - class cmd_py2exe(_py2exe): - def run(self) -> None: - root = get_root() - cfg = get_config_from_root(root) - versions = get_versions() - target_versionfile = cfg.versionfile_source - print("UPDATING %s" % target_versionfile) - write_to_version_file(target_versionfile, versions) - - _py2exe.run(self) - os.unlink(target_versionfile) - with open(cfg.versionfile_source, "w") as f: - LONG = LONG_VERSION_PY[cfg.VCS] - f.write(LONG % - {"DOLLAR": "$", - "STYLE": cfg.style, - "TAG_PREFIX": cfg.tag_prefix, - "PARENTDIR_PREFIX": cfg.parentdir_prefix, - "VERSIONFILE_SOURCE": cfg.versionfile_source, - }) - cmds["py2exe"] = cmd_py2exe - - # sdist farms its file list building out to egg_info - if 'egg_info' in cmds: - _egg_info: Any = cmds['egg_info'] - else: - from setuptools.command.egg_info import egg_info as _egg_info - - class cmd_egg_info(_egg_info): - def find_sources(self) -> None: - # egg_info.find_sources builds the manifest list and writes it - # in one shot - super().find_sources() - - # Modify the filelist and normalize it - root = get_root() - cfg = get_config_from_root(root) - self.filelist.append('versioneer.py') - if cfg.versionfile_source: - # There are rare cases where versionfile_source might not be - # included by default, so we must be explicit - self.filelist.append(cfg.versionfile_source) - self.filelist.sort() - self.filelist.remove_duplicates() - - # The write method is hidden in the manifest_maker instance that - # generated the filelist and was thrown away - # We will instead replicate their final normalization (to unicode, - # and POSIX-style paths) - from setuptools import unicode_utils - normalized = [unicode_utils.filesys_decode(f).replace(os.sep, '/') - for f in self.filelist.files] - - manifest_filename = os.path.join(self.egg_info, 'SOURCES.txt') - with open(manifest_filename, 'w') as fobj: - fobj.write('\n'.join(normalized)) - - cmds['egg_info'] = cmd_egg_info - - # we override different "sdist" commands for both environments - if 'sdist' in cmds: - _sdist: Any = cmds['sdist'] - else: - from setuptools.command.sdist import sdist as _sdist - - class cmd_sdist(_sdist): - def run(self) -> None: - versions = get_versions() - self._versioneer_generated_versions = versions - # unless we update this, the command will keep using the old - # version - self.distribution.metadata.version = versions["version"] - return _sdist.run(self) - - def make_release_tree(self, base_dir: str, files: List[str]) -> None: - root = get_root() - cfg = get_config_from_root(root) - _sdist.make_release_tree(self, base_dir, files) - # now locate _version.py in the new base_dir directory - # (remembering that it may be a hardlink) and replace it with an - # updated value - target_versionfile = os.path.join(base_dir, cfg.versionfile_source) - print("UPDATING %s" % target_versionfile) - write_to_version_file(target_versionfile, - self._versioneer_generated_versions) - cmds["sdist"] = cmd_sdist - - return cmds - - -CONFIG_ERROR = """ -setup.cfg is missing the necessary Versioneer configuration. You need -a section like: - - [versioneer] - VCS = git - style = pep440 - versionfile_source = src/myproject/_version.py - versionfile_build = myproject/_version.py - tag_prefix = - parentdir_prefix = myproject- - -You will also need to edit your setup.py to use the results: - - import versioneer - setup(version=versioneer.get_version(), - cmdclass=versioneer.get_cmdclass(), ...) - -Please read the docstring in ./versioneer.py for configuration instructions, -edit setup.cfg, and re-run the installer or 'python versioneer.py setup'. -""" - -SAMPLE_CONFIG = """ -# See the docstring in versioneer.py for instructions. Note that you must -# re-run 'versioneer.py setup' after changing this section, and commit the -# resulting files. - -[versioneer] -#VCS = git -#style = pep440 -#versionfile_source = -#versionfile_build = -#tag_prefix = -#parentdir_prefix = - -""" - -OLD_SNIPPET = """ -from ._version import get_versions -__version__ = get_versions()['version'] -del get_versions -""" - -INIT_PY_SNIPPET = """ -from . import {0} -__version__ = {0}.get_versions()['version'] -""" - - -def do_setup() -> int: - """Do main VCS-independent setup function for installing Versioneer.""" - root = get_root() - try: - cfg = get_config_from_root(root) - except (OSError, configparser.NoSectionError, - configparser.NoOptionError) as e: - if isinstance(e, (OSError, configparser.NoSectionError)): - print("Adding sample versioneer config to setup.cfg", - file=sys.stderr) - with open(os.path.join(root, "setup.cfg"), "a") as f: - f.write(SAMPLE_CONFIG) - print(CONFIG_ERROR, file=sys.stderr) - return 1 - - print(" creating %s" % cfg.versionfile_source) - with open(cfg.versionfile_source, "w") as f: - LONG = LONG_VERSION_PY[cfg.VCS] - f.write(LONG % {"DOLLAR": "$", - "STYLE": cfg.style, - "TAG_PREFIX": cfg.tag_prefix, - "PARENTDIR_PREFIX": cfg.parentdir_prefix, - "VERSIONFILE_SOURCE": cfg.versionfile_source, - }) - - ipy = os.path.join(os.path.dirname(cfg.versionfile_source), - "__init__.py") - maybe_ipy: Optional[str] = ipy - if os.path.exists(ipy): - try: - with open(ipy, "r") as f: - old = f.read() - except OSError: - old = "" - module = os.path.splitext(os.path.basename(cfg.versionfile_source))[0] - snippet = INIT_PY_SNIPPET.format(module) - if OLD_SNIPPET in old: - print(" replacing boilerplate in %s" % ipy) - with open(ipy, "w") as f: - f.write(old.replace(OLD_SNIPPET, snippet)) - elif snippet not in old: - print(" appending to %s" % ipy) - with open(ipy, "a") as f: - f.write(snippet) - else: - print(" %s unmodified" % ipy) - else: - print(" %s doesn't exist, ok" % ipy) - maybe_ipy = None - - # Make VCS-specific changes. For git, this means creating/changing - # .gitattributes to mark _version.py for export-subst keyword - # substitution. - do_vcs_install(cfg.versionfile_source, maybe_ipy) - return 0 - - -def scan_setup_py() -> int: - """Validate the contents of setup.py against Versioneer's expectations.""" - found = set() - setters = False - errors = 0 - with open("setup.py", "r") as f: - for line in f.readlines(): - if "import versioneer" in line: - found.add("import") - if "versioneer.get_cmdclass()" in line: - found.add("cmdclass") - if "versioneer.get_version()" in line: - found.add("get_version") - if "versioneer.VCS" in line: - setters = True - if "versioneer.versionfile_source" in line: - setters = True - if len(found) != 3: - print("") - print("Your setup.py appears to be missing some important items") - print("(but I might be wrong). Please make sure it has something") - print("roughly like the following:") - print("") - print(" import versioneer") - print(" setup( version=versioneer.get_version(),") - print(" cmdclass=versioneer.get_cmdclass(), ...)") - print("") - errors += 1 - if setters: - print("You should remove lines like 'versioneer.VCS = ' and") - print("'versioneer.versionfile_source = ' . This configuration") - print("now lives in setup.cfg, and should be removed from setup.py") - print("") - errors += 1 - return errors - - -def setup_command() -> NoReturn: - """Set up Versioneer and exit with appropriate error code.""" - errors = do_setup() - errors += scan_setup_py() - sys.exit(1 if errors else 0) - - -if __name__ == "__main__": - cmd = sys.argv[1] - if cmd == "setup": - setup_command() diff --git a/sdk/python/sdk/zrok/zrok/__init__.py b/sdk/python/sdk/zrok/zrok/__init__.py deleted file mode 100644 index 3ae70bb1..00000000 --- a/sdk/python/sdk/zrok/zrok/__init__.py +++ /dev/null @@ -1,4 +0,0 @@ -from . import environment # noqa -from . import access, decor, model, share, overview # noqa -from . import _version -__version__ = _version.get_versions()['version'] diff --git a/sdk/python/sdk/zrok/zrok/_version.py b/sdk/python/sdk/zrok/zrok/_version.py deleted file mode 100644 index b5a79645..00000000 --- a/sdk/python/sdk/zrok/zrok/_version.py +++ /dev/null @@ -1,683 +0,0 @@ - -# This file helps to compute a version number in source trees obtained from -# git-archive tarball (such as those provided by githubs download-from-tag -# feature). Distribution tarballs (built by setup.py sdist) and build -# directories (produced by setup.py build) will contain a much shorter file -# that just contains the computed version number. - -# This file is released into the public domain. -# Generated by versioneer-0.29 -# https://github.com/python-versioneer/python-versioneer - -"""Git implementation of _version.py.""" - -import errno -import os -import re -import subprocess -import sys -from typing import Any, Callable, Dict, List, Optional, Tuple -import functools - - -def get_keywords() -> Dict[str, str]: - """Get the keywords needed to look up the version information.""" - # these strings will be replaced by git during git-archive. - # setup.py/versioneer.py will grep for the variable names, so they must - # each be defined on a line of their own. _version.py will just call - # get_keywords(). - git_refnames = "$Format:%d$" - git_full = "$Format:%H$" - git_date = "$Format:%ci$" - keywords = {"refnames": git_refnames, "full": git_full, "date": git_date} - return keywords - - -class VersioneerConfig: - """Container for Versioneer configuration parameters.""" - - VCS: str - style: str - tag_prefix: str - parentdir_prefix: str - versionfile_source: str - verbose: bool - - -def get_config() -> VersioneerConfig: - """Create, populate and return the VersioneerConfig() object.""" - # these strings are filled in when 'setup.py versioneer' creates - # _version.py - cfg = VersioneerConfig() - cfg.VCS = "git" - cfg.style = "pep440-pre" - cfg.tag_prefix = "v" - cfg.parentdir_prefix = "zrok-" - cfg.versionfile_source = "zrok/_version.py" - cfg.verbose = False - return cfg - - -class NotThisMethod(Exception): - """Exception raised if a method is not valid for the current scenario.""" - - -LONG_VERSION_PY: Dict[str, str] = {} -HANDLERS: Dict[str, Dict[str, Callable]] = {} - - -def register_vcs_handler(vcs: str, method: str) -> Callable: # decorator - """Create decorator to mark a method as the handler of a VCS.""" - def decorate(f: Callable) -> Callable: - """Store f in HANDLERS[vcs][method].""" - if vcs not in HANDLERS: - HANDLERS[vcs] = {} - HANDLERS[vcs][method] = f - return f - return decorate - - -def run_command( - commands: List[str], - args: List[str], - cwd: Optional[str] = None, - verbose: bool = False, - hide_stderr: bool = False, - env: Optional[Dict[str, str]] = None, -) -> Tuple[Optional[str], Optional[int]]: - """Call the given command(s).""" - assert isinstance(commands, list) - process = None - - popen_kwargs: Dict[str, Any] = {} - if sys.platform == "win32": - # This hides the console window if pythonw.exe is used - startupinfo = subprocess.STARTUPINFO() - startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW - popen_kwargs["startupinfo"] = startupinfo - - for command in commands: - try: - dispcmd = str([command] + args) - # remember shell=False, so use git.cmd on windows, not just git - process = subprocess.Popen([command] + args, cwd=cwd, env=env, - stdout=subprocess.PIPE, - stderr=(subprocess.PIPE if hide_stderr - else None), **popen_kwargs) - break - except OSError as e: - if e.errno == errno.ENOENT: - continue - if verbose: - print("unable to run %s" % dispcmd) - print(e) - return None, None - else: - if verbose: - print("unable to find command, tried %s" % (commands,)) - return None, None - stdout = process.communicate()[0].strip().decode() - if process.returncode != 0: - if verbose: - print("unable to run %s (error)" % dispcmd) - print("stdout was %s" % stdout) - return None, process.returncode - return stdout, process.returncode - - -def versions_from_parentdir( - parentdir_prefix: str, - root: str, - verbose: bool, -) -> Dict[str, Any]: - """Try to determine the version from the parent directory name. - - Source tarballs conventionally unpack into a directory that includes both - the project name and a version string. We will also support searching up - two directory levels for an appropriately named parent directory - """ - rootdirs = [] - - for _ in range(3): - dirname = os.path.basename(root) - if dirname.startswith(parentdir_prefix): - return {"version": dirname[len(parentdir_prefix):], - "full-revisionid": None, - "dirty": False, "error": None, "date": None} - rootdirs.append(root) - root = os.path.dirname(root) # up a level - - if verbose: - print("Tried directories %s but none started with prefix %s" % - (str(rootdirs), parentdir_prefix)) - raise NotThisMethod("rootdir doesn't start with parentdir_prefix") - - -@register_vcs_handler("git", "get_keywords") -def git_get_keywords(versionfile_abs: str) -> Dict[str, str]: - """Extract version information from the given file.""" - # the code embedded in _version.py can just fetch the value of these - # keywords. When used from setup.py, we don't want to import _version.py, - # so we do it with a regexp instead. This function is not used from - # _version.py. - keywords: Dict[str, str] = {} - try: - with open(versionfile_abs, "r") as fobj: - for line in fobj: - if line.strip().startswith("git_refnames ="): - mo = re.search(r'=\s*"(.*)"', line) - if mo: - keywords["refnames"] = mo.group(1) - if line.strip().startswith("git_full ="): - mo = re.search(r'=\s*"(.*)"', line) - if mo: - keywords["full"] = mo.group(1) - if line.strip().startswith("git_date ="): - mo = re.search(r'=\s*"(.*)"', line) - if mo: - keywords["date"] = mo.group(1) - except OSError: - pass - return keywords - - -@register_vcs_handler("git", "keywords") -def git_versions_from_keywords( - keywords: Dict[str, str], - tag_prefix: str, - verbose: bool, -) -> Dict[str, Any]: - """Get version information from git keywords.""" - if "refnames" not in keywords: - raise NotThisMethod("Short version file found") - date = keywords.get("date") - if date is not None: - # Use only the last line. Previous lines may contain GPG signature - # information. - date = date.splitlines()[-1] - - # git-2.2.0 added "%cI", which expands to an ISO-8601 -compliant - # datestamp. However we prefer "%ci" (which expands to an "ISO-8601 - # -like" string, which we must then edit to make compliant), because - # it's been around since git-1.5.3, and it's too difficult to - # discover which version we're using, or to work around using an - # older one. - date = date.strip().replace(" ", "T", 1).replace(" ", "", 1) - refnames = keywords["refnames"].strip() - if refnames.startswith("$Format"): - if verbose: - print("keywords are unexpanded, not using") - raise NotThisMethod("unexpanded keywords, not a git-archive tarball") - refs = {r.strip() for r in refnames.strip("()").split(",")} - # starting in git-1.8.3, tags are listed as "tag: foo-1.0" instead of - # just "foo-1.0". If we see a "tag: " prefix, prefer those. - TAG = "tag: " - tags = {r[len(TAG):] for r in refs if r.startswith(TAG)} - if not tags: - # Either we're using git < 1.8.3, or there really are no tags. We use - # a heuristic: assume all version tags have a digit. The old git %d - # expansion behaves like git log --decorate=short and strips out the - # refs/heads/ and refs/tags/ prefixes that would let us distinguish - # between branches and tags. By ignoring refnames without digits, we - # filter out many common branch names like "release" and - # "stabilization", as well as "HEAD" and "master". - tags = {r for r in refs if re.search(r'\d', r)} - if verbose: - print("discarding '%s', no digits" % ",".join(refs - tags)) - if verbose: - print("likely tags: %s" % ",".join(sorted(tags))) - for ref in sorted(tags): - # sorting will prefer e.g. "2.0" over "2.0rc1" - if ref.startswith(tag_prefix): - r = ref[len(tag_prefix):] - # Filter out refs that exactly match prefix or that don't start - # with a number once the prefix is stripped (mostly a concern - # when prefix is '') - if not re.match(r'\d', r): - continue - if verbose: - print("picking %s" % r) - return {"version": r, - "full-revisionid": keywords["full"].strip(), - "dirty": False, "error": None, - "date": date} - # no suitable tags, so version is "0+unknown", but full hex is still there - if verbose: - print("no suitable tags, using unknown + full revision id") - return {"version": "0+unknown", - "full-revisionid": keywords["full"].strip(), - "dirty": False, "error": "no suitable tags", "date": None} - - -@register_vcs_handler("git", "pieces_from_vcs") -def git_pieces_from_vcs( - tag_prefix: str, - root: str, - verbose: bool, - runner: Callable = run_command -) -> Dict[str, Any]: - """Get version from 'git describe' in the root of the source tree. - - This only gets called if the git-archive 'subst' keywords were *not* - expanded, and _version.py hasn't already been rewritten with a short - version string, meaning we're inside a checked out source tree. - """ - GITS = ["git"] - if sys.platform == "win32": - GITS = ["git.cmd", "git.exe"] - - # GIT_DIR can interfere with correct operation of Versioneer. - # It may be intended to be passed to the Versioneer-versioned project, - # but that should not change where we get our version from. - env = os.environ.copy() - env.pop("GIT_DIR", None) - runner = functools.partial(runner, env=env) - - _, rc = runner(GITS, ["rev-parse", "--git-dir"], cwd=root, - hide_stderr=not verbose) - if rc != 0: - if verbose: - print("Directory %s not under git control" % root) - raise NotThisMethod("'git rev-parse --git-dir' returned error") - - # if there is a tag matching tag_prefix, this yields TAG-NUM-gHEX[-dirty] - # if there isn't one, this yields HEX[-dirty] (no NUM) - describe_out, rc = runner(GITS, [ - "describe", "--tags", "--dirty", "--always", "--long", - "--match", f"{tag_prefix}[[:digit:]]*" - ], cwd=root) - # --long was added in git-1.5.5 - if describe_out is None: - raise NotThisMethod("'git describe' failed") - describe_out = describe_out.strip() - full_out, rc = runner(GITS, ["rev-parse", "HEAD"], cwd=root) - if full_out is None: - raise NotThisMethod("'git rev-parse' failed") - full_out = full_out.strip() - - pieces: Dict[str, Any] = {} - pieces["long"] = full_out - pieces["short"] = full_out[:7] # maybe improved later - pieces["error"] = None - - branch_name, rc = runner(GITS, ["rev-parse", "--abbrev-ref", "HEAD"], - cwd=root) - # --abbrev-ref was added in git-1.6.3 - if rc != 0 or branch_name is None: - raise NotThisMethod("'git rev-parse --abbrev-ref' returned error") - branch_name = branch_name.strip() - - if branch_name == "HEAD": - # If we aren't exactly on a branch, pick a branch which represents - # the current commit. If all else fails, we are on a branchless - # commit. - branches, rc = runner(GITS, ["branch", "--contains"], cwd=root) - # --contains was added in git-1.5.4 - if rc != 0 or branches is None: - raise NotThisMethod("'git branch --contains' returned error") - branches = branches.split("\n") - - # Remove the first line if we're running detached - if "(" in branches[0]: - branches.pop(0) - - # Strip off the leading "* " from the list of branches. - branches = [branch[2:] for branch in branches] - if "master" in branches: - branch_name = "master" - elif not branches: - branch_name = None - else: - # Pick the first branch that is returned. Good or bad. - branch_name = branches[0] - - pieces["branch"] = branch_name - - # parse describe_out. It will be like TAG-NUM-gHEX[-dirty] or HEX[-dirty] - # TAG might have hyphens. - git_describe = describe_out - - # look for -dirty suffix - dirty = git_describe.endswith("-dirty") - pieces["dirty"] = dirty - if dirty: - git_describe = git_describe[:git_describe.rindex("-dirty")] - - # now we have TAG-NUM-gHEX or HEX - - if "-" in git_describe: - # TAG-NUM-gHEX - mo = re.search(r'^(.+)-(\d+)-g([0-9a-f]+)$', git_describe) - if not mo: - # unparsable. Maybe git-describe is misbehaving? - pieces["error"] = ("unable to parse git-describe output: '%s'" - % describe_out) - return pieces - - # tag - full_tag = mo.group(1) - if not full_tag.startswith(tag_prefix): - if verbose: - fmt = "tag '%s' doesn't start with prefix '%s'" - print(fmt % (full_tag, tag_prefix)) - pieces["error"] = ("tag '%s' doesn't start with prefix '%s'" - % (full_tag, tag_prefix)) - return pieces - pieces["closest-tag"] = full_tag[len(tag_prefix):] - - # distance: number of commits since tag - pieces["distance"] = int(mo.group(2)) - - # commit: short hex revision ID - pieces["short"] = mo.group(3) - - else: - # HEX: no tags - pieces["closest-tag"] = None - out, rc = runner(GITS, ["rev-list", "HEAD", "--left-right"], cwd=root) - pieces["distance"] = len(out.split()) # total number of commits - - # commit date: see ISO-8601 comment in git_versions_from_keywords() - date = runner(GITS, ["show", "-s", "--format=%ci", "HEAD"], cwd=root)[0].strip() - # Use only the last line. Previous lines may contain GPG signature - # information. - date = date.splitlines()[-1] - pieces["date"] = date.strip().replace(" ", "T", 1).replace(" ", "", 1) - - return pieces - - -def plus_or_dot(pieces: Dict[str, Any]) -> str: - """Return a + if we don't already have one, else return a .""" - if "+" in pieces.get("closest-tag", ""): - return "." - return "+" - - -def render_pep440(pieces: Dict[str, Any]) -> str: - """Build up version string, with post-release "local version identifier". - - Our goal: TAG[+DISTANCE.gHEX[.dirty]] . Note that if you - get a tagged build and then dirty it, you'll get TAG+0.gHEX.dirty - - Exceptions: - 1: no tags. git_describe was just HEX. 0+untagged.DISTANCE.gHEX[.dirty] - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - if pieces["distance"] or pieces["dirty"]: - rendered += plus_or_dot(pieces) - rendered += "%d.g%s" % (pieces["distance"], pieces["short"]) - if pieces["dirty"]: - rendered += ".dirty" - else: - # exception #1 - rendered = "0+untagged.%d.g%s" % (pieces["distance"], - pieces["short"]) - if pieces["dirty"]: - rendered += ".dirty" - return rendered - - -def render_pep440_branch(pieces: Dict[str, Any]) -> str: - """TAG[[.dev0]+DISTANCE.gHEX[.dirty]] . - - The ".dev0" means not master branch. Note that .dev0 sorts backwards - (a feature branch will appear "older" than the master branch). - - Exceptions: - 1: no tags. 0[.dev0]+untagged.DISTANCE.gHEX[.dirty] - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - if pieces["distance"] or pieces["dirty"]: - if pieces["branch"] != "master": - rendered += ".dev0" - rendered += plus_or_dot(pieces) - rendered += "%d.g%s" % (pieces["distance"], pieces["short"]) - if pieces["dirty"]: - rendered += ".dirty" - else: - # exception #1 - rendered = "0" - if pieces["branch"] != "master": - rendered += ".dev0" - rendered += "+untagged.%d.g%s" % (pieces["distance"], - pieces["short"]) - if pieces["dirty"]: - rendered += ".dirty" - return rendered - - -def pep440_split_post(ver: str) -> Tuple[str, Optional[int]]: - """Split pep440 version string at the post-release segment. - - Returns the release segments before the post-release and the - post-release version number (or -1 if no post-release segment is present). - """ - vc = str.split(ver, ".post") - return vc[0], int(vc[1] or 0) if len(vc) == 2 else None - - -def render_pep440_pre(pieces: Dict[str, Any]) -> str: - """TAG[.postN.devDISTANCE] -- No -dirty. - - Exceptions: - 1: no tags. 0.post0.devDISTANCE - """ - if pieces["closest-tag"]: - if pieces["distance"]: - # update the post release segment - tag_version, post_version = pep440_split_post(pieces["closest-tag"]) - rendered = tag_version - if post_version is not None: - rendered += ".post%d.dev%d" % (post_version + 1, pieces["distance"]) - else: - rendered += ".post0.dev%d" % (pieces["distance"]) - else: - # no commits, use the tag as the version - rendered = pieces["closest-tag"] - else: - # exception #1 - rendered = "0.post0.dev%d" % pieces["distance"] - return rendered - - -def render_pep440_post(pieces: Dict[str, Any]) -> str: - """TAG[.postDISTANCE[.dev0]+gHEX] . - - The ".dev0" means dirty. Note that .dev0 sorts backwards - (a dirty tree will appear "older" than the corresponding clean one), - but you shouldn't be releasing software with -dirty anyways. - - Exceptions: - 1: no tags. 0.postDISTANCE[.dev0] - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - if pieces["distance"] or pieces["dirty"]: - rendered += ".post%d" % pieces["distance"] - if pieces["dirty"]: - rendered += ".dev0" - rendered += plus_or_dot(pieces) - rendered += "g%s" % pieces["short"] - else: - # exception #1 - rendered = "0.post%d" % pieces["distance"] - if pieces["dirty"]: - rendered += ".dev0" - rendered += "+g%s" % pieces["short"] - return rendered - - -def render_pep440_post_branch(pieces: Dict[str, Any]) -> str: - """TAG[.postDISTANCE[.dev0]+gHEX[.dirty]] . - - The ".dev0" means not master branch. - - Exceptions: - 1: no tags. 0.postDISTANCE[.dev0]+gHEX[.dirty] - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - if pieces["distance"] or pieces["dirty"]: - rendered += ".post%d" % pieces["distance"] - if pieces["branch"] != "master": - rendered += ".dev0" - rendered += plus_or_dot(pieces) - rendered += "g%s" % pieces["short"] - if pieces["dirty"]: - rendered += ".dirty" - else: - # exception #1 - rendered = "0.post%d" % pieces["distance"] - if pieces["branch"] != "master": - rendered += ".dev0" - rendered += "+g%s" % pieces["short"] - if pieces["dirty"]: - rendered += ".dirty" - return rendered - - -def render_pep440_old(pieces: Dict[str, Any]) -> str: - """TAG[.postDISTANCE[.dev0]] . - - The ".dev0" means dirty. - - Exceptions: - 1: no tags. 0.postDISTANCE[.dev0] - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - if pieces["distance"] or pieces["dirty"]: - rendered += ".post%d" % pieces["distance"] - if pieces["dirty"]: - rendered += ".dev0" - else: - # exception #1 - rendered = "0.post%d" % pieces["distance"] - if pieces["dirty"]: - rendered += ".dev0" - return rendered - - -def render_git_describe(pieces: Dict[str, Any]) -> str: - """TAG[-DISTANCE-gHEX][-dirty]. - - Like 'git describe --tags --dirty --always'. - - Exceptions: - 1: no tags. HEX[-dirty] (note: no 'g' prefix) - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - if pieces["distance"]: - rendered += "-%d-g%s" % (pieces["distance"], pieces["short"]) - else: - # exception #1 - rendered = pieces["short"] - if pieces["dirty"]: - rendered += "-dirty" - return rendered - - -def render_git_describe_long(pieces: Dict[str, Any]) -> str: - """TAG-DISTANCE-gHEX[-dirty]. - - Like 'git describe --tags --dirty --always -long'. - The distance/hash is unconditional. - - Exceptions: - 1: no tags. HEX[-dirty] (note: no 'g' prefix) - """ - if pieces["closest-tag"]: - rendered = pieces["closest-tag"] - rendered += "-%d-g%s" % (pieces["distance"], pieces["short"]) - else: - # exception #1 - rendered = pieces["short"] - if pieces["dirty"]: - rendered += "-dirty" - return rendered - - -def render(pieces: Dict[str, Any], style: str) -> Dict[str, Any]: - """Render the given version pieces into the requested style.""" - if pieces["error"]: - return {"version": "unknown", - "full-revisionid": pieces.get("long"), - "dirty": None, - "error": pieces["error"], - "date": None} - - if not style or style == "default": - style = "pep440" # the default - - if style == "pep440": - rendered = render_pep440(pieces) - elif style == "pep440-branch": - rendered = render_pep440_branch(pieces) - elif style == "pep440-pre": - rendered = render_pep440_pre(pieces) - elif style == "pep440-post": - rendered = render_pep440_post(pieces) - elif style == "pep440-post-branch": - rendered = render_pep440_post_branch(pieces) - elif style == "pep440-old": - rendered = render_pep440_old(pieces) - elif style == "git-describe": - rendered = render_git_describe(pieces) - elif style == "git-describe-long": - rendered = render_git_describe_long(pieces) - else: - raise ValueError("unknown style '%s'" % style) - - return {"version": rendered, "full-revisionid": pieces["long"], - "dirty": pieces["dirty"], "error": None, - "date": pieces.get("date")} - - -def get_versions() -> Dict[str, Any]: - """Get version information or return default if unable to do so.""" - # I am in _version.py, which lives at ROOT/VERSIONFILE_SOURCE. If we have - # __file__, we can work backwards from there to the root. Some - # py2exe/bbfreeze/non-CPython implementations don't do __file__, in which - # case we can only use expanded keywords. - - cfg = get_config() - verbose = cfg.verbose - - try: - return git_versions_from_keywords(get_keywords(), cfg.tag_prefix, - verbose) - except NotThisMethod: - pass - - try: - root = os.path.realpath(__file__) - # versionfile_source is the relative path from the top of the source - # tree (where the .git directory might live) to this file. Invert - # this to find the root from __file__. - for _ in cfg.versionfile_source.split('/'): - root = os.path.dirname(root) - except NameError: - return {"version": "0+unknown", "full-revisionid": None, - "dirty": None, - "error": "unable to find root of source tree", - "date": None} - - try: - pieces = git_pieces_from_vcs(cfg.tag_prefix, root, verbose) - return render(pieces, cfg.style) - except NotThisMethod: - pass - - try: - if cfg.parentdir_prefix: - return versions_from_parentdir(cfg.parentdir_prefix, root, verbose) - except NotThisMethod: - pass - - return {"version": "0+unknown", "full-revisionid": None, - "dirty": None, - "error": "unable to compute version", "date": None} diff --git a/sdk/python/sdk/zrok/zrok/access.py b/sdk/python/sdk/zrok/zrok/access.py deleted file mode 100644 index dc3a1dfd..00000000 --- a/sdk/python/sdk/zrok/zrok/access.py +++ /dev/null @@ -1,57 +0,0 @@ -from zrok.environment.root import Root -from zrok_api.models import AccessRequest, UnaccessRequest -from zrok_api.api import ShareApi -from zrok import model - - -class Access(): - root: Root - request: model.AccessRequest - access: model.Access - - def __init__(self, root: Root, request: model.AccessRequest): - self.root = root - self.request = request - - def __enter__(self) -> model.Access: - self.access = CreateAccess(root=self.root, request=self.request) - return self.access - - def __exit__(self, exception_type, exception_value, exception_traceback): - DeleteAccess(root=self.root, acc=self.access) - - -def CreateAccess(root: Root, request: model.AccessRequest) -> model.Access: - if not root.IsEnabled(): - raise Exception("environment is not enabled; enable with 'zrok enable' first!") - - out = AccessRequest(shr_token=request.ShareToken, - env_zid=root.env.ZitiIdentity) - - try: - zrok = root.Client() - except Exception as e: - raise Exception("error getting zrok client", e) - try: - res = ShareApi(zrok).access(body=out) - except Exception as e: - raise Exception("unable to create access", e) - return model.Access(Token=res.frontend_token, - ShareToken=request.ShareToken, - BackendMode=res.backend_mode) - - -def DeleteAccess(root: Root, acc: model.Access): - req = UnaccessRequest(frontend_token=acc.Token, - shr_token=acc.ShareToken, - env_zid=root.env.ZitiIdentity) - - try: - zrok = root.Client() - except Exception as e: - raise Exception("error getting zrok client", e) - - try: - ShareApi(zrok).unaccess(body=req) - except Exception as e: - raise Exception("error deleting access", e) diff --git a/sdk/python/sdk/zrok/zrok/decor.py b/sdk/python/sdk/zrok/zrok/decor.py deleted file mode 100644 index afaca880..00000000 --- a/sdk/python/sdk/zrok/zrok/decor.py +++ /dev/null @@ -1,33 +0,0 @@ -from dataclasses import dataclass -import openziti -from zrok.environment.root import Root - - -@dataclass -class Opts: - root: Root - shrToken: str - bindPort: int - bindHost: str = "" - - -class MonkeyPatch(openziti.monkeypatch): - def __init__(self, opts: {}, *args, **kwargs): - zif = opts['cfg'].root.ZitiIdentityNamed(opts['cfg'].root.EnvironmentIdentityName()) - cfg = dict(ztx=openziti.load(zif), service=opts['cfg'].shrToken) - super(MonkeyPatch, self).__init__(bindings={(opts['cfg'].bindHost, opts['cfg'].bindPort): cfg}, *args, **kwargs) - - def __enter__(self): - return self - - def __exit__(self, exc_type, exc_val, exc_tb): - super(MonkeyPatch, self).__exit__(exc_type, exc_val, exc_tb) - - -def zrok(opts: {}, *zargs, **zkwargs): - def zrockify_func(func): - def zrockified(*args, **kwargs): - with MonkeyPatch(opts=opts, *zargs, **zkwargs): - func(*args, **kwargs) - return zrockified - return zrockify_func diff --git a/sdk/python/sdk/zrok/zrok/dialer.py b/sdk/python/sdk/zrok/zrok/dialer.py deleted file mode 100644 index adf3c632..00000000 --- a/sdk/python/sdk/zrok/zrok/dialer.py +++ /dev/null @@ -1,10 +0,0 @@ -from zrok.environment.root import Root -import openziti -from socket import SOCK_STREAM - - -def Dialer(shrToken: str, root: Root) -> openziti.zitisock.ZitiSocket: - openziti.load(root.ZitiIdentityNamed(root.EnvironmentIdentityName())) - client = openziti.socket(type=SOCK_STREAM) - client.connect((shrToken, 1)) - return client diff --git a/sdk/python/sdk/zrok/zrok/environment/__init__.py b/sdk/python/sdk/zrok/zrok/environment/__init__.py deleted file mode 100644 index c8f5e5a1..00000000 --- a/sdk/python/sdk/zrok/zrok/environment/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from . import dirs, root # noqa diff --git a/sdk/python/sdk/zrok/zrok/environment/dirs.py b/sdk/python/sdk/zrok/zrok/environment/dirs.py deleted file mode 100644 index 4b53d292..00000000 --- a/sdk/python/sdk/zrok/zrok/environment/dirs.py +++ /dev/null @@ -1,32 +0,0 @@ -from pathlib import Path -import os - - -def rootDir() -> str: - home = str(Path.home()) - return os.path.join(home, ".zrok") - - -def metadataFile() -> str: - zrd = rootDir() - return os.path.join(zrd, "metadata.json") - - -def configFile() -> str: - zrd = rootDir() - return os.path.join(zrd, "config.json") - - -def environmentFile() -> str: - zrd = rootDir() - return os.path.join(zrd, "environment.json") - - -def identitiesDir() -> str: - zrd = rootDir() - return os.path.join(zrd, "identities") - - -def identityFile(name: str) -> str: - idd = identitiesDir() - return os.path.join(idd, name + ".json") diff --git a/sdk/python/sdk/zrok/zrok/environment/root.py b/sdk/python/sdk/zrok/zrok/environment/root.py index 65e483cb..ad7ae6ef 100644 --- a/sdk/python/sdk/zrok/zrok/environment/root.py +++ b/sdk/python/sdk/zrok/zrok/environment/root.py @@ -19,6 +19,7 @@ class Metadata: @dataclass class Config: ApiEndpoint: str = "" + DefaultFrontend: str = "" @dataclass @@ -135,9 +136,15 @@ def __loadMetadata() -> Metadata: def __loadConfig() -> Config: cf = configFile() - with open(cf) as f: - data = json.load(f) - return Config(ApiEndpoint=data["api_endpoint"]) + try: + with open(cf) as f: + data = json.load(f) + return Config( + ApiEndpoint=data.get("api_endpoint", ""), + DefaultFrontend=data.get("default_frontend", "") + ) + except (FileNotFoundError, json.JSONDecodeError): + return Config(ApiEndpoint="", DefaultFrontend="") def isEnabled() -> bool: diff --git a/sdk/python/sdk/zrok/zrok/listener.py b/sdk/python/sdk/zrok/zrok/listener.py deleted file mode 100644 index 5f85f58d..00000000 --- a/sdk/python/sdk/zrok/zrok/listener.py +++ /dev/null @@ -1,29 +0,0 @@ -import openziti -from zrok.environment.root import Root - - -class Listener(): - shrToken: str - root: Root - __server: openziti.zitisock.ZitiSocket - - def __init__(self, shrToken: str, root: Root): - self.shrToken = shrToken - self.root = root - ztx = openziti.load( - self.root.ZitiIdentityNamed( - self.root.EnvironmentIdentityName())) - self.__server = ztx.bind(self.shrToken) - - def __enter__(self) -> openziti.zitisock.ZitiSocket: - self.listen() - return self.__server - - def __exit__(self, exception_type, exception_value, exception_traceback): - self.close() - - def listen(self): - self.__server.listen() - - def close(self): - self.__server.close() diff --git a/sdk/python/sdk/zrok/zrok/model.py b/sdk/python/sdk/zrok/zrok/model.py deleted file mode 100644 index 90f51342..00000000 --- a/sdk/python/sdk/zrok/zrok/model.py +++ /dev/null @@ -1,76 +0,0 @@ -from dataclasses import dataclass, field - -BackendMode = str - -PROXY_BACKEND_MODE: BackendMode = "proxy" -WEB_BACKEND_MODE: BackendMode = "web" -TCP_TUNNEL_BACKEND_MODE: BackendMode = "tcpTunnel" -UDP_TUNNEL_BACKEND_MODE: BackendMode = "udpTunnel" -CADDY_BACKEND_MODE: BackendMode = "caddy" -DRIVE_BACKEND_MODE: BackendMode = "drive" -SOCKS_BACKEND_MODE: BackendMode = "socks" -VPN_BACKEND_MODE: BackendMode = "vpn" - -ShareMode = str - -PRIVATE_SHARE_MODE: ShareMode = "private" -PUBLIC_SHARE_MODE: ShareMode = "public" - -PermissionMode = str - -OPEN_PERMISSION_MODE: PermissionMode = "open" -CLOSED_PERMISSION_MODE: PermissionMode = "closed" - - -@dataclass -class ShareRequest: - BackendMode: BackendMode - ShareMode: ShareMode - Target: str - Frontends: list[str] = field(default_factory=list[str]) - BasicAuth: list[str] = field(default_factory=list[str]) - OauthProvider: str = "" - OauthEmailAddressPatterns: list[str] = field(default_factory=list[str]) - OauthAuthorizationCheckInterval: str = "" - Reserved: bool = False - UniqueName: str = "" - PermissionMode: PermissionMode = OPEN_PERMISSION_MODE - AccessGrants: list[str] = field(default_factory=list[str]) - - -@dataclass -class Share: - Token: str - FrontendEndpoints: list[str] - - -@dataclass -class AccessRequest: - ShareToken: str - - -@dataclass -class Access: - Token: str - ShareToken: str - BackendMode: BackendMode - - -@dataclass -class SessionMetrics: - BytesRead: int - BytesWritten: int - LastUpdate: int - - -@dataclass -class Metrics: - Namespace: str - Sessions: dict[str, SessionMetrics] - - -AuthScheme = str - -AUTH_SCHEME_NONE: AuthScheme = "none" -AUTH_SCHEME_BASIC: AuthScheme = "basic" -AUTH_SCHEME_OAUTH: AuthScheme = "oauth" diff --git a/sdk/python/sdk/zrok/zrok/overview.py b/sdk/python/sdk/zrok/zrok/overview.py deleted file mode 100644 index b8d64649..00000000 --- a/sdk/python/sdk/zrok/zrok/overview.py +++ /dev/null @@ -1,20 +0,0 @@ -from zrok.environment.root import Root -import urllib3 - - -def Overview(root: Root) -> str: - if not root.IsEnabled(): - raise Exception("environment is not enabled; enable with 'zrok enable' first!") - - http = urllib3.PoolManager() - apiEndpoint = root.ApiEndpoint().endpoint - try: - response = http.request( - 'GET', - apiEndpoint + "/api/v1/overview", - headers={ - "X-TOKEN": root.env.Token - }) - except Exception as e: - raise Exception("unable to get account overview", e) - return response.data.decode('utf-8') diff --git a/sdk/python/sdk/zrok/zrok/share.py b/sdk/python/sdk/zrok/zrok/share.py deleted file mode 100644 index b61af2fb..00000000 --- a/sdk/python/sdk/zrok/zrok/share.py +++ /dev/null @@ -1,106 +0,0 @@ -from zrok.environment.root import Root -from zrok_api.models import ShareRequest, UnshareRequest, AuthUser -from zrok_api.api import ShareApi -from zrok import model - - -class Share(): - root: Root - request: model.ShareRequest - share: model.Share - - def __init__(self, root: Root, request: model.ShareRequest): - self.root = root - self.request = request - - def __enter__(self) -> model.Share: - self.share = CreateShare(root=self.root, request=self.request) - return self.share - - def __exit__(self, exception_type, exception_value, exception_traceback): - if not self.request.Reserved: - DeleteShare(root=self.root, shr=self.share) - - -def CreateShare(root: Root, request: model.ShareRequest) -> model.Share: - if not root.IsEnabled(): - raise Exception("environment is not enabled; enable with 'zrok enable' first!") - - match request.ShareMode: - case model.PRIVATE_SHARE_MODE: - out = __newPrivateShare(root, request) - case model.PUBLIC_SHARE_MODE: - out = __newPublicShare(root, request) - case _: - raise Exception("unknown share mode " + request.ShareMode) - out.reserved = request.Reserved - if request.Reserved: - out.unique_name = request.UniqueName - - if len(request.BasicAuth) > 0: - out.auth_scheme = model.AUTH_SCHEME_BASIC - for pair in request.BasicAuth: - tokens = pair.split(":") - if len(tokens) == 2: - out.auth_users.append(AuthUser(username=tokens[0].strip(), password=tokens[1].strip())) - else: - raise Exception("invalid username:password pair: " + pair) - - if request.OauthProvider != "": - out.auth_scheme = model.AUTH_SCHEME_OAUTH - - try: - zrok = root.Client() - except Exception as e: - raise Exception("error getting zrok client", e) - try: - res = ShareApi(zrok).share(body=out) - except Exception as e: - raise Exception("unable to create share", e) - - return model.Share(Token=res.shr_token, - FrontendEndpoints=res.frontend_proxy_endpoints) - - -def __newPrivateShare(root: Root, request: model.ShareRequest) -> ShareRequest: - return ShareRequest(env_zid=root.env.ZitiIdentity, - share_mode=request.ShareMode, - backend_mode=request.BackendMode, - backend_proxy_endpoint=request.Target, - auth_scheme=model.AUTH_SCHEME_NONE, - permission_mode=request.PermissionMode, - access_grants=request.AccessGrants - ) - - -def __newPublicShare(root: Root, request: model.ShareRequest) -> ShareRequest: - ret = ShareRequest(env_zid=root.env.ZitiIdentity, - share_mode=request.ShareMode, - frontend_selection=request.Frontends, - backend_mode=request.BackendMode, - backend_proxy_endpoint=request.Target, - auth_scheme=model.AUTH_SCHEME_NONE, - oauth_email_domains=request.OauthEmailAddressPatterns, - oauth_authorization_check_interval=request.OauthAuthorizationCheckInterval, - permission_mode=request.PermissionMode, - access_grants=request.AccessGrants - ) - if request.OauthProvider != "": - ret.oauth_provider = request.OauthProvider - - return ret - - -def DeleteShare(root: Root, shr: model.Share): - req = UnshareRequest(env_zid=root.env.ZitiIdentity, - shr_token=shr.Token) - - try: - zrok = root.Client() - except Exception as e: - raise Exception("error getting zrok client", e) - - try: - ShareApi(zrok).unshare(body=req) - except Exception as e: - raise Exception("error deleting share", e) diff --git a/sdk/python/sdk/zrok/zrok_api/__init__.py b/sdk/python/sdk/zrok/zrok_api/__init__.py index 5028fe65..fb3d5f3d 100644 --- a/sdk/python/sdk/zrok/zrok_api/__init__.py +++ b/sdk/python/sdk/zrok/zrok_api/__init__.py @@ -7,7 +7,7 @@ zrok client access # noqa: E501 - OpenAPI spec version: 0.3.0 + OpenAPI spec version: 1.0.0 Generated by: https://github.com/swagger-api/swagger-codegen.git """ @@ -24,38 +24,41 @@ from zrok_api.api.share_api import ShareApi from zrok_api.api_client import ApiClient from zrok_api.configuration import Configuration # import models into sdk package -from zrok_api.models.access_request import AccessRequest -from zrok_api.models.access_response import AccessResponse +from zrok_api.models.access_body import AccessBody +from zrok_api.models.access_body1 import AccessBody1 from zrok_api.models.account_body import AccountBody from zrok_api.models.auth_user import AuthUser -from zrok_api.models.change_password_request import ChangePasswordRequest +from zrok_api.models.change_password_body import ChangePasswordBody from zrok_api.models.configuration import Configuration -from zrok_api.models.create_frontend_request import CreateFrontendRequest -from zrok_api.models.create_frontend_response import CreateFrontendResponse -from zrok_api.models.delete_frontend_request import DeleteFrontendRequest -from zrok_api.models.disable_request import DisableRequest -from zrok_api.models.enable_request import EnableRequest -from zrok_api.models.enable_response import EnableResponse +from zrok_api.models.disable_body import DisableBody +from zrok_api.models.enable_body import EnableBody from zrok_api.models.environment import Environment from zrok_api.models.environment_and_resources import EnvironmentAndResources from zrok_api.models.environments import Environments from zrok_api.models.error_message import ErrorMessage from zrok_api.models.frontend import Frontend +from zrok_api.models.frontend_body import FrontendBody +from zrok_api.models.frontend_body1 import FrontendBody1 +from zrok_api.models.frontend_body2 import FrontendBody2 from zrok_api.models.frontends import Frontends from zrok_api.models.grants_body import GrantsBody from zrok_api.models.identity_body import IdentityBody from zrok_api.models.inline_response200 import InlineResponse200 from zrok_api.models.inline_response2001 import InlineResponse2001 -from zrok_api.models.inline_response2001_members import InlineResponse2001Members from zrok_api.models.inline_response2002 import InlineResponse2002 -from zrok_api.models.inline_response2002_organizations import InlineResponse2002Organizations from zrok_api.models.inline_response2003 import InlineResponse2003 -from zrok_api.models.inline_response2003_memberships import InlineResponse2003Memberships +from zrok_api.models.inline_response2003_members import InlineResponse2003Members +from zrok_api.models.inline_response2004 import InlineResponse2004 +from zrok_api.models.inline_response2004_organizations import InlineResponse2004Organizations +from zrok_api.models.inline_response2005 import InlineResponse2005 +from zrok_api.models.inline_response2005_memberships import InlineResponse2005Memberships +from zrok_api.models.inline_response2006 import InlineResponse2006 from zrok_api.models.inline_response201 import InlineResponse201 -from zrok_api.models.invite_request import InviteRequest -from zrok_api.models.invite_token_generate_request import InviteTokenGenerateRequest -from zrok_api.models.login_request import LoginRequest -from zrok_api.models.login_response import LoginResponse +from zrok_api.models.inline_response2011 import InlineResponse2011 +from zrok_api.models.inline_response2012 import InlineResponse2012 +from zrok_api.models.inline_response2013 import InlineResponse2013 +from zrok_api.models.invite_body import InviteBody +from zrok_api.models.login_body import LoginBody from zrok_api.models.metrics import Metrics from zrok_api.models.metrics_sample import MetricsSample from zrok_api.models.organization_add_body import OrganizationAddBody @@ -64,25 +67,22 @@ from zrok_api.models.organization_body1 import OrganizationBody1 from zrok_api.models.organization_list_body import OrganizationListBody from zrok_api.models.organization_remove_body import OrganizationRemoveBody from zrok_api.models.overview import Overview -from zrok_api.models.password_requirements import PasswordRequirements from zrok_api.models.principal import Principal -from zrok_api.models.public_frontend import PublicFrontend -from zrok_api.models.public_frontend_list import PublicFrontendList -from zrok_api.models.regenerate_token_body import RegenerateTokenBody -from zrok_api.models.register_request import RegisterRequest -from zrok_api.models.register_response import RegisterResponse -from zrok_api.models.reset_password_request import ResetPasswordRequest +from zrok_api.models.regenerate_account_token_body import RegenerateAccountTokenBody +from zrok_api.models.register_body import RegisterBody +from zrok_api.models.reset_password_body import ResetPasswordBody from zrok_api.models.reset_password_request_body import ResetPasswordRequestBody from zrok_api.models.share import Share +from zrok_api.models.share_body import ShareBody from zrok_api.models.share_request import ShareRequest from zrok_api.models.share_response import ShareResponse from zrok_api.models.shares import Shares from zrok_api.models.spark_data import SparkData from zrok_api.models.spark_data_sample import SparkDataSample -from zrok_api.models.unaccess_request import UnaccessRequest -from zrok_api.models.unshare_request import UnshareRequest -from zrok_api.models.update_frontend_request import UpdateFrontendRequest -from zrok_api.models.update_share_request import UpdateShareRequest -from zrok_api.models.verify_request import VerifyRequest -from zrok_api.models.verify_response import VerifyResponse +from zrok_api.models.sparklines_body import SparklinesBody +from zrok_api.models.token_generate_body import TokenGenerateBody +from zrok_api.models.unaccess_body import UnaccessBody +from zrok_api.models.unshare_body import UnshareBody +from zrok_api.models.verify_body import VerifyBody from zrok_api.models.version import Version +from zrok_api.models.version_body import VersionBody diff --git a/sdk/python/sdk/zrok/zrok_api/api/account_api.py b/sdk/python/sdk/zrok/zrok_api/api/account_api.py index c74faed7..8a85d9e1 100644 --- a/sdk/python/sdk/zrok/zrok_api/api/account_api.py +++ b/sdk/python/sdk/zrok/zrok_api/api/account_api.py @@ -5,7 +5,7 @@ zrok client access # noqa: E501 - OpenAPI spec version: 0.3.0 + OpenAPI spec version: 1.0.0 Generated by: https://github.com/swagger-api/swagger-codegen.git """ @@ -41,7 +41,7 @@ class AccountApi(object): >>> result = thread.get() :param async_req bool - :param ChangePasswordRequest body: + :param ChangePasswordBody body: :return: None If the method is called asynchronously, returns the request thread. @@ -62,7 +62,7 @@ class AccountApi(object): >>> result = thread.get() :param async_req bool - :param ChangePasswordRequest body: + :param ChangePasswordBody body: :return: None If the method is called asynchronously, returns the request thread. @@ -134,7 +134,7 @@ class AccountApi(object): >>> result = thread.get() :param async_req bool - :param InviteRequest body: + :param InviteBody body: :return: None If the method is called asynchronously, returns the request thread. @@ -155,7 +155,7 @@ class AccountApi(object): >>> result = thread.get() :param async_req bool - :param InviteRequest body: + :param InviteBody body: :return: None If the method is called asynchronously, returns the request thread. @@ -227,8 +227,8 @@ class AccountApi(object): >>> result = thread.get() :param async_req bool - :param LoginRequest body: - :return: LoginResponse + :param LoginBody body: + :return: str If the method is called asynchronously, returns the request thread. """ @@ -248,8 +248,8 @@ class AccountApi(object): >>> result = thread.get() :param async_req bool - :param LoginRequest body: - :return: LoginResponse + :param LoginBody body: + :return: str If the method is called asynchronously, returns the request thread. """ @@ -303,7 +303,7 @@ class AccountApi(object): body=body_params, post_params=form_params, files=local_var_files, - response_type='LoginResponse', # noqa: E501 + response_type='str', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -311,37 +311,37 @@ class AccountApi(object): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def regenerate_token(self, **kwargs): # noqa: E501 - """regenerate_token # noqa: E501 + def regenerate_account_token(self, **kwargs): # noqa: E501 + """regenerate_account_token # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.regenerate_token(async_req=True) + >>> thread = api.regenerate_account_token(async_req=True) >>> result = thread.get() :param async_req bool - :param RegenerateTokenBody body: + :param RegenerateAccountTokenBody body: :return: InlineResponse200 If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.regenerate_token_with_http_info(**kwargs) # noqa: E501 + return self.regenerate_account_token_with_http_info(**kwargs) # noqa: E501 else: - (data) = self.regenerate_token_with_http_info(**kwargs) # noqa: E501 + (data) = self.regenerate_account_token_with_http_info(**kwargs) # noqa: E501 return data - def regenerate_token_with_http_info(self, **kwargs): # noqa: E501 - """regenerate_token # noqa: E501 + def regenerate_account_token_with_http_info(self, **kwargs): # noqa: E501 + """regenerate_account_token # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.regenerate_token_with_http_info(async_req=True) + >>> thread = api.regenerate_account_token_with_http_info(async_req=True) >>> result = thread.get() :param async_req bool - :param RegenerateTokenBody body: + :param RegenerateAccountTokenBody body: :return: InlineResponse200 If the method is called asynchronously, returns the request thread. @@ -358,7 +358,7 @@ class AccountApi(object): if key not in all_params: raise TypeError( "Got an unexpected keyword argument '%s'" - " to method regenerate_token" % key + " to method regenerate_account_token" % key ) params[key] = val del params['kwargs'] @@ -389,7 +389,7 @@ class AccountApi(object): auth_settings = ['key'] # noqa: E501 return self.api_client.call_api( - '/regenerateToken', 'POST', + '/regenerateAccountToken', 'POST', path_params, query_params, header_params, @@ -413,8 +413,8 @@ class AccountApi(object): >>> result = thread.get() :param async_req bool - :param RegisterRequest body: - :return: RegisterResponse + :param RegisterBody body: + :return: InlineResponse200 If the method is called asynchronously, returns the request thread. """ @@ -434,8 +434,8 @@ class AccountApi(object): >>> result = thread.get() :param async_req bool - :param RegisterRequest body: - :return: RegisterResponse + :param RegisterBody body: + :return: InlineResponse200 If the method is called asynchronously, returns the request thread. """ @@ -489,7 +489,7 @@ class AccountApi(object): body=body_params, post_params=form_params, files=local_var_files, - response_type='RegisterResponse', # noqa: E501 + response_type='InlineResponse200', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -506,7 +506,7 @@ class AccountApi(object): >>> result = thread.get() :param async_req bool - :param ResetPasswordRequest body: + :param ResetPasswordBody body: :return: None If the method is called asynchronously, returns the request thread. @@ -527,7 +527,7 @@ class AccountApi(object): >>> result = thread.get() :param async_req bool - :param ResetPasswordRequest body: + :param ResetPasswordBody body: :return: None If the method is called asynchronously, returns the request thread. @@ -688,8 +688,8 @@ class AccountApi(object): >>> result = thread.get() :param async_req bool - :param VerifyRequest body: - :return: VerifyResponse + :param VerifyBody body: + :return: InlineResponse2001 If the method is called asynchronously, returns the request thread. """ @@ -709,8 +709,8 @@ class AccountApi(object): >>> result = thread.get() :param async_req bool - :param VerifyRequest body: - :return: VerifyResponse + :param VerifyBody body: + :return: InlineResponse2001 If the method is called asynchronously, returns the request thread. """ @@ -764,7 +764,7 @@ class AccountApi(object): body=body_params, post_params=form_params, files=local_var_files, - response_type='VerifyResponse', # noqa: E501 + response_type='InlineResponse2001', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), diff --git a/sdk/python/sdk/zrok/zrok_api/api/admin_api.py b/sdk/python/sdk/zrok/zrok_api/api/admin_api.py index 172d0968..081dbe65 100644 --- a/sdk/python/sdk/zrok/zrok_api/api/admin_api.py +++ b/sdk/python/sdk/zrok/zrok_api/api/admin_api.py @@ -5,7 +5,7 @@ zrok client access # noqa: E501 - OpenAPI spec version: 0.3.0 + OpenAPI spec version: 1.0.0 Generated by: https://github.com/swagger-api/swagger-codegen.git """ @@ -223,8 +223,8 @@ class AdminApi(object): >>> result = thread.get() :param async_req bool - :param CreateFrontendRequest body: - :return: CreateFrontendResponse + :param FrontendBody body: + :return: InlineResponse201 If the method is called asynchronously, returns the request thread. """ @@ -244,8 +244,8 @@ class AdminApi(object): >>> result = thread.get() :param async_req bool - :param CreateFrontendRequest body: - :return: CreateFrontendResponse + :param FrontendBody body: + :return: InlineResponse201 If the method is called asynchronously, returns the request thread. """ @@ -299,7 +299,7 @@ class AdminApi(object): body=body_params, post_params=form_params, files=local_var_files, - response_type='CreateFrontendResponse', # noqa: E501 + response_type='InlineResponse201', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -317,7 +317,7 @@ class AdminApi(object): :param async_req bool :param IdentityBody body: - :return: InlineResponse201 + :return: InlineResponse2011 If the method is called asynchronously, returns the request thread. """ @@ -338,7 +338,7 @@ class AdminApi(object): :param async_req bool :param IdentityBody body: - :return: InlineResponse201 + :return: InlineResponse2011 If the method is called asynchronously, returns the request thread. """ @@ -392,7 +392,7 @@ class AdminApi(object): body=body_params, post_params=form_params, files=local_var_files, - response_type='InlineResponse201', # noqa: E501 + response_type='InlineResponse2011', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -410,7 +410,7 @@ class AdminApi(object): :param async_req bool :param OrganizationBody body: - :return: InlineResponse200 + :return: InlineResponse2012 If the method is called asynchronously, returns the request thread. """ @@ -431,7 +431,7 @@ class AdminApi(object): :param async_req bool :param OrganizationBody body: - :return: InlineResponse200 + :return: InlineResponse2012 If the method is called asynchronously, returns the request thread. """ @@ -485,7 +485,7 @@ class AdminApi(object): body=body_params, post_params=form_params, files=local_var_files, - response_type='InlineResponse200', # noqa: E501 + response_type='InlineResponse2012', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -502,7 +502,7 @@ class AdminApi(object): >>> result = thread.get() :param async_req bool - :param DeleteFrontendRequest body: + :param FrontendBody1 body: :return: None If the method is called asynchronously, returns the request thread. @@ -523,7 +523,7 @@ class AdminApi(object): >>> result = thread.get() :param async_req bool - :param DeleteFrontendRequest body: + :param FrontendBody1 body: :return: None If the method is called asynchronously, returns the request thread. @@ -769,7 +769,7 @@ class AdminApi(object): >>> result = thread.get() :param async_req bool - :param InviteTokenGenerateRequest body: + :param TokenGenerateBody body: :return: None If the method is called asynchronously, returns the request thread. @@ -790,7 +790,7 @@ class AdminApi(object): >>> result = thread.get() :param async_req bool - :param InviteTokenGenerateRequest body: + :param TokenGenerateBody body: :return: None If the method is called asynchronously, returns the request thread. @@ -858,7 +858,7 @@ class AdminApi(object): >>> result = thread.get() :param async_req bool - :return: PublicFrontendList + :return: list[InlineResponse2002] If the method is called asynchronously, returns the request thread. """ @@ -878,7 +878,7 @@ class AdminApi(object): >>> result = thread.get() :param async_req bool - :return: PublicFrontendList + :return: list[InlineResponse2002] If the method is called asynchronously, returns the request thread. """ @@ -926,7 +926,7 @@ class AdminApi(object): body=body_params, post_params=form_params, files=local_var_files, - response_type='PublicFrontendList', # noqa: E501 + response_type='list[InlineResponse2002]', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -944,7 +944,7 @@ class AdminApi(object): :param async_req bool :param OrganizationListBody body: - :return: InlineResponse2001 + :return: InlineResponse2003 If the method is called asynchronously, returns the request thread. """ @@ -965,7 +965,7 @@ class AdminApi(object): :param async_req bool :param OrganizationListBody body: - :return: InlineResponse2001 + :return: InlineResponse2003 If the method is called asynchronously, returns the request thread. """ @@ -1019,7 +1019,7 @@ class AdminApi(object): body=body_params, post_params=form_params, files=local_var_files, - response_type='InlineResponse2001', # noqa: E501 + response_type='InlineResponse2003', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -1036,7 +1036,7 @@ class AdminApi(object): >>> result = thread.get() :param async_req bool - :return: InlineResponse2002 + :return: InlineResponse2004 If the method is called asynchronously, returns the request thread. """ @@ -1056,7 +1056,7 @@ class AdminApi(object): >>> result = thread.get() :param async_req bool - :return: InlineResponse2002 + :return: InlineResponse2004 If the method is called asynchronously, returns the request thread. """ @@ -1104,7 +1104,7 @@ class AdminApi(object): body=body_params, post_params=form_params, files=local_var_files, - response_type='InlineResponse2002', # noqa: E501 + response_type='InlineResponse2004', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -1210,7 +1210,7 @@ class AdminApi(object): >>> result = thread.get() :param async_req bool - :param UpdateFrontendRequest body: + :param FrontendBody2 body: :return: None If the method is called asynchronously, returns the request thread. @@ -1231,7 +1231,7 @@ class AdminApi(object): >>> result = thread.get() :param async_req bool - :param UpdateFrontendRequest body: + :param FrontendBody2 body: :return: None If the method is called asynchronously, returns the request thread. diff --git a/sdk/python/sdk/zrok/zrok_api/api/environment_api.py b/sdk/python/sdk/zrok/zrok_api/api/environment_api.py index 01eeb922..16bc987e 100644 --- a/sdk/python/sdk/zrok/zrok_api/api/environment_api.py +++ b/sdk/python/sdk/zrok/zrok_api/api/environment_api.py @@ -5,7 +5,7 @@ zrok client access # noqa: E501 - OpenAPI spec version: 0.3.0 + OpenAPI spec version: 1.0.0 Generated by: https://github.com/swagger-api/swagger-codegen.git """ @@ -41,7 +41,7 @@ class EnvironmentApi(object): >>> result = thread.get() :param async_req bool - :param DisableRequest body: + :param DisableBody body: :return: None If the method is called asynchronously, returns the request thread. @@ -62,7 +62,7 @@ class EnvironmentApi(object): >>> result = thread.get() :param async_req bool - :param DisableRequest body: + :param DisableBody body: :return: None If the method is called asynchronously, returns the request thread. @@ -130,8 +130,8 @@ class EnvironmentApi(object): >>> result = thread.get() :param async_req bool - :param EnableRequest body: - :return: EnableResponse + :param EnableBody body: + :return: InlineResponse2011 If the method is called asynchronously, returns the request thread. """ @@ -151,8 +151,8 @@ class EnvironmentApi(object): >>> result = thread.get() :param async_req bool - :param EnableRequest body: - :return: EnableResponse + :param EnableBody body: + :return: InlineResponse2011 If the method is called asynchronously, returns the request thread. """ @@ -206,7 +206,7 @@ class EnvironmentApi(object): body=body_params, post_params=form_params, files=local_var_files, - response_type='EnableResponse', # noqa: E501 + response_type='InlineResponse2011', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), diff --git a/sdk/python/sdk/zrok/zrok_api/api/metadata_api.py b/sdk/python/sdk/zrok/zrok_api/api/metadata_api.py index 59ab45cb..b624e77d 100644 --- a/sdk/python/sdk/zrok/zrok_api/api/metadata_api.py +++ b/sdk/python/sdk/zrok/zrok_api/api/metadata_api.py @@ -5,7 +5,7 @@ zrok client access # noqa: E501 - OpenAPI spec version: 0.3.0 + OpenAPI spec version: 1.0.0 Generated by: https://github.com/swagger-api/swagger-codegen.git """ @@ -32,6 +32,99 @@ class MetadataApi(object): api_client = ApiClient() self.api_client = api_client + def client_version_check(self, **kwargs): # noqa: E501 + """client_version_check # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.client_version_check(async_req=True) + >>> result = thread.get() + + :param async_req bool + :param VersionBody body: + :return: None + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('async_req'): + return self.client_version_check_with_http_info(**kwargs) # noqa: E501 + else: + (data) = self.client_version_check_with_http_info(**kwargs) # noqa: E501 + return data + + def client_version_check_with_http_info(self, **kwargs): # noqa: E501 + """client_version_check # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.client_version_check_with_http_info(async_req=True) + >>> result = thread.get() + + :param async_req bool + :param VersionBody body: + :return: None + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['body'] # noqa: E501 + all_params.append('async_req') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in six.iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method client_version_check" % key + ) + params[key] = val + del params['kwargs'] + + collection_formats = {} + + path_params = {} + + query_params = [] + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + if 'body' in params: + body_params = params['body'] + # HTTP header `Accept` + header_params['Accept'] = self.api_client.select_header_accept( + ['application/zrok.v1+json']) # noqa: E501 + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 + ['application/zrok.v1+json']) # noqa: E501 + + # Authentication setting + auth_settings = [] # noqa: E501 + + return self.api_client.call_api( + '/version', 'POST', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type=None, # noqa: E501 + auth_settings=auth_settings, + async_req=params.get('async_req'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + def configuration(self, **kwargs): # noqa: E501 """configuration # noqa: E501 @@ -481,43 +574,43 @@ class MetadataApi(object): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_frontend_detail(self, fe_id, **kwargs): # noqa: E501 + def get_frontend_detail(self, frontend_id, **kwargs): # noqa: E501 """get_frontend_detail # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_frontend_detail(fe_id, async_req=True) + >>> thread = api.get_frontend_detail(frontend_id, async_req=True) >>> result = thread.get() :param async_req bool - :param int fe_id: (required) + :param int frontend_id: (required) :return: Frontend If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.get_frontend_detail_with_http_info(fe_id, **kwargs) # noqa: E501 + return self.get_frontend_detail_with_http_info(frontend_id, **kwargs) # noqa: E501 else: - (data) = self.get_frontend_detail_with_http_info(fe_id, **kwargs) # noqa: E501 + (data) = self.get_frontend_detail_with_http_info(frontend_id, **kwargs) # noqa: E501 return data - def get_frontend_detail_with_http_info(self, fe_id, **kwargs): # noqa: E501 + def get_frontend_detail_with_http_info(self, frontend_id, **kwargs): # noqa: E501 """get_frontend_detail # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_frontend_detail_with_http_info(fe_id, async_req=True) + >>> thread = api.get_frontend_detail_with_http_info(frontend_id, async_req=True) >>> result = thread.get() :param async_req bool - :param int fe_id: (required) + :param int frontend_id: (required) :return: Frontend If the method is called asynchronously, returns the request thread. """ - all_params = ['fe_id'] # noqa: E501 + all_params = ['frontend_id'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -532,16 +625,16 @@ class MetadataApi(object): ) params[key] = val del params['kwargs'] - # verify the required parameter 'fe_id' is set - if ('fe_id' not in params or - params['fe_id'] is None): - raise ValueError("Missing the required parameter `fe_id` when calling `get_frontend_detail`") # noqa: E501 + # verify the required parameter 'frontend_id' is set + if ('frontend_id' not in params or + params['frontend_id'] is None): + raise ValueError("Missing the required parameter `frontend_id` when calling `get_frontend_detail`") # noqa: E501 collection_formats = {} path_params = {} - if 'fe_id' in params: - path_params['feId'] = params['fe_id'] # noqa: E501 + if 'frontend_id' in params: + path_params['frontendId'] = params['frontend_id'] # noqa: E501 query_params = [] @@ -559,7 +652,7 @@ class MetadataApi(object): auth_settings = ['key'] # noqa: E501 return self.api_client.call_api( - '/detail/frontend/{feId}', 'GET', + '/detail/frontend/{frontendId}', 'GET', path_params, query_params, header_params, @@ -574,43 +667,43 @@ class MetadataApi(object): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_share_detail(self, shr_token, **kwargs): # noqa: E501 + def get_share_detail(self, share_token, **kwargs): # noqa: E501 """get_share_detail # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_share_detail(shr_token, async_req=True) + >>> thread = api.get_share_detail(share_token, async_req=True) >>> result = thread.get() :param async_req bool - :param str shr_token: (required) + :param str share_token: (required) :return: Share If the method is called asynchronously, returns the request thread. """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.get_share_detail_with_http_info(shr_token, **kwargs) # noqa: E501 + return self.get_share_detail_with_http_info(share_token, **kwargs) # noqa: E501 else: - (data) = self.get_share_detail_with_http_info(shr_token, **kwargs) # noqa: E501 + (data) = self.get_share_detail_with_http_info(share_token, **kwargs) # noqa: E501 return data - def get_share_detail_with_http_info(self, shr_token, **kwargs): # noqa: E501 + def get_share_detail_with_http_info(self, share_token, **kwargs): # noqa: E501 """get_share_detail # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_share_detail_with_http_info(shr_token, async_req=True) + >>> thread = api.get_share_detail_with_http_info(share_token, async_req=True) >>> result = thread.get() :param async_req bool - :param str shr_token: (required) + :param str share_token: (required) :return: Share If the method is called asynchronously, returns the request thread. """ - all_params = ['shr_token'] # noqa: E501 + all_params = ['share_token'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -625,16 +718,16 @@ class MetadataApi(object): ) params[key] = val del params['kwargs'] - # verify the required parameter 'shr_token' is set - if ('shr_token' not in params or - params['shr_token'] is None): - raise ValueError("Missing the required parameter `shr_token` when calling `get_share_detail`") # noqa: E501 + # verify the required parameter 'share_token' is set + if ('share_token' not in params or + params['share_token'] is None): + raise ValueError("Missing the required parameter `share_token` when calling `get_share_detail`") # noqa: E501 collection_formats = {} path_params = {} - if 'shr_token' in params: - path_params['shrToken'] = params['shr_token'] # noqa: E501 + if 'share_token' in params: + path_params['shareToken'] = params['share_token'] # noqa: E501 query_params = [] @@ -652,7 +745,7 @@ class MetadataApi(object): auth_settings = ['key'] # noqa: E501 return self.api_client.call_api( - '/detail/share/{shrToken}', 'GET', + '/detail/share/{shareToken}', 'GET', path_params, query_params, header_params, @@ -667,16 +760,16 @@ class MetadataApi(object): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) - def get_share_metrics(self, shr_token, **kwargs): # noqa: E501 + def get_share_metrics(self, share_token, **kwargs): # noqa: E501 """get_share_metrics # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_share_metrics(shr_token, async_req=True) + >>> thread = api.get_share_metrics(share_token, async_req=True) >>> result = thread.get() :param async_req bool - :param str shr_token: (required) + :param str share_token: (required) :param str duration: :return: Metrics If the method is called asynchronously, @@ -684,28 +777,28 @@ class MetadataApi(object): """ kwargs['_return_http_data_only'] = True if kwargs.get('async_req'): - return self.get_share_metrics_with_http_info(shr_token, **kwargs) # noqa: E501 + return self.get_share_metrics_with_http_info(share_token, **kwargs) # noqa: E501 else: - (data) = self.get_share_metrics_with_http_info(shr_token, **kwargs) # noqa: E501 + (data) = self.get_share_metrics_with_http_info(share_token, **kwargs) # noqa: E501 return data - def get_share_metrics_with_http_info(self, shr_token, **kwargs): # noqa: E501 + def get_share_metrics_with_http_info(self, share_token, **kwargs): # noqa: E501 """get_share_metrics # noqa: E501 This method makes a synchronous HTTP request by default. To make an asynchronous HTTP request, please pass async_req=True - >>> thread = api.get_share_metrics_with_http_info(shr_token, async_req=True) + >>> thread = api.get_share_metrics_with_http_info(share_token, async_req=True) >>> result = thread.get() :param async_req bool - :param str shr_token: (required) + :param str share_token: (required) :param str duration: :return: Metrics If the method is called asynchronously, returns the request thread. """ - all_params = ['shr_token', 'duration'] # noqa: E501 + all_params = ['share_token', 'duration'] # noqa: E501 all_params.append('async_req') all_params.append('_return_http_data_only') all_params.append('_preload_content') @@ -720,16 +813,16 @@ class MetadataApi(object): ) params[key] = val del params['kwargs'] - # verify the required parameter 'shr_token' is set - if ('shr_token' not in params or - params['shr_token'] is None): - raise ValueError("Missing the required parameter `shr_token` when calling `get_share_metrics`") # noqa: E501 + # verify the required parameter 'share_token' is set + if ('share_token' not in params or + params['share_token'] is None): + raise ValueError("Missing the required parameter `share_token` when calling `get_share_metrics`") # noqa: E501 collection_formats = {} path_params = {} - if 'shr_token' in params: - path_params['shrToken'] = params['shr_token'] # noqa: E501 + if 'share_token' in params: + path_params['shareToken'] = params['share_token'] # noqa: E501 query_params = [] if 'duration' in params: @@ -749,7 +842,7 @@ class MetadataApi(object): auth_settings = ['key'] # noqa: E501 return self.api_client.call_api( - '/metrics/share/{shrToken}', 'GET', + '/metrics/share/{shareToken}', 'GET', path_params, query_params, header_params, @@ -764,6 +857,99 @@ class MetadataApi(object): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) + def get_sparklines(self, **kwargs): # noqa: E501 + """get_sparklines # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.get_sparklines(async_req=True) + >>> result = thread.get() + + :param async_req bool + :param SparklinesBody body: + :return: InlineResponse2006 + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('async_req'): + return self.get_sparklines_with_http_info(**kwargs) # noqa: E501 + else: + (data) = self.get_sparklines_with_http_info(**kwargs) # noqa: E501 + return data + + def get_sparklines_with_http_info(self, **kwargs): # noqa: E501 + """get_sparklines # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.get_sparklines_with_http_info(async_req=True) + >>> result = thread.get() + + :param async_req bool + :param SparklinesBody body: + :return: InlineResponse2006 + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['body'] # noqa: E501 + all_params.append('async_req') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in six.iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method get_sparklines" % key + ) + params[key] = val + del params['kwargs'] + + collection_formats = {} + + path_params = {} + + query_params = [] + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + if 'body' in params: + body_params = params['body'] + # HTTP header `Accept` + header_params['Accept'] = self.api_client.select_header_accept( + ['application/zrok.v1+json']) # noqa: E501 + + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 + ['application/zrok.v1+json']) # noqa: E501 + + # Authentication setting + auth_settings = ['key'] # noqa: E501 + + return self.api_client.call_api( + '/sparklines', 'POST', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type='InlineResponse2006', # noqa: E501 + auth_settings=auth_settings, + async_req=params.get('async_req'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + def list_memberships(self, **kwargs): # noqa: E501 """list_memberships # noqa: E501 @@ -773,7 +959,7 @@ class MetadataApi(object): >>> result = thread.get() :param async_req bool - :return: InlineResponse2003 + :return: InlineResponse2005 If the method is called asynchronously, returns the request thread. """ @@ -793,7 +979,7 @@ class MetadataApi(object): >>> result = thread.get() :param async_req bool - :return: InlineResponse2003 + :return: InlineResponse2005 If the method is called asynchronously, returns the request thread. """ @@ -841,7 +1027,7 @@ class MetadataApi(object): body=body_params, post_params=form_params, files=local_var_files, - response_type='InlineResponse2003', # noqa: E501 + response_type='InlineResponse2005', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -859,7 +1045,7 @@ class MetadataApi(object): :param async_req bool :param str organization_token: (required) - :return: InlineResponse2001 + :return: InlineResponse2003 If the method is called asynchronously, returns the request thread. """ @@ -880,7 +1066,7 @@ class MetadataApi(object): :param async_req bool :param str organization_token: (required) - :return: InlineResponse2001 + :return: InlineResponse2003 If the method is called asynchronously, returns the request thread. """ @@ -934,7 +1120,7 @@ class MetadataApi(object): body=body_params, post_params=form_params, files=local_var_files, - response_type='InlineResponse2001', # noqa: E501 + response_type='InlineResponse2003', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), diff --git a/sdk/python/sdk/zrok/zrok_api/api/share_api.py b/sdk/python/sdk/zrok/zrok_api/api/share_api.py index 647e6369..49362e17 100644 --- a/sdk/python/sdk/zrok/zrok_api/api/share_api.py +++ b/sdk/python/sdk/zrok/zrok_api/api/share_api.py @@ -5,7 +5,7 @@ zrok client access # noqa: E501 - OpenAPI spec version: 0.3.0 + OpenAPI spec version: 1.0.0 Generated by: https://github.com/swagger-api/swagger-codegen.git """ @@ -41,8 +41,8 @@ class ShareApi(object): >>> result = thread.get() :param async_req bool - :param AccessRequest body: - :return: AccessResponse + :param AccessBody body: + :return: InlineResponse2013 If the method is called asynchronously, returns the request thread. """ @@ -62,8 +62,8 @@ class ShareApi(object): >>> result = thread.get() :param async_req bool - :param AccessRequest body: - :return: AccessResponse + :param AccessBody body: + :return: InlineResponse2013 If the method is called asynchronously, returns the request thread. """ @@ -117,7 +117,7 @@ class ShareApi(object): body=body_params, post_params=form_params, files=local_var_files, - response_type='AccessResponse', # noqa: E501 + response_type='InlineResponse2013', # noqa: E501 auth_settings=auth_settings, async_req=params.get('async_req'), _return_http_data_only=params.get('_return_http_data_only'), @@ -227,7 +227,7 @@ class ShareApi(object): >>> result = thread.get() :param async_req bool - :param UnaccessRequest body: + :param UnaccessBody body: :return: None If the method is called asynchronously, returns the request thread. @@ -248,7 +248,7 @@ class ShareApi(object): >>> result = thread.get() :param async_req bool - :param UnaccessRequest body: + :param UnaccessBody body: :return: None If the method is called asynchronously, returns the request thread. @@ -316,7 +316,7 @@ class ShareApi(object): >>> result = thread.get() :param async_req bool - :param UnshareRequest body: + :param UnshareBody body: :return: None If the method is called asynchronously, returns the request thread. @@ -337,7 +337,7 @@ class ShareApi(object): >>> result = thread.get() :param async_req bool - :param UnshareRequest body: + :param UnshareBody body: :return: None If the method is called asynchronously, returns the request thread. @@ -400,6 +400,95 @@ class ShareApi(object): _request_timeout=params.get('_request_timeout'), collection_formats=collection_formats) + def update_access(self, **kwargs): # noqa: E501 + """update_access # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.update_access(async_req=True) + >>> result = thread.get() + + :param async_req bool + :param AccessBody1 body: + :return: None + If the method is called asynchronously, + returns the request thread. + """ + kwargs['_return_http_data_only'] = True + if kwargs.get('async_req'): + return self.update_access_with_http_info(**kwargs) # noqa: E501 + else: + (data) = self.update_access_with_http_info(**kwargs) # noqa: E501 + return data + + def update_access_with_http_info(self, **kwargs): # noqa: E501 + """update_access # noqa: E501 + + This method makes a synchronous HTTP request by default. To make an + asynchronous HTTP request, please pass async_req=True + >>> thread = api.update_access_with_http_info(async_req=True) + >>> result = thread.get() + + :param async_req bool + :param AccessBody1 body: + :return: None + If the method is called asynchronously, + returns the request thread. + """ + + all_params = ['body'] # noqa: E501 + all_params.append('async_req') + all_params.append('_return_http_data_only') + all_params.append('_preload_content') + all_params.append('_request_timeout') + + params = locals() + for key, val in six.iteritems(params['kwargs']): + if key not in all_params: + raise TypeError( + "Got an unexpected keyword argument '%s'" + " to method update_access" % key + ) + params[key] = val + del params['kwargs'] + + collection_formats = {} + + path_params = {} + + query_params = [] + + header_params = {} + + form_params = [] + local_var_files = {} + + body_params = None + if 'body' in params: + body_params = params['body'] + # HTTP header `Content-Type` + header_params['Content-Type'] = self.api_client.select_header_content_type( # noqa: E501 + ['application/zrok.v1+json']) # noqa: E501 + + # Authentication setting + auth_settings = ['key'] # noqa: E501 + + return self.api_client.call_api( + '/access', 'PATCH', + path_params, + query_params, + header_params, + body=body_params, + post_params=form_params, + files=local_var_files, + response_type=None, # noqa: E501 + auth_settings=auth_settings, + async_req=params.get('async_req'), + _return_http_data_only=params.get('_return_http_data_only'), + _preload_content=params.get('_preload_content', True), + _request_timeout=params.get('_request_timeout'), + collection_formats=collection_formats) + def update_share(self, **kwargs): # noqa: E501 """update_share # noqa: E501 @@ -409,7 +498,7 @@ class ShareApi(object): >>> result = thread.get() :param async_req bool - :param UpdateShareRequest body: + :param ShareBody body: :return: None If the method is called asynchronously, returns the request thread. @@ -430,7 +519,7 @@ class ShareApi(object): >>> result = thread.get() :param async_req bool - :param UpdateShareRequest body: + :param ShareBody body: :return: None If the method is called asynchronously, returns the request thread. diff --git a/sdk/python/sdk/zrok/zrok_api/api_client.py b/sdk/python/sdk/zrok/zrok_api/api_client.py index 763a3bb5..f917a79b 100644 --- a/sdk/python/sdk/zrok/zrok_api/api_client.py +++ b/sdk/python/sdk/zrok/zrok_api/api_client.py @@ -4,7 +4,7 @@ zrok client access # noqa: E501 - OpenAPI spec version: 0.3.0 + OpenAPI spec version: 1.0.0 Generated by: https://github.com/swagger-api/swagger-codegen.git """ diff --git a/sdk/python/sdk/zrok/zrok_api/configuration.py b/sdk/python/sdk/zrok/zrok_api/configuration.py index 9fd585c4..331c27b7 100644 --- a/sdk/python/sdk/zrok/zrok_api/configuration.py +++ b/sdk/python/sdk/zrok/zrok_api/configuration.py @@ -5,7 +5,7 @@ zrok client access # noqa: E501 - OpenAPI spec version: 0.3.0 + OpenAPI spec version: 1.0.0 Generated by: https://github.com/swagger-api/swagger-codegen.git """ @@ -246,6 +246,6 @@ class Configuration(six.with_metaclass(TypeWithDefault, object)): return "Python SDK Debug Report:\n"\ "OS: {env}\n"\ "Python Version: {pyversion}\n"\ - "Version of the API: 0.3.0\n"\ + "Version of the API: 1.0.0\n"\ "SDK Package Version: 1.0.0".\ format(env=sys.platform, pyversion=sys.version) diff --git a/sdk/python/sdk/zrok/zrok_api/models/__init__.py b/sdk/python/sdk/zrok/zrok_api/models/__init__.py index fff66b79..edd3c443 100644 --- a/sdk/python/sdk/zrok/zrok_api/models/__init__.py +++ b/sdk/python/sdk/zrok/zrok_api/models/__init__.py @@ -6,7 +6,7 @@ zrok client access # noqa: E501 - OpenAPI spec version: 0.3.0 + OpenAPI spec version: 1.0.0 Generated by: https://github.com/swagger-api/swagger-codegen.git """ @@ -14,38 +14,41 @@ from __future__ import absolute_import # import models into model package -from zrok_api.models.access_request import AccessRequest -from zrok_api.models.access_response import AccessResponse +from zrok_api.models.access_body import AccessBody +from zrok_api.models.access_body1 import AccessBody1 from zrok_api.models.account_body import AccountBody from zrok_api.models.auth_user import AuthUser -from zrok_api.models.change_password_request import ChangePasswordRequest +from zrok_api.models.change_password_body import ChangePasswordBody from zrok_api.models.configuration import Configuration -from zrok_api.models.create_frontend_request import CreateFrontendRequest -from zrok_api.models.create_frontend_response import CreateFrontendResponse -from zrok_api.models.delete_frontend_request import DeleteFrontendRequest -from zrok_api.models.disable_request import DisableRequest -from zrok_api.models.enable_request import EnableRequest -from zrok_api.models.enable_response import EnableResponse +from zrok_api.models.disable_body import DisableBody +from zrok_api.models.enable_body import EnableBody from zrok_api.models.environment import Environment from zrok_api.models.environment_and_resources import EnvironmentAndResources from zrok_api.models.environments import Environments from zrok_api.models.error_message import ErrorMessage from zrok_api.models.frontend import Frontend +from zrok_api.models.frontend_body import FrontendBody +from zrok_api.models.frontend_body1 import FrontendBody1 +from zrok_api.models.frontend_body2 import FrontendBody2 from zrok_api.models.frontends import Frontends from zrok_api.models.grants_body import GrantsBody from zrok_api.models.identity_body import IdentityBody from zrok_api.models.inline_response200 import InlineResponse200 from zrok_api.models.inline_response2001 import InlineResponse2001 -from zrok_api.models.inline_response2001_members import InlineResponse2001Members from zrok_api.models.inline_response2002 import InlineResponse2002 -from zrok_api.models.inline_response2002_organizations import InlineResponse2002Organizations from zrok_api.models.inline_response2003 import InlineResponse2003 -from zrok_api.models.inline_response2003_memberships import InlineResponse2003Memberships +from zrok_api.models.inline_response2003_members import InlineResponse2003Members +from zrok_api.models.inline_response2004 import InlineResponse2004 +from zrok_api.models.inline_response2004_organizations import InlineResponse2004Organizations +from zrok_api.models.inline_response2005 import InlineResponse2005 +from zrok_api.models.inline_response2005_memberships import InlineResponse2005Memberships +from zrok_api.models.inline_response2006 import InlineResponse2006 from zrok_api.models.inline_response201 import InlineResponse201 -from zrok_api.models.invite_request import InviteRequest -from zrok_api.models.invite_token_generate_request import InviteTokenGenerateRequest -from zrok_api.models.login_request import LoginRequest -from zrok_api.models.login_response import LoginResponse +from zrok_api.models.inline_response2011 import InlineResponse2011 +from zrok_api.models.inline_response2012 import InlineResponse2012 +from zrok_api.models.inline_response2013 import InlineResponse2013 +from zrok_api.models.invite_body import InviteBody +from zrok_api.models.login_body import LoginBody from zrok_api.models.metrics import Metrics from zrok_api.models.metrics_sample import MetricsSample from zrok_api.models.organization_add_body import OrganizationAddBody @@ -54,25 +57,22 @@ from zrok_api.models.organization_body1 import OrganizationBody1 from zrok_api.models.organization_list_body import OrganizationListBody from zrok_api.models.organization_remove_body import OrganizationRemoveBody from zrok_api.models.overview import Overview -from zrok_api.models.password_requirements import PasswordRequirements from zrok_api.models.principal import Principal -from zrok_api.models.public_frontend import PublicFrontend -from zrok_api.models.public_frontend_list import PublicFrontendList -from zrok_api.models.regenerate_token_body import RegenerateTokenBody -from zrok_api.models.register_request import RegisterRequest -from zrok_api.models.register_response import RegisterResponse -from zrok_api.models.reset_password_request import ResetPasswordRequest +from zrok_api.models.regenerate_account_token_body import RegenerateAccountTokenBody +from zrok_api.models.register_body import RegisterBody +from zrok_api.models.reset_password_body import ResetPasswordBody from zrok_api.models.reset_password_request_body import ResetPasswordRequestBody from zrok_api.models.share import Share +from zrok_api.models.share_body import ShareBody from zrok_api.models.share_request import ShareRequest from zrok_api.models.share_response import ShareResponse from zrok_api.models.shares import Shares from zrok_api.models.spark_data import SparkData from zrok_api.models.spark_data_sample import SparkDataSample -from zrok_api.models.unaccess_request import UnaccessRequest -from zrok_api.models.unshare_request import UnshareRequest -from zrok_api.models.update_frontend_request import UpdateFrontendRequest -from zrok_api.models.update_share_request import UpdateShareRequest -from zrok_api.models.verify_request import VerifyRequest -from zrok_api.models.verify_response import VerifyResponse +from zrok_api.models.sparklines_body import SparklinesBody +from zrok_api.models.token_generate_body import TokenGenerateBody +from zrok_api.models.unaccess_body import UnaccessBody +from zrok_api.models.unshare_body import UnshareBody +from zrok_api.models.verify_body import VerifyBody from zrok_api.models.version import Version +from zrok_api.models.version_body import VersionBody diff --git a/sdk/python/sdk/zrok/zrok_api/models/access_body.py b/sdk/python/sdk/zrok/zrok_api/models/access_body.py new file mode 100644 index 00000000..ca0ded7f --- /dev/null +++ b/sdk/python/sdk/zrok/zrok_api/models/access_body.py @@ -0,0 +1,188 @@ +# coding: utf-8 + +""" + zrok + + zrok client access # noqa: E501 + + OpenAPI spec version: 1.0.0 + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +import pprint +import re # noqa: F401 + +import six + +class AccessBody(object): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + """ + Attributes: + swagger_types (dict): The key is attribute name + and the value is attribute type. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + """ + swagger_types = { + 'env_zid': 'str', + 'share_token': 'str', + 'bind_address': 'str', + 'description': 'str' + } + + attribute_map = { + 'env_zid': 'envZId', + 'share_token': 'shareToken', + 'bind_address': 'bindAddress', + 'description': 'description' + } + + def __init__(self, env_zid=None, share_token=None, bind_address=None, description=None): # noqa: E501 + """AccessBody - a model defined in Swagger""" # noqa: E501 + self._env_zid = None + self._share_token = None + self._bind_address = None + self._description = None + self.discriminator = None + if env_zid is not None: + self.env_zid = env_zid + if share_token is not None: + self.share_token = share_token + if bind_address is not None: + self.bind_address = bind_address + if description is not None: + self.description = description + + @property + def env_zid(self): + """Gets the env_zid of this AccessBody. # noqa: E501 + + + :return: The env_zid of this AccessBody. # noqa: E501 + :rtype: str + """ + return self._env_zid + + @env_zid.setter + def env_zid(self, env_zid): + """Sets the env_zid of this AccessBody. + + + :param env_zid: The env_zid of this AccessBody. # noqa: E501 + :type: str + """ + + self._env_zid = env_zid + + @property + def share_token(self): + """Gets the share_token of this AccessBody. # noqa: E501 + + + :return: The share_token of this AccessBody. # noqa: E501 + :rtype: str + """ + return self._share_token + + @share_token.setter + def share_token(self, share_token): + """Sets the share_token of this AccessBody. + + + :param share_token: The share_token of this AccessBody. # noqa: E501 + :type: str + """ + + self._share_token = share_token + + @property + def bind_address(self): + """Gets the bind_address of this AccessBody. # noqa: E501 + + + :return: The bind_address of this AccessBody. # noqa: E501 + :rtype: str + """ + return self._bind_address + + @bind_address.setter + def bind_address(self, bind_address): + """Sets the bind_address of this AccessBody. + + + :param bind_address: The bind_address of this AccessBody. # noqa: E501 + :type: str + """ + + self._bind_address = bind_address + + @property + def description(self): + """Gets the description of this AccessBody. # noqa: E501 + + + :return: The description of this AccessBody. # noqa: E501 + :rtype: str + """ + return self._description + + @description.setter + def description(self, description): + """Sets the description of this AccessBody. + + + :param description: The description of this AccessBody. # noqa: E501 + :type: str + """ + + self._description = description + + def to_dict(self): + """Returns the model properties as a dict""" + result = {} + + for attr, _ in six.iteritems(self.swagger_types): + value = getattr(self, attr) + if isinstance(value, list): + result[attr] = list(map( + lambda x: x.to_dict() if hasattr(x, "to_dict") else x, + value + )) + elif hasattr(value, "to_dict"): + result[attr] = value.to_dict() + elif isinstance(value, dict): + result[attr] = dict(map( + lambda item: (item[0], item[1].to_dict()) + if hasattr(item[1], "to_dict") else item, + value.items() + )) + else: + result[attr] = value + if issubclass(AccessBody, dict): + for key, value in self.items(): + result[key] = value + + return result + + def to_str(self): + """Returns the string representation of the model""" + return pprint.pformat(self.to_dict()) + + def __repr__(self): + """For `print` and `pprint`""" + return self.to_str() + + def __eq__(self, other): + """Returns true if both objects are equal""" + if not isinstance(other, AccessBody): + return False + + return self.__dict__ == other.__dict__ + + def __ne__(self, other): + """Returns true if both objects are not equal""" + return not self == other diff --git a/sdk/python/sdk/zrok/zrok_api/models/access_body1.py b/sdk/python/sdk/zrok/zrok_api/models/access_body1.py new file mode 100644 index 00000000..97855ec4 --- /dev/null +++ b/sdk/python/sdk/zrok/zrok_api/models/access_body1.py @@ -0,0 +1,162 @@ +# coding: utf-8 + +""" + zrok + + zrok client access # noqa: E501 + + OpenAPI spec version: 1.0.0 + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +import pprint +import re # noqa: F401 + +import six + +class AccessBody1(object): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + """ + Attributes: + swagger_types (dict): The key is attribute name + and the value is attribute type. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + """ + swagger_types = { + 'frontend_token': 'str', + 'bind_address': 'str', + 'description': 'str' + } + + attribute_map = { + 'frontend_token': 'frontendToken', + 'bind_address': 'bindAddress', + 'description': 'description' + } + + def __init__(self, frontend_token=None, bind_address=None, description=None): # noqa: E501 + """AccessBody1 - a model defined in Swagger""" # noqa: E501 + self._frontend_token = None + self._bind_address = None + self._description = None + self.discriminator = None + if frontend_token is not None: + self.frontend_token = frontend_token + if bind_address is not None: + self.bind_address = bind_address + if description is not None: + self.description = description + + @property + def frontend_token(self): + """Gets the frontend_token of this AccessBody1. # noqa: E501 + + + :return: The frontend_token of this AccessBody1. # noqa: E501 + :rtype: str + """ + return self._frontend_token + + @frontend_token.setter + def frontend_token(self, frontend_token): + """Sets the frontend_token of this AccessBody1. + + + :param frontend_token: The frontend_token of this AccessBody1. # noqa: E501 + :type: str + """ + + self._frontend_token = frontend_token + + @property + def bind_address(self): + """Gets the bind_address of this AccessBody1. # noqa: E501 + + + :return: The bind_address of this AccessBody1. # noqa: E501 + :rtype: str + """ + return self._bind_address + + @bind_address.setter + def bind_address(self, bind_address): + """Sets the bind_address of this AccessBody1. + + + :param bind_address: The bind_address of this AccessBody1. # noqa: E501 + :type: str + """ + + self._bind_address = bind_address + + @property + def description(self): + """Gets the description of this AccessBody1. # noqa: E501 + + + :return: The description of this AccessBody1. # noqa: E501 + :rtype: str + """ + return self._description + + @description.setter + def description(self, description): + """Sets the description of this AccessBody1. + + + :param description: The description of this AccessBody1. # noqa: E501 + :type: str + """ + + self._description = description + + def to_dict(self): + """Returns the model properties as a dict""" + result = {} + + for attr, _ in six.iteritems(self.swagger_types): + value = getattr(self, attr) + if isinstance(value, list): + result[attr] = list(map( + lambda x: x.to_dict() if hasattr(x, "to_dict") else x, + value + )) + elif hasattr(value, "to_dict"): + result[attr] = value.to_dict() + elif isinstance(value, dict): + result[attr] = dict(map( + lambda item: (item[0], item[1].to_dict()) + if hasattr(item[1], "to_dict") else item, + value.items() + )) + else: + result[attr] = value + if issubclass(AccessBody1, dict): + for key, value in self.items(): + result[key] = value + + return result + + def to_str(self): + """Returns the string representation of the model""" + return pprint.pformat(self.to_dict()) + + def __repr__(self): + """For `print` and `pprint`""" + return self.to_str() + + def __eq__(self, other): + """Returns true if both objects are equal""" + if not isinstance(other, AccessBody1): + return False + + return self.__dict__ == other.__dict__ + + def __ne__(self, other): + """Returns true if both objects are not equal""" + return not self == other diff --git a/sdk/python/sdk/zrok/zrok_api/models/access_request.py b/sdk/python/sdk/zrok/zrok_api/models/access_request.py deleted file mode 100644 index e51ea20a..00000000 --- a/sdk/python/sdk/zrok/zrok_api/models/access_request.py +++ /dev/null @@ -1,136 +0,0 @@ -# coding: utf-8 - -""" - zrok - - zrok client access # noqa: E501 - - OpenAPI spec version: 0.3.0 - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - -class AccessRequest(object): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = { - 'env_zid': 'str', - 'shr_token': 'str' - } - - attribute_map = { - 'env_zid': 'envZId', - 'shr_token': 'shrToken' - } - - def __init__(self, env_zid=None, shr_token=None): # noqa: E501 - """AccessRequest - a model defined in Swagger""" # noqa: E501 - self._env_zid = None - self._shr_token = None - self.discriminator = None - if env_zid is not None: - self.env_zid = env_zid - if shr_token is not None: - self.shr_token = shr_token - - @property - def env_zid(self): - """Gets the env_zid of this AccessRequest. # noqa: E501 - - - :return: The env_zid of this AccessRequest. # noqa: E501 - :rtype: str - """ - return self._env_zid - - @env_zid.setter - def env_zid(self, env_zid): - """Sets the env_zid of this AccessRequest. - - - :param env_zid: The env_zid of this AccessRequest. # noqa: E501 - :type: str - """ - - self._env_zid = env_zid - - @property - def shr_token(self): - """Gets the shr_token of this AccessRequest. # noqa: E501 - - - :return: The shr_token of this AccessRequest. # noqa: E501 - :rtype: str - """ - return self._shr_token - - @shr_token.setter - def shr_token(self, shr_token): - """Sets the shr_token of this AccessRequest. - - - :param shr_token: The shr_token of this AccessRequest. # noqa: E501 - :type: str - """ - - self._shr_token = shr_token - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list(map( - lambda x: x.to_dict() if hasattr(x, "to_dict") else x, - value - )) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict(map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") else item, - value.items() - )) - else: - result[attr] = value - if issubclass(AccessRequest, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, AccessRequest): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/sdk/python/sdk/zrok/zrok_api/models/account_body.py b/sdk/python/sdk/zrok/zrok_api/models/account_body.py index 2447dea1..ea261eb0 100644 --- a/sdk/python/sdk/zrok/zrok_api/models/account_body.py +++ b/sdk/python/sdk/zrok/zrok_api/models/account_body.py @@ -5,7 +5,7 @@ zrok client access # noqa: E501 - OpenAPI spec version: 0.3.0 + OpenAPI spec version: 1.0.0 Generated by: https://github.com/swagger-api/swagger-codegen.git """ diff --git a/sdk/python/sdk/zrok/zrok_api/models/auth_user.py b/sdk/python/sdk/zrok/zrok_api/models/auth_user.py index a3b6eaf2..0a04dc10 100644 --- a/sdk/python/sdk/zrok/zrok_api/models/auth_user.py +++ b/sdk/python/sdk/zrok/zrok_api/models/auth_user.py @@ -5,7 +5,7 @@ zrok client access # noqa: E501 - OpenAPI spec version: 0.3.0 + OpenAPI spec version: 1.0.0 Generated by: https://github.com/swagger-api/swagger-codegen.git """ diff --git a/sdk/python/sdk/zrok/zrok_api/models/change_password_request.py b/sdk/python/sdk/zrok/zrok_api/models/change_password_body.py similarity index 77% rename from sdk/python/sdk/zrok/zrok_api/models/change_password_request.py rename to sdk/python/sdk/zrok/zrok_api/models/change_password_body.py index fe3f4862..8c12afb1 100644 --- a/sdk/python/sdk/zrok/zrok_api/models/change_password_request.py +++ b/sdk/python/sdk/zrok/zrok_api/models/change_password_body.py @@ -5,7 +5,7 @@ zrok client access # noqa: E501 - OpenAPI spec version: 0.3.0 + OpenAPI spec version: 1.0.0 Generated by: https://github.com/swagger-api/swagger-codegen.git """ @@ -15,7 +15,7 @@ import re # noqa: F401 import six -class ChangePasswordRequest(object): +class ChangePasswordBody(object): """NOTE: This class is auto generated by the swagger code generator program. Do not edit the class manually. @@ -40,7 +40,7 @@ class ChangePasswordRequest(object): } def __init__(self, email=None, old_password=None, new_password=None): # noqa: E501 - """ChangePasswordRequest - a model defined in Swagger""" # noqa: E501 + """ChangePasswordBody - a model defined in Swagger""" # noqa: E501 self._email = None self._old_password = None self._new_password = None @@ -54,20 +54,20 @@ class ChangePasswordRequest(object): @property def email(self): - """Gets the email of this ChangePasswordRequest. # noqa: E501 + """Gets the email of this ChangePasswordBody. # noqa: E501 - :return: The email of this ChangePasswordRequest. # noqa: E501 + :return: The email of this ChangePasswordBody. # noqa: E501 :rtype: str """ return self._email @email.setter def email(self, email): - """Sets the email of this ChangePasswordRequest. + """Sets the email of this ChangePasswordBody. - :param email: The email of this ChangePasswordRequest. # noqa: E501 + :param email: The email of this ChangePasswordBody. # noqa: E501 :type: str """ @@ -75,20 +75,20 @@ class ChangePasswordRequest(object): @property def old_password(self): - """Gets the old_password of this ChangePasswordRequest. # noqa: E501 + """Gets the old_password of this ChangePasswordBody. # noqa: E501 - :return: The old_password of this ChangePasswordRequest. # noqa: E501 + :return: The old_password of this ChangePasswordBody. # noqa: E501 :rtype: str """ return self._old_password @old_password.setter def old_password(self, old_password): - """Sets the old_password of this ChangePasswordRequest. + """Sets the old_password of this ChangePasswordBody. - :param old_password: The old_password of this ChangePasswordRequest. # noqa: E501 + :param old_password: The old_password of this ChangePasswordBody. # noqa: E501 :type: str """ @@ -96,20 +96,20 @@ class ChangePasswordRequest(object): @property def new_password(self): - """Gets the new_password of this ChangePasswordRequest. # noqa: E501 + """Gets the new_password of this ChangePasswordBody. # noqa: E501 - :return: The new_password of this ChangePasswordRequest. # noqa: E501 + :return: The new_password of this ChangePasswordBody. # noqa: E501 :rtype: str """ return self._new_password @new_password.setter def new_password(self, new_password): - """Sets the new_password of this ChangePasswordRequest. + """Sets the new_password of this ChangePasswordBody. - :param new_password: The new_password of this ChangePasswordRequest. # noqa: E501 + :param new_password: The new_password of this ChangePasswordBody. # noqa: E501 :type: str """ @@ -136,7 +136,7 @@ class ChangePasswordRequest(object): )) else: result[attr] = value - if issubclass(ChangePasswordRequest, dict): + if issubclass(ChangePasswordBody, dict): for key, value in self.items(): result[key] = value @@ -152,7 +152,7 @@ class ChangePasswordRequest(object): def __eq__(self, other): """Returns true if both objects are equal""" - if not isinstance(other, ChangePasswordRequest): + if not isinstance(other, ChangePasswordBody): return False return self.__dict__ == other.__dict__ diff --git a/sdk/python/sdk/zrok/zrok_api/models/configuration.py b/sdk/python/sdk/zrok/zrok_api/models/configuration.py index 20a1f0c5..6f1f70b5 100644 --- a/sdk/python/sdk/zrok/zrok_api/models/configuration.py +++ b/sdk/python/sdk/zrok/zrok_api/models/configuration.py @@ -5,7 +5,7 @@ zrok client access # noqa: E501 - OpenAPI spec version: 0.3.0 + OpenAPI spec version: 1.0.0 Generated by: https://github.com/swagger-api/swagger-codegen.git """ @@ -32,8 +32,7 @@ class Configuration(object): 'tou_link': 'str', 'invites_open': 'bool', 'requires_invite_token': 'bool', - 'invite_token_contact': 'str', - 'password_requirements': 'PasswordRequirements' + 'invite_token_contact': 'str' } attribute_map = { @@ -41,18 +40,16 @@ class Configuration(object): 'tou_link': 'touLink', 'invites_open': 'invitesOpen', 'requires_invite_token': 'requiresInviteToken', - 'invite_token_contact': 'inviteTokenContact', - 'password_requirements': 'passwordRequirements' + 'invite_token_contact': 'inviteTokenContact' } - def __init__(self, version=None, tou_link=None, invites_open=None, requires_invite_token=None, invite_token_contact=None, password_requirements=None): # noqa: E501 + def __init__(self, version=None, tou_link=None, invites_open=None, requires_invite_token=None, invite_token_contact=None): # noqa: E501 """Configuration - a model defined in Swagger""" # noqa: E501 self._version = None self._tou_link = None self._invites_open = None self._requires_invite_token = None self._invite_token_contact = None - self._password_requirements = None self.discriminator = None if version is not None: self.version = version @@ -64,8 +61,6 @@ class Configuration(object): self.requires_invite_token = requires_invite_token if invite_token_contact is not None: self.invite_token_contact = invite_token_contact - if password_requirements is not None: - self.password_requirements = password_requirements @property def version(self): @@ -172,27 +167,6 @@ class Configuration(object): self._invite_token_contact = invite_token_contact - @property - def password_requirements(self): - """Gets the password_requirements of this Configuration. # noqa: E501 - - - :return: The password_requirements of this Configuration. # noqa: E501 - :rtype: PasswordRequirements - """ - return self._password_requirements - - @password_requirements.setter - def password_requirements(self, password_requirements): - """Sets the password_requirements of this Configuration. - - - :param password_requirements: The password_requirements of this Configuration. # noqa: E501 - :type: PasswordRequirements - """ - - self._password_requirements = password_requirements - def to_dict(self): """Returns the model properties as a dict""" result = {} diff --git a/sdk/python/sdk/zrok/zrok_api/models/disable_request.py b/sdk/python/sdk/zrok/zrok_api/models/disable_body.py similarity index 83% rename from sdk/python/sdk/zrok/zrok_api/models/disable_request.py rename to sdk/python/sdk/zrok/zrok_api/models/disable_body.py index c0450256..bfb40a4a 100644 --- a/sdk/python/sdk/zrok/zrok_api/models/disable_request.py +++ b/sdk/python/sdk/zrok/zrok_api/models/disable_body.py @@ -5,7 +5,7 @@ zrok client access # noqa: E501 - OpenAPI spec version: 0.3.0 + OpenAPI spec version: 1.0.0 Generated by: https://github.com/swagger-api/swagger-codegen.git """ @@ -15,7 +15,7 @@ import re # noqa: F401 import six -class DisableRequest(object): +class DisableBody(object): """NOTE: This class is auto generated by the swagger code generator program. Do not edit the class manually. @@ -36,7 +36,7 @@ class DisableRequest(object): } def __init__(self, identity=None): # noqa: E501 - """DisableRequest - a model defined in Swagger""" # noqa: E501 + """DisableBody - a model defined in Swagger""" # noqa: E501 self._identity = None self.discriminator = None if identity is not None: @@ -44,20 +44,20 @@ class DisableRequest(object): @property def identity(self): - """Gets the identity of this DisableRequest. # noqa: E501 + """Gets the identity of this DisableBody. # noqa: E501 - :return: The identity of this DisableRequest. # noqa: E501 + :return: The identity of this DisableBody. # noqa: E501 :rtype: str """ return self._identity @identity.setter def identity(self, identity): - """Sets the identity of this DisableRequest. + """Sets the identity of this DisableBody. - :param identity: The identity of this DisableRequest. # noqa: E501 + :param identity: The identity of this DisableBody. # noqa: E501 :type: str """ @@ -84,7 +84,7 @@ class DisableRequest(object): )) else: result[attr] = value - if issubclass(DisableRequest, dict): + if issubclass(DisableBody, dict): for key, value in self.items(): result[key] = value @@ -100,7 +100,7 @@ class DisableRequest(object): def __eq__(self, other): """Returns true if both objects are equal""" - if not isinstance(other, DisableRequest): + if not isinstance(other, DisableBody): return False return self.__dict__ == other.__dict__ diff --git a/sdk/python/sdk/zrok/zrok_api/models/enable_request.py b/sdk/python/sdk/zrok/zrok_api/models/enable_body.py similarity index 79% rename from sdk/python/sdk/zrok/zrok_api/models/enable_request.py rename to sdk/python/sdk/zrok/zrok_api/models/enable_body.py index 6d35968f..49ac0279 100644 --- a/sdk/python/sdk/zrok/zrok_api/models/enable_request.py +++ b/sdk/python/sdk/zrok/zrok_api/models/enable_body.py @@ -5,7 +5,7 @@ zrok client access # noqa: E501 - OpenAPI spec version: 0.3.0 + OpenAPI spec version: 1.0.0 Generated by: https://github.com/swagger-api/swagger-codegen.git """ @@ -15,7 +15,7 @@ import re # noqa: F401 import six -class EnableRequest(object): +class EnableBody(object): """NOTE: This class is auto generated by the swagger code generator program. Do not edit the class manually. @@ -38,7 +38,7 @@ class EnableRequest(object): } def __init__(self, description=None, host=None): # noqa: E501 - """EnableRequest - a model defined in Swagger""" # noqa: E501 + """EnableBody - a model defined in Swagger""" # noqa: E501 self._description = None self._host = None self.discriminator = None @@ -49,20 +49,20 @@ class EnableRequest(object): @property def description(self): - """Gets the description of this EnableRequest. # noqa: E501 + """Gets the description of this EnableBody. # noqa: E501 - :return: The description of this EnableRequest. # noqa: E501 + :return: The description of this EnableBody. # noqa: E501 :rtype: str """ return self._description @description.setter def description(self, description): - """Sets the description of this EnableRequest. + """Sets the description of this EnableBody. - :param description: The description of this EnableRequest. # noqa: E501 + :param description: The description of this EnableBody. # noqa: E501 :type: str """ @@ -70,20 +70,20 @@ class EnableRequest(object): @property def host(self): - """Gets the host of this EnableRequest. # noqa: E501 + """Gets the host of this EnableBody. # noqa: E501 - :return: The host of this EnableRequest. # noqa: E501 + :return: The host of this EnableBody. # noqa: E501 :rtype: str """ return self._host @host.setter def host(self, host): - """Sets the host of this EnableRequest. + """Sets the host of this EnableBody. - :param host: The host of this EnableRequest. # noqa: E501 + :param host: The host of this EnableBody. # noqa: E501 :type: str """ @@ -110,7 +110,7 @@ class EnableRequest(object): )) else: result[attr] = value - if issubclass(EnableRequest, dict): + if issubclass(EnableBody, dict): for key, value in self.items(): result[key] = value @@ -126,7 +126,7 @@ class EnableRequest(object): def __eq__(self, other): """Returns true if both objects are equal""" - if not isinstance(other, EnableRequest): + if not isinstance(other, EnableBody): return False return self.__dict__ == other.__dict__ diff --git a/sdk/python/sdk/zrok/zrok_api/models/environment.py b/sdk/python/sdk/zrok/zrok_api/models/environment.py index 79e03aee..53c85559 100644 --- a/sdk/python/sdk/zrok/zrok_api/models/environment.py +++ b/sdk/python/sdk/zrok/zrok_api/models/environment.py @@ -5,7 +5,7 @@ zrok client access # noqa: E501 - OpenAPI spec version: 0.3.0 + OpenAPI spec version: 1.0.0 Generated by: https://github.com/swagger-api/swagger-codegen.git """ diff --git a/sdk/python/sdk/zrok/zrok_api/models/environment_and_resources.py b/sdk/python/sdk/zrok/zrok_api/models/environment_and_resources.py index 10275235..12c466bb 100644 --- a/sdk/python/sdk/zrok/zrok_api/models/environment_and_resources.py +++ b/sdk/python/sdk/zrok/zrok_api/models/environment_and_resources.py @@ -5,7 +5,7 @@ zrok client access # noqa: E501 - OpenAPI spec version: 0.3.0 + OpenAPI spec version: 1.0.0 Generated by: https://github.com/swagger-api/swagger-codegen.git """ diff --git a/sdk/python/sdk/zrok/zrok_api/models/environments.py b/sdk/python/sdk/zrok/zrok_api/models/environments.py index ccbc297c..e6d72d56 100644 --- a/sdk/python/sdk/zrok/zrok_api/models/environments.py +++ b/sdk/python/sdk/zrok/zrok_api/models/environments.py @@ -5,7 +5,7 @@ zrok client access # noqa: E501 - OpenAPI spec version: 0.3.0 + OpenAPI spec version: 1.0.0 Generated by: https://github.com/swagger-api/swagger-codegen.git """ diff --git a/sdk/python/sdk/zrok/zrok_api/models/error_message.py b/sdk/python/sdk/zrok/zrok_api/models/error_message.py index 21e07ea0..19325187 100644 --- a/sdk/python/sdk/zrok/zrok_api/models/error_message.py +++ b/sdk/python/sdk/zrok/zrok_api/models/error_message.py @@ -5,7 +5,7 @@ zrok client access # noqa: E501 - OpenAPI spec version: 0.3.0 + OpenAPI spec version: 1.0.0 Generated by: https://github.com/swagger-api/swagger-codegen.git """ diff --git a/sdk/python/sdk/zrok/zrok_api/models/frontend.py b/sdk/python/sdk/zrok/zrok_api/models/frontend.py index f45b26a3..46cf93eb 100644 --- a/sdk/python/sdk/zrok/zrok_api/models/frontend.py +++ b/sdk/python/sdk/zrok/zrok_api/models/frontend.py @@ -5,7 +5,7 @@ zrok client access # noqa: E501 - OpenAPI spec version: 0.3.0 + OpenAPI spec version: 1.0.0 Generated by: https://github.com/swagger-api/swagger-codegen.git """ @@ -29,8 +29,11 @@ class Frontend(object): """ swagger_types = { 'id': 'int', - 'token': 'str', - 'shr_token': 'str', + 'frontend_token': 'str', + 'share_token': 'str', + 'backend_mode': 'str', + 'bind_address': 'str', + 'description': 'str', 'z_id': 'str', 'created_at': 'int', 'updated_at': 'int' @@ -38,28 +41,40 @@ class Frontend(object): attribute_map = { 'id': 'id', - 'token': 'token', - 'shr_token': 'shrToken', + 'frontend_token': 'frontendToken', + 'share_token': 'shareToken', + 'backend_mode': 'backendMode', + 'bind_address': 'bindAddress', + 'description': 'description', 'z_id': 'zId', 'created_at': 'createdAt', 'updated_at': 'updatedAt' } - def __init__(self, id=None, token=None, shr_token=None, z_id=None, created_at=None, updated_at=None): # noqa: E501 + def __init__(self, id=None, frontend_token=None, share_token=None, backend_mode=None, bind_address=None, description=None, z_id=None, created_at=None, updated_at=None): # noqa: E501 """Frontend - a model defined in Swagger""" # noqa: E501 self._id = None - self._token = None - self._shr_token = None + self._frontend_token = None + self._share_token = None + self._backend_mode = None + self._bind_address = None + self._description = None self._z_id = None self._created_at = None self._updated_at = None self.discriminator = None if id is not None: self.id = id - if token is not None: - self.token = token - if shr_token is not None: - self.shr_token = shr_token + if frontend_token is not None: + self.frontend_token = frontend_token + if share_token is not None: + self.share_token = share_token + if backend_mode is not None: + self.backend_mode = backend_mode + if bind_address is not None: + self.bind_address = bind_address + if description is not None: + self.description = description if z_id is not None: self.z_id = z_id if created_at is not None: @@ -89,46 +104,109 @@ class Frontend(object): self._id = id @property - def token(self): - """Gets the token of this Frontend. # noqa: E501 + def frontend_token(self): + """Gets the frontend_token of this Frontend. # noqa: E501 - :return: The token of this Frontend. # noqa: E501 + :return: The frontend_token of this Frontend. # noqa: E501 :rtype: str """ - return self._token + return self._frontend_token - @token.setter - def token(self, token): - """Sets the token of this Frontend. + @frontend_token.setter + def frontend_token(self, frontend_token): + """Sets the frontend_token of this Frontend. - :param token: The token of this Frontend. # noqa: E501 + :param frontend_token: The frontend_token of this Frontend. # noqa: E501 :type: str """ - self._token = token + self._frontend_token = frontend_token @property - def shr_token(self): - """Gets the shr_token of this Frontend. # noqa: E501 + def share_token(self): + """Gets the share_token of this Frontend. # noqa: E501 - :return: The shr_token of this Frontend. # noqa: E501 + :return: The share_token of this Frontend. # noqa: E501 :rtype: str """ - return self._shr_token + return self._share_token - @shr_token.setter - def shr_token(self, shr_token): - """Sets the shr_token of this Frontend. + @share_token.setter + def share_token(self, share_token): + """Sets the share_token of this Frontend. - :param shr_token: The shr_token of this Frontend. # noqa: E501 + :param share_token: The share_token of this Frontend. # noqa: E501 :type: str """ - self._shr_token = shr_token + self._share_token = share_token + + @property + def backend_mode(self): + """Gets the backend_mode of this Frontend. # noqa: E501 + + + :return: The backend_mode of this Frontend. # noqa: E501 + :rtype: str + """ + return self._backend_mode + + @backend_mode.setter + def backend_mode(self, backend_mode): + """Sets the backend_mode of this Frontend. + + + :param backend_mode: The backend_mode of this Frontend. # noqa: E501 + :type: str + """ + + self._backend_mode = backend_mode + + @property + def bind_address(self): + """Gets the bind_address of this Frontend. # noqa: E501 + + + :return: The bind_address of this Frontend. # noqa: E501 + :rtype: str + """ + return self._bind_address + + @bind_address.setter + def bind_address(self, bind_address): + """Sets the bind_address of this Frontend. + + + :param bind_address: The bind_address of this Frontend. # noqa: E501 + :type: str + """ + + self._bind_address = bind_address + + @property + def description(self): + """Gets the description of this Frontend. # noqa: E501 + + + :return: The description of this Frontend. # noqa: E501 + :rtype: str + """ + return self._description + + @description.setter + def description(self, description): + """Sets the description of this Frontend. + + + :param description: The description of this Frontend. # noqa: E501 + :type: str + """ + + self._description = description @property def z_id(self): diff --git a/sdk/python/sdk/zrok/zrok_api/models/create_frontend_request.py b/sdk/python/sdk/zrok/zrok_api/models/frontend_body.py similarity index 74% rename from sdk/python/sdk/zrok/zrok_api/models/create_frontend_request.py rename to sdk/python/sdk/zrok/zrok_api/models/frontend_body.py index f6a0cf01..22f06aac 100644 --- a/sdk/python/sdk/zrok/zrok_api/models/create_frontend_request.py +++ b/sdk/python/sdk/zrok/zrok_api/models/frontend_body.py @@ -5,7 +5,7 @@ zrok client access # noqa: E501 - OpenAPI spec version: 0.3.0 + OpenAPI spec version: 1.0.0 Generated by: https://github.com/swagger-api/swagger-codegen.git """ @@ -15,7 +15,7 @@ import re # noqa: F401 import six -class CreateFrontendRequest(object): +class FrontendBody(object): """NOTE: This class is auto generated by the swagger code generator program. Do not edit the class manually. @@ -42,7 +42,7 @@ class CreateFrontendRequest(object): } def __init__(self, z_id=None, url_template=None, public_name=None, permission_mode=None): # noqa: E501 - """CreateFrontendRequest - a model defined in Swagger""" # noqa: E501 + """FrontendBody - a model defined in Swagger""" # noqa: E501 self._z_id = None self._url_template = None self._public_name = None @@ -59,20 +59,20 @@ class CreateFrontendRequest(object): @property def z_id(self): - """Gets the z_id of this CreateFrontendRequest. # noqa: E501 + """Gets the z_id of this FrontendBody. # noqa: E501 - :return: The z_id of this CreateFrontendRequest. # noqa: E501 + :return: The z_id of this FrontendBody. # noqa: E501 :rtype: str """ return self._z_id @z_id.setter def z_id(self, z_id): - """Sets the z_id of this CreateFrontendRequest. + """Sets the z_id of this FrontendBody. - :param z_id: The z_id of this CreateFrontendRequest. # noqa: E501 + :param z_id: The z_id of this FrontendBody. # noqa: E501 :type: str """ @@ -80,20 +80,20 @@ class CreateFrontendRequest(object): @property def url_template(self): - """Gets the url_template of this CreateFrontendRequest. # noqa: E501 + """Gets the url_template of this FrontendBody. # noqa: E501 - :return: The url_template of this CreateFrontendRequest. # noqa: E501 + :return: The url_template of this FrontendBody. # noqa: E501 :rtype: str """ return self._url_template @url_template.setter def url_template(self, url_template): - """Sets the url_template of this CreateFrontendRequest. + """Sets the url_template of this FrontendBody. - :param url_template: The url_template of this CreateFrontendRequest. # noqa: E501 + :param url_template: The url_template of this FrontendBody. # noqa: E501 :type: str """ @@ -101,20 +101,20 @@ class CreateFrontendRequest(object): @property def public_name(self): - """Gets the public_name of this CreateFrontendRequest. # noqa: E501 + """Gets the public_name of this FrontendBody. # noqa: E501 - :return: The public_name of this CreateFrontendRequest. # noqa: E501 + :return: The public_name of this FrontendBody. # noqa: E501 :rtype: str """ return self._public_name @public_name.setter def public_name(self, public_name): - """Sets the public_name of this CreateFrontendRequest. + """Sets the public_name of this FrontendBody. - :param public_name: The public_name of this CreateFrontendRequest. # noqa: E501 + :param public_name: The public_name of this FrontendBody. # noqa: E501 :type: str """ @@ -122,20 +122,20 @@ class CreateFrontendRequest(object): @property def permission_mode(self): - """Gets the permission_mode of this CreateFrontendRequest. # noqa: E501 + """Gets the permission_mode of this FrontendBody. # noqa: E501 - :return: The permission_mode of this CreateFrontendRequest. # noqa: E501 + :return: The permission_mode of this FrontendBody. # noqa: E501 :rtype: str """ return self._permission_mode @permission_mode.setter def permission_mode(self, permission_mode): - """Sets the permission_mode of this CreateFrontendRequest. + """Sets the permission_mode of this FrontendBody. - :param permission_mode: The permission_mode of this CreateFrontendRequest. # noqa: E501 + :param permission_mode: The permission_mode of this FrontendBody. # noqa: E501 :type: str """ allowed_values = ["open", "closed"] # noqa: E501 @@ -168,7 +168,7 @@ class CreateFrontendRequest(object): )) else: result[attr] = value - if issubclass(CreateFrontendRequest, dict): + if issubclass(FrontendBody, dict): for key, value in self.items(): result[key] = value @@ -184,7 +184,7 @@ class CreateFrontendRequest(object): def __eq__(self, other): """Returns true if both objects are equal""" - if not isinstance(other, CreateFrontendRequest): + if not isinstance(other, FrontendBody): return False return self.__dict__ == other.__dict__ diff --git a/sdk/python/sdk/zrok/zrok_api/models/delete_frontend_request.py b/sdk/python/sdk/zrok/zrok_api/models/frontend_body1.py similarity index 81% rename from sdk/python/sdk/zrok/zrok_api/models/delete_frontend_request.py rename to sdk/python/sdk/zrok/zrok_api/models/frontend_body1.py index c9b92bad..192f6785 100644 --- a/sdk/python/sdk/zrok/zrok_api/models/delete_frontend_request.py +++ b/sdk/python/sdk/zrok/zrok_api/models/frontend_body1.py @@ -5,7 +5,7 @@ zrok client access # noqa: E501 - OpenAPI spec version: 0.3.0 + OpenAPI spec version: 1.0.0 Generated by: https://github.com/swagger-api/swagger-codegen.git """ @@ -15,7 +15,7 @@ import re # noqa: F401 import six -class DeleteFrontendRequest(object): +class FrontendBody1(object): """NOTE: This class is auto generated by the swagger code generator program. Do not edit the class manually. @@ -36,7 +36,7 @@ class DeleteFrontendRequest(object): } def __init__(self, frontend_token=None): # noqa: E501 - """DeleteFrontendRequest - a model defined in Swagger""" # noqa: E501 + """FrontendBody1 - a model defined in Swagger""" # noqa: E501 self._frontend_token = None self.discriminator = None if frontend_token is not None: @@ -44,20 +44,20 @@ class DeleteFrontendRequest(object): @property def frontend_token(self): - """Gets the frontend_token of this DeleteFrontendRequest. # noqa: E501 + """Gets the frontend_token of this FrontendBody1. # noqa: E501 - :return: The frontend_token of this DeleteFrontendRequest. # noqa: E501 + :return: The frontend_token of this FrontendBody1. # noqa: E501 :rtype: str """ return self._frontend_token @frontend_token.setter def frontend_token(self, frontend_token): - """Sets the frontend_token of this DeleteFrontendRequest. + """Sets the frontend_token of this FrontendBody1. - :param frontend_token: The frontend_token of this DeleteFrontendRequest. # noqa: E501 + :param frontend_token: The frontend_token of this FrontendBody1. # noqa: E501 :type: str """ @@ -84,7 +84,7 @@ class DeleteFrontendRequest(object): )) else: result[attr] = value - if issubclass(DeleteFrontendRequest, dict): + if issubclass(FrontendBody1, dict): for key, value in self.items(): result[key] = value @@ -100,7 +100,7 @@ class DeleteFrontendRequest(object): def __eq__(self, other): """Returns true if both objects are equal""" - if not isinstance(other, DeleteFrontendRequest): + if not isinstance(other, FrontendBody1): return False return self.__dict__ == other.__dict__ diff --git a/sdk/python/sdk/zrok/zrok_api/models/update_frontend_request.py b/sdk/python/sdk/zrok/zrok_api/models/frontend_body2.py similarity index 74% rename from sdk/python/sdk/zrok/zrok_api/models/update_frontend_request.py rename to sdk/python/sdk/zrok/zrok_api/models/frontend_body2.py index 41554390..aed451e3 100644 --- a/sdk/python/sdk/zrok/zrok_api/models/update_frontend_request.py +++ b/sdk/python/sdk/zrok/zrok_api/models/frontend_body2.py @@ -5,7 +5,7 @@ zrok client access # noqa: E501 - OpenAPI spec version: 0.3.0 + OpenAPI spec version: 1.0.0 Generated by: https://github.com/swagger-api/swagger-codegen.git """ @@ -15,7 +15,7 @@ import re # noqa: F401 import six -class UpdateFrontendRequest(object): +class FrontendBody2(object): """NOTE: This class is auto generated by the swagger code generator program. Do not edit the class manually. @@ -40,7 +40,7 @@ class UpdateFrontendRequest(object): } def __init__(self, frontend_token=None, public_name=None, url_template=None): # noqa: E501 - """UpdateFrontendRequest - a model defined in Swagger""" # noqa: E501 + """FrontendBody2 - a model defined in Swagger""" # noqa: E501 self._frontend_token = None self._public_name = None self._url_template = None @@ -54,20 +54,20 @@ class UpdateFrontendRequest(object): @property def frontend_token(self): - """Gets the frontend_token of this UpdateFrontendRequest. # noqa: E501 + """Gets the frontend_token of this FrontendBody2. # noqa: E501 - :return: The frontend_token of this UpdateFrontendRequest. # noqa: E501 + :return: The frontend_token of this FrontendBody2. # noqa: E501 :rtype: str """ return self._frontend_token @frontend_token.setter def frontend_token(self, frontend_token): - """Sets the frontend_token of this UpdateFrontendRequest. + """Sets the frontend_token of this FrontendBody2. - :param frontend_token: The frontend_token of this UpdateFrontendRequest. # noqa: E501 + :param frontend_token: The frontend_token of this FrontendBody2. # noqa: E501 :type: str """ @@ -75,20 +75,20 @@ class UpdateFrontendRequest(object): @property def public_name(self): - """Gets the public_name of this UpdateFrontendRequest. # noqa: E501 + """Gets the public_name of this FrontendBody2. # noqa: E501 - :return: The public_name of this UpdateFrontendRequest. # noqa: E501 + :return: The public_name of this FrontendBody2. # noqa: E501 :rtype: str """ return self._public_name @public_name.setter def public_name(self, public_name): - """Sets the public_name of this UpdateFrontendRequest. + """Sets the public_name of this FrontendBody2. - :param public_name: The public_name of this UpdateFrontendRequest. # noqa: E501 + :param public_name: The public_name of this FrontendBody2. # noqa: E501 :type: str """ @@ -96,20 +96,20 @@ class UpdateFrontendRequest(object): @property def url_template(self): - """Gets the url_template of this UpdateFrontendRequest. # noqa: E501 + """Gets the url_template of this FrontendBody2. # noqa: E501 - :return: The url_template of this UpdateFrontendRequest. # noqa: E501 + :return: The url_template of this FrontendBody2. # noqa: E501 :rtype: str """ return self._url_template @url_template.setter def url_template(self, url_template): - """Sets the url_template of this UpdateFrontendRequest. + """Sets the url_template of this FrontendBody2. - :param url_template: The url_template of this UpdateFrontendRequest. # noqa: E501 + :param url_template: The url_template of this FrontendBody2. # noqa: E501 :type: str """ @@ -136,7 +136,7 @@ class UpdateFrontendRequest(object): )) else: result[attr] = value - if issubclass(UpdateFrontendRequest, dict): + if issubclass(FrontendBody2, dict): for key, value in self.items(): result[key] = value @@ -152,7 +152,7 @@ class UpdateFrontendRequest(object): def __eq__(self, other): """Returns true if both objects are equal""" - if not isinstance(other, UpdateFrontendRequest): + if not isinstance(other, FrontendBody2): return False return self.__dict__ == other.__dict__ diff --git a/sdk/python/sdk/zrok/zrok_api/models/frontends.py b/sdk/python/sdk/zrok/zrok_api/models/frontends.py index 923baa9d..3c00604a 100644 --- a/sdk/python/sdk/zrok/zrok_api/models/frontends.py +++ b/sdk/python/sdk/zrok/zrok_api/models/frontends.py @@ -5,7 +5,7 @@ zrok client access # noqa: E501 - OpenAPI spec version: 0.3.0 + OpenAPI spec version: 1.0.0 Generated by: https://github.com/swagger-api/swagger-codegen.git """ diff --git a/sdk/python/sdk/zrok/zrok_api/models/grants_body.py b/sdk/python/sdk/zrok/zrok_api/models/grants_body.py index e61ea02d..78e7d53a 100644 --- a/sdk/python/sdk/zrok/zrok_api/models/grants_body.py +++ b/sdk/python/sdk/zrok/zrok_api/models/grants_body.py @@ -5,7 +5,7 @@ zrok client access # noqa: E501 - OpenAPI spec version: 0.3.0 + OpenAPI spec version: 1.0.0 Generated by: https://github.com/swagger-api/swagger-codegen.git """ diff --git a/sdk/python/sdk/zrok/zrok_api/models/identity_body.py b/sdk/python/sdk/zrok/zrok_api/models/identity_body.py index 8da98c33..4be3f8e5 100644 --- a/sdk/python/sdk/zrok/zrok_api/models/identity_body.py +++ b/sdk/python/sdk/zrok/zrok_api/models/identity_body.py @@ -5,7 +5,7 @@ zrok client access # noqa: E501 - OpenAPI spec version: 0.3.0 + OpenAPI spec version: 1.0.0 Generated by: https://github.com/swagger-api/swagger-codegen.git """ diff --git a/sdk/python/sdk/zrok/zrok_api/models/inline_response200.py b/sdk/python/sdk/zrok/zrok_api/models/inline_response200.py index a972a3fb..edb95aa5 100644 --- a/sdk/python/sdk/zrok/zrok_api/models/inline_response200.py +++ b/sdk/python/sdk/zrok/zrok_api/models/inline_response200.py @@ -5,7 +5,7 @@ zrok client access # noqa: E501 - OpenAPI spec version: 0.3.0 + OpenAPI spec version: 1.0.0 Generated by: https://github.com/swagger-api/swagger-codegen.git """ @@ -28,40 +28,40 @@ class InlineResponse200(object): and the value is json key in definition. """ swagger_types = { - 'token': 'str' + 'account_token': 'str' } attribute_map = { - 'token': 'token' + 'account_token': 'accountToken' } - def __init__(self, token=None): # noqa: E501 + def __init__(self, account_token=None): # noqa: E501 """InlineResponse200 - a model defined in Swagger""" # noqa: E501 - self._token = None + self._account_token = None self.discriminator = None - if token is not None: - self.token = token + if account_token is not None: + self.account_token = account_token @property - def token(self): - """Gets the token of this InlineResponse200. # noqa: E501 + def account_token(self): + """Gets the account_token of this InlineResponse200. # noqa: E501 - :return: The token of this InlineResponse200. # noqa: E501 + :return: The account_token of this InlineResponse200. # noqa: E501 :rtype: str """ - return self._token + return self._account_token - @token.setter - def token(self, token): - """Sets the token of this InlineResponse200. + @account_token.setter + def account_token(self, account_token): + """Sets the account_token of this InlineResponse200. - :param token: The token of this InlineResponse200. # noqa: E501 + :param account_token: The account_token of this InlineResponse200. # noqa: E501 :type: str """ - self._token = token + self._account_token = account_token def to_dict(self): """Returns the model properties as a dict""" diff --git a/sdk/python/sdk/zrok/zrok_api/models/inline_response2001.py b/sdk/python/sdk/zrok/zrok_api/models/inline_response2001.py index 214eca09..32a1818a 100644 --- a/sdk/python/sdk/zrok/zrok_api/models/inline_response2001.py +++ b/sdk/python/sdk/zrok/zrok_api/models/inline_response2001.py @@ -5,7 +5,7 @@ zrok client access # noqa: E501 - OpenAPI spec version: 0.3.0 + OpenAPI spec version: 1.0.0 Generated by: https://github.com/swagger-api/swagger-codegen.git """ @@ -28,40 +28,40 @@ class InlineResponse2001(object): and the value is json key in definition. """ swagger_types = { - 'members': 'list[InlineResponse2001Members]' + 'email': 'str' } attribute_map = { - 'members': 'members' + 'email': 'email' } - def __init__(self, members=None): # noqa: E501 + def __init__(self, email=None): # noqa: E501 """InlineResponse2001 - a model defined in Swagger""" # noqa: E501 - self._members = None + self._email = None self.discriminator = None - if members is not None: - self.members = members + if email is not None: + self.email = email @property - def members(self): - """Gets the members of this InlineResponse2001. # noqa: E501 + def email(self): + """Gets the email of this InlineResponse2001. # noqa: E501 - :return: The members of this InlineResponse2001. # noqa: E501 - :rtype: list[InlineResponse2001Members] + :return: The email of this InlineResponse2001. # noqa: E501 + :rtype: str """ - return self._members + return self._email - @members.setter - def members(self, members): - """Sets the members of this InlineResponse2001. + @email.setter + def email(self, email): + """Sets the email of this InlineResponse2001. - :param members: The members of this InlineResponse2001. # noqa: E501 - :type: list[InlineResponse2001Members] + :param email: The email of this InlineResponse2001. # noqa: E501 + :type: str """ - self._members = members + self._email = email def to_dict(self): """Returns the model properties as a dict""" diff --git a/sdk/python/sdk/zrok/zrok_api/models/inline_response2002.py b/sdk/python/sdk/zrok/zrok_api/models/inline_response2002.py index 31aca38e..a162bfdc 100644 --- a/sdk/python/sdk/zrok/zrok_api/models/inline_response2002.py +++ b/sdk/python/sdk/zrok/zrok_api/models/inline_response2002.py @@ -5,7 +5,7 @@ zrok client access # noqa: E501 - OpenAPI spec version: 0.3.0 + OpenAPI spec version: 1.0.0 Generated by: https://github.com/swagger-api/swagger-codegen.git """ @@ -28,40 +28,170 @@ class InlineResponse2002(object): and the value is json key in definition. """ swagger_types = { - 'organizations': 'list[InlineResponse2002Organizations]' + 'frontend_token': 'str', + 'z_id': 'str', + 'url_template': 'str', + 'public_name': 'str', + 'created_at': 'int', + 'updated_at': 'int' } attribute_map = { - 'organizations': 'organizations' + 'frontend_token': 'frontendToken', + 'z_id': 'zId', + 'url_template': 'urlTemplate', + 'public_name': 'publicName', + 'created_at': 'createdAt', + 'updated_at': 'updatedAt' } - def __init__(self, organizations=None): # noqa: E501 + def __init__(self, frontend_token=None, z_id=None, url_template=None, public_name=None, created_at=None, updated_at=None): # noqa: E501 """InlineResponse2002 - a model defined in Swagger""" # noqa: E501 - self._organizations = None + self._frontend_token = None + self._z_id = None + self._url_template = None + self._public_name = None + self._created_at = None + self._updated_at = None self.discriminator = None - if organizations is not None: - self.organizations = organizations + if frontend_token is not None: + self.frontend_token = frontend_token + if z_id is not None: + self.z_id = z_id + if url_template is not None: + self.url_template = url_template + if public_name is not None: + self.public_name = public_name + if created_at is not None: + self.created_at = created_at + if updated_at is not None: + self.updated_at = updated_at @property - def organizations(self): - """Gets the organizations of this InlineResponse2002. # noqa: E501 + def frontend_token(self): + """Gets the frontend_token of this InlineResponse2002. # noqa: E501 - :return: The organizations of this InlineResponse2002. # noqa: E501 - :rtype: list[InlineResponse2002Organizations] + :return: The frontend_token of this InlineResponse2002. # noqa: E501 + :rtype: str """ - return self._organizations + return self._frontend_token - @organizations.setter - def organizations(self, organizations): - """Sets the organizations of this InlineResponse2002. + @frontend_token.setter + def frontend_token(self, frontend_token): + """Sets the frontend_token of this InlineResponse2002. - :param organizations: The organizations of this InlineResponse2002. # noqa: E501 - :type: list[InlineResponse2002Organizations] + :param frontend_token: The frontend_token of this InlineResponse2002. # noqa: E501 + :type: str """ - self._organizations = organizations + self._frontend_token = frontend_token + + @property + def z_id(self): + """Gets the z_id of this InlineResponse2002. # noqa: E501 + + + :return: The z_id of this InlineResponse2002. # noqa: E501 + :rtype: str + """ + return self._z_id + + @z_id.setter + def z_id(self, z_id): + """Sets the z_id of this InlineResponse2002. + + + :param z_id: The z_id of this InlineResponse2002. # noqa: E501 + :type: str + """ + + self._z_id = z_id + + @property + def url_template(self): + """Gets the url_template of this InlineResponse2002. # noqa: E501 + + + :return: The url_template of this InlineResponse2002. # noqa: E501 + :rtype: str + """ + return self._url_template + + @url_template.setter + def url_template(self, url_template): + """Sets the url_template of this InlineResponse2002. + + + :param url_template: The url_template of this InlineResponse2002. # noqa: E501 + :type: str + """ + + self._url_template = url_template + + @property + def public_name(self): + """Gets the public_name of this InlineResponse2002. # noqa: E501 + + + :return: The public_name of this InlineResponse2002. # noqa: E501 + :rtype: str + """ + return self._public_name + + @public_name.setter + def public_name(self, public_name): + """Sets the public_name of this InlineResponse2002. + + + :param public_name: The public_name of this InlineResponse2002. # noqa: E501 + :type: str + """ + + self._public_name = public_name + + @property + def created_at(self): + """Gets the created_at of this InlineResponse2002. # noqa: E501 + + + :return: The created_at of this InlineResponse2002. # noqa: E501 + :rtype: int + """ + return self._created_at + + @created_at.setter + def created_at(self, created_at): + """Sets the created_at of this InlineResponse2002. + + + :param created_at: The created_at of this InlineResponse2002. # noqa: E501 + :type: int + """ + + self._created_at = created_at + + @property + def updated_at(self): + """Gets the updated_at of this InlineResponse2002. # noqa: E501 + + + :return: The updated_at of this InlineResponse2002. # noqa: E501 + :rtype: int + """ + return self._updated_at + + @updated_at.setter + def updated_at(self, updated_at): + """Sets the updated_at of this InlineResponse2002. + + + :param updated_at: The updated_at of this InlineResponse2002. # noqa: E501 + :type: int + """ + + self._updated_at = updated_at def to_dict(self): """Returns the model properties as a dict""" diff --git a/sdk/python/sdk/zrok/zrok_api/models/inline_response2003.py b/sdk/python/sdk/zrok/zrok_api/models/inline_response2003.py index b92d8287..93926054 100644 --- a/sdk/python/sdk/zrok/zrok_api/models/inline_response2003.py +++ b/sdk/python/sdk/zrok/zrok_api/models/inline_response2003.py @@ -5,7 +5,7 @@ zrok client access # noqa: E501 - OpenAPI spec version: 0.3.0 + OpenAPI spec version: 1.0.0 Generated by: https://github.com/swagger-api/swagger-codegen.git """ @@ -28,40 +28,40 @@ class InlineResponse2003(object): and the value is json key in definition. """ swagger_types = { - 'memberships': 'list[InlineResponse2003Memberships]' + 'members': 'list[InlineResponse2003Members]' } attribute_map = { - 'memberships': 'memberships' + 'members': 'members' } - def __init__(self, memberships=None): # noqa: E501 + def __init__(self, members=None): # noqa: E501 """InlineResponse2003 - a model defined in Swagger""" # noqa: E501 - self._memberships = None + self._members = None self.discriminator = None - if memberships is not None: - self.memberships = memberships + if members is not None: + self.members = members @property - def memberships(self): - """Gets the memberships of this InlineResponse2003. # noqa: E501 + def members(self): + """Gets the members of this InlineResponse2003. # noqa: E501 - :return: The memberships of this InlineResponse2003. # noqa: E501 - :rtype: list[InlineResponse2003Memberships] + :return: The members of this InlineResponse2003. # noqa: E501 + :rtype: list[InlineResponse2003Members] """ - return self._memberships + return self._members - @memberships.setter - def memberships(self, memberships): - """Sets the memberships of this InlineResponse2003. + @members.setter + def members(self, members): + """Sets the members of this InlineResponse2003. - :param memberships: The memberships of this InlineResponse2003. # noqa: E501 - :type: list[InlineResponse2003Memberships] + :param members: The members of this InlineResponse2003. # noqa: E501 + :type: list[InlineResponse2003Members] """ - self._memberships = memberships + self._members = members def to_dict(self): """Returns the model properties as a dict""" diff --git a/sdk/python/sdk/zrok/zrok_api/models/inline_response2001_members.py b/sdk/python/sdk/zrok/zrok_api/models/inline_response2003_members.py similarity index 79% rename from sdk/python/sdk/zrok/zrok_api/models/inline_response2001_members.py rename to sdk/python/sdk/zrok/zrok_api/models/inline_response2003_members.py index a5fbc3e6..359fb898 100644 --- a/sdk/python/sdk/zrok/zrok_api/models/inline_response2001_members.py +++ b/sdk/python/sdk/zrok/zrok_api/models/inline_response2003_members.py @@ -5,7 +5,7 @@ zrok client access # noqa: E501 - OpenAPI spec version: 0.3.0 + OpenAPI spec version: 1.0.0 Generated by: https://github.com/swagger-api/swagger-codegen.git """ @@ -15,7 +15,7 @@ import re # noqa: F401 import six -class InlineResponse2001Members(object): +class InlineResponse2003Members(object): """NOTE: This class is auto generated by the swagger code generator program. Do not edit the class manually. @@ -38,7 +38,7 @@ class InlineResponse2001Members(object): } def __init__(self, email=None, admin=None): # noqa: E501 - """InlineResponse2001Members - a model defined in Swagger""" # noqa: E501 + """InlineResponse2003Members - a model defined in Swagger""" # noqa: E501 self._email = None self._admin = None self.discriminator = None @@ -49,20 +49,20 @@ class InlineResponse2001Members(object): @property def email(self): - """Gets the email of this InlineResponse2001Members. # noqa: E501 + """Gets the email of this InlineResponse2003Members. # noqa: E501 - :return: The email of this InlineResponse2001Members. # noqa: E501 + :return: The email of this InlineResponse2003Members. # noqa: E501 :rtype: str """ return self._email @email.setter def email(self, email): - """Sets the email of this InlineResponse2001Members. + """Sets the email of this InlineResponse2003Members. - :param email: The email of this InlineResponse2001Members. # noqa: E501 + :param email: The email of this InlineResponse2003Members. # noqa: E501 :type: str """ @@ -70,20 +70,20 @@ class InlineResponse2001Members(object): @property def admin(self): - """Gets the admin of this InlineResponse2001Members. # noqa: E501 + """Gets the admin of this InlineResponse2003Members. # noqa: E501 - :return: The admin of this InlineResponse2001Members. # noqa: E501 + :return: The admin of this InlineResponse2003Members. # noqa: E501 :rtype: bool """ return self._admin @admin.setter def admin(self, admin): - """Sets the admin of this InlineResponse2001Members. + """Sets the admin of this InlineResponse2003Members. - :param admin: The admin of this InlineResponse2001Members. # noqa: E501 + :param admin: The admin of this InlineResponse2003Members. # noqa: E501 :type: bool """ @@ -110,7 +110,7 @@ class InlineResponse2001Members(object): )) else: result[attr] = value - if issubclass(InlineResponse2001Members, dict): + if issubclass(InlineResponse2003Members, dict): for key, value in self.items(): result[key] = value @@ -126,7 +126,7 @@ class InlineResponse2001Members(object): def __eq__(self, other): """Returns true if both objects are equal""" - if not isinstance(other, InlineResponse2001Members): + if not isinstance(other, InlineResponse2003Members): return False return self.__dict__ == other.__dict__ diff --git a/sdk/python/sdk/zrok/zrok_api/models/inline_response2004.py b/sdk/python/sdk/zrok/zrok_api/models/inline_response2004.py new file mode 100644 index 00000000..d0a55eb0 --- /dev/null +++ b/sdk/python/sdk/zrok/zrok_api/models/inline_response2004.py @@ -0,0 +1,110 @@ +# coding: utf-8 + +""" + zrok + + zrok client access # noqa: E501 + + OpenAPI spec version: 1.0.0 + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +import pprint +import re # noqa: F401 + +import six + +class InlineResponse2004(object): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + """ + Attributes: + swagger_types (dict): The key is attribute name + and the value is attribute type. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + """ + swagger_types = { + 'organizations': 'list[InlineResponse2004Organizations]' + } + + attribute_map = { + 'organizations': 'organizations' + } + + def __init__(self, organizations=None): # noqa: E501 + """InlineResponse2004 - a model defined in Swagger""" # noqa: E501 + self._organizations = None + self.discriminator = None + if organizations is not None: + self.organizations = organizations + + @property + def organizations(self): + """Gets the organizations of this InlineResponse2004. # noqa: E501 + + + :return: The organizations of this InlineResponse2004. # noqa: E501 + :rtype: list[InlineResponse2004Organizations] + """ + return self._organizations + + @organizations.setter + def organizations(self, organizations): + """Sets the organizations of this InlineResponse2004. + + + :param organizations: The organizations of this InlineResponse2004. # noqa: E501 + :type: list[InlineResponse2004Organizations] + """ + + self._organizations = organizations + + def to_dict(self): + """Returns the model properties as a dict""" + result = {} + + for attr, _ in six.iteritems(self.swagger_types): + value = getattr(self, attr) + if isinstance(value, list): + result[attr] = list(map( + lambda x: x.to_dict() if hasattr(x, "to_dict") else x, + value + )) + elif hasattr(value, "to_dict"): + result[attr] = value.to_dict() + elif isinstance(value, dict): + result[attr] = dict(map( + lambda item: (item[0], item[1].to_dict()) + if hasattr(item[1], "to_dict") else item, + value.items() + )) + else: + result[attr] = value + if issubclass(InlineResponse2004, dict): + for key, value in self.items(): + result[key] = value + + return result + + def to_str(self): + """Returns the string representation of the model""" + return pprint.pformat(self.to_dict()) + + def __repr__(self): + """For `print` and `pprint`""" + return self.to_str() + + def __eq__(self, other): + """Returns true if both objects are equal""" + if not isinstance(other, InlineResponse2004): + return False + + return self.__dict__ == other.__dict__ + + def __ne__(self, other): + """Returns true if both objects are not equal""" + return not self == other diff --git a/sdk/python/sdk/zrok/zrok_api/models/organizationremove_organizations.py b/sdk/python/sdk/zrok/zrok_api/models/inline_response2004_members.py similarity index 65% rename from sdk/python/sdk/zrok/zrok_api/models/organizationremove_organizations.py rename to sdk/python/sdk/zrok/zrok_api/models/inline_response2004_members.py index 017ed6bb..765d7254 100644 --- a/sdk/python/sdk/zrok/zrok_api/models/organizationremove_organizations.py +++ b/sdk/python/sdk/zrok/zrok_api/models/inline_response2004_members.py @@ -5,7 +5,7 @@ zrok client access # noqa: E501 - OpenAPI spec version: 0.3.0 + OpenAPI spec version: 1.0.0 Generated by: https://github.com/swagger-api/swagger-codegen.git """ @@ -15,7 +15,7 @@ import re # noqa: F401 import six -class OrganizationremoveOrganizations(object): +class InlineResponse2004Members(object): """NOTE: This class is auto generated by the swagger code generator program. Do not edit the class manually. @@ -28,67 +28,67 @@ class OrganizationremoveOrganizations(object): and the value is json key in definition. """ swagger_types = { - 'token': 'str', - 'email': 'str' + 'email': 'str', + 'admin': 'bool' } attribute_map = { - 'token': 'token', - 'email': 'email' + 'email': 'email', + 'admin': 'admin' } - def __init__(self, token=None, email=None): # noqa: E501 - """OrganizationremoveOrganizations - a model defined in Swagger""" # noqa: E501 - self._token = None + def __init__(self, email=None, admin=None): # noqa: E501 + """InlineResponse2004Members - a model defined in Swagger""" # noqa: E501 self._email = None + self._admin = None self.discriminator = None - if token is not None: - self.token = token if email is not None: self.email = email - - @property - def token(self): - """Gets the token of this OrganizationremoveOrganizations. # noqa: E501 - - - :return: The token of this OrganizationremoveOrganizations. # noqa: E501 - :rtype: str - """ - return self._token - - @token.setter - def token(self, token): - """Sets the token of this OrganizationremoveOrganizations. - - - :param token: The token of this OrganizationremoveOrganizations. # noqa: E501 - :type: str - """ - - self._token = token + if admin is not None: + self.admin = admin @property def email(self): - """Gets the email of this OrganizationremoveOrganizations. # noqa: E501 + """Gets the email of this InlineResponse2004Members. # noqa: E501 - :return: The email of this OrganizationremoveOrganizations. # noqa: E501 + :return: The email of this InlineResponse2004Members. # noqa: E501 :rtype: str """ return self._email @email.setter def email(self, email): - """Sets the email of this OrganizationremoveOrganizations. + """Sets the email of this InlineResponse2004Members. - :param email: The email of this OrganizationremoveOrganizations. # noqa: E501 + :param email: The email of this InlineResponse2004Members. # noqa: E501 :type: str """ self._email = email + @property + def admin(self): + """Gets the admin of this InlineResponse2004Members. # noqa: E501 + + + :return: The admin of this InlineResponse2004Members. # noqa: E501 + :rtype: bool + """ + return self._admin + + @admin.setter + def admin(self, admin): + """Sets the admin of this InlineResponse2004Members. + + + :param admin: The admin of this InlineResponse2004Members. # noqa: E501 + :type: bool + """ + + self._admin = admin + def to_dict(self): """Returns the model properties as a dict""" result = {} @@ -110,7 +110,7 @@ class OrganizationremoveOrganizations(object): )) else: result[attr] = value - if issubclass(OrganizationremoveOrganizations, dict): + if issubclass(InlineResponse2004Members, dict): for key, value in self.items(): result[key] = value @@ -126,7 +126,7 @@ class OrganizationremoveOrganizations(object): def __eq__(self, other): """Returns true if both objects are equal""" - if not isinstance(other, OrganizationremoveOrganizations): + if not isinstance(other, InlineResponse2004Members): return False return self.__dict__ == other.__dict__ diff --git a/sdk/python/sdk/zrok/zrok_api/models/inline_response2004_organizations.py b/sdk/python/sdk/zrok/zrok_api/models/inline_response2004_organizations.py new file mode 100644 index 00000000..1996b554 --- /dev/null +++ b/sdk/python/sdk/zrok/zrok_api/models/inline_response2004_organizations.py @@ -0,0 +1,136 @@ +# coding: utf-8 + +""" + zrok + + zrok client access # noqa: E501 + + OpenAPI spec version: 1.0.0 + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +import pprint +import re # noqa: F401 + +import six + +class InlineResponse2004Organizations(object): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + """ + Attributes: + swagger_types (dict): The key is attribute name + and the value is attribute type. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + """ + swagger_types = { + 'organization_token': 'str', + 'description': 'str' + } + + attribute_map = { + 'organization_token': 'organizationToken', + 'description': 'description' + } + + def __init__(self, organization_token=None, description=None): # noqa: E501 + """InlineResponse2004Organizations - a model defined in Swagger""" # noqa: E501 + self._organization_token = None + self._description = None + self.discriminator = None + if organization_token is not None: + self.organization_token = organization_token + if description is not None: + self.description = description + + @property + def organization_token(self): + """Gets the organization_token of this InlineResponse2004Organizations. # noqa: E501 + + + :return: The organization_token of this InlineResponse2004Organizations. # noqa: E501 + :rtype: str + """ + return self._organization_token + + @organization_token.setter + def organization_token(self, organization_token): + """Sets the organization_token of this InlineResponse2004Organizations. + + + :param organization_token: The organization_token of this InlineResponse2004Organizations. # noqa: E501 + :type: str + """ + + self._organization_token = organization_token + + @property + def description(self): + """Gets the description of this InlineResponse2004Organizations. # noqa: E501 + + + :return: The description of this InlineResponse2004Organizations. # noqa: E501 + :rtype: str + """ + return self._description + + @description.setter + def description(self, description): + """Sets the description of this InlineResponse2004Organizations. + + + :param description: The description of this InlineResponse2004Organizations. # noqa: E501 + :type: str + """ + + self._description = description + + def to_dict(self): + """Returns the model properties as a dict""" + result = {} + + for attr, _ in six.iteritems(self.swagger_types): + value = getattr(self, attr) + if isinstance(value, list): + result[attr] = list(map( + lambda x: x.to_dict() if hasattr(x, "to_dict") else x, + value + )) + elif hasattr(value, "to_dict"): + result[attr] = value.to_dict() + elif isinstance(value, dict): + result[attr] = dict(map( + lambda item: (item[0], item[1].to_dict()) + if hasattr(item[1], "to_dict") else item, + value.items() + )) + else: + result[attr] = value + if issubclass(InlineResponse2004Organizations, dict): + for key, value in self.items(): + result[key] = value + + return result + + def to_str(self): + """Returns the string representation of the model""" + return pprint.pformat(self.to_dict()) + + def __repr__(self): + """For `print` and `pprint`""" + return self.to_str() + + def __eq__(self, other): + """Returns true if both objects are equal""" + if not isinstance(other, InlineResponse2004Organizations): + return False + + return self.__dict__ == other.__dict__ + + def __ne__(self, other): + """Returns true if both objects are not equal""" + return not self == other diff --git a/sdk/python/sdk/zrok/zrok_api/models/inline_response2005.py b/sdk/python/sdk/zrok/zrok_api/models/inline_response2005.py new file mode 100644 index 00000000..3fa22e9d --- /dev/null +++ b/sdk/python/sdk/zrok/zrok_api/models/inline_response2005.py @@ -0,0 +1,110 @@ +# coding: utf-8 + +""" + zrok + + zrok client access # noqa: E501 + + OpenAPI spec version: 1.0.0 + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +import pprint +import re # noqa: F401 + +import six + +class InlineResponse2005(object): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + """ + Attributes: + swagger_types (dict): The key is attribute name + and the value is attribute type. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + """ + swagger_types = { + 'memberships': 'list[InlineResponse2005Memberships]' + } + + attribute_map = { + 'memberships': 'memberships' + } + + def __init__(self, memberships=None): # noqa: E501 + """InlineResponse2005 - a model defined in Swagger""" # noqa: E501 + self._memberships = None + self.discriminator = None + if memberships is not None: + self.memberships = memberships + + @property + def memberships(self): + """Gets the memberships of this InlineResponse2005. # noqa: E501 + + + :return: The memberships of this InlineResponse2005. # noqa: E501 + :rtype: list[InlineResponse2005Memberships] + """ + return self._memberships + + @memberships.setter + def memberships(self, memberships): + """Sets the memberships of this InlineResponse2005. + + + :param memberships: The memberships of this InlineResponse2005. # noqa: E501 + :type: list[InlineResponse2005Memberships] + """ + + self._memberships = memberships + + def to_dict(self): + """Returns the model properties as a dict""" + result = {} + + for attr, _ in six.iteritems(self.swagger_types): + value = getattr(self, attr) + if isinstance(value, list): + result[attr] = list(map( + lambda x: x.to_dict() if hasattr(x, "to_dict") else x, + value + )) + elif hasattr(value, "to_dict"): + result[attr] = value.to_dict() + elif isinstance(value, dict): + result[attr] = dict(map( + lambda item: (item[0], item[1].to_dict()) + if hasattr(item[1], "to_dict") else item, + value.items() + )) + else: + result[attr] = value + if issubclass(InlineResponse2005, dict): + for key, value in self.items(): + result[key] = value + + return result + + def to_str(self): + """Returns the string representation of the model""" + return pprint.pformat(self.to_dict()) + + def __repr__(self): + """For `print` and `pprint`""" + return self.to_str() + + def __eq__(self, other): + """Returns true if both objects are equal""" + if not isinstance(other, InlineResponse2005): + return False + + return self.__dict__ == other.__dict__ + + def __ne__(self, other): + """Returns true if both objects are not equal""" + return not self == other diff --git a/sdk/python/sdk/zrok/zrok_api/models/inline_response2005_memberships.py b/sdk/python/sdk/zrok/zrok_api/models/inline_response2005_memberships.py new file mode 100644 index 00000000..915fa44e --- /dev/null +++ b/sdk/python/sdk/zrok/zrok_api/models/inline_response2005_memberships.py @@ -0,0 +1,162 @@ +# coding: utf-8 + +""" + zrok + + zrok client access # noqa: E501 + + OpenAPI spec version: 1.0.0 + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +import pprint +import re # noqa: F401 + +import six + +class InlineResponse2005Memberships(object): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + """ + Attributes: + swagger_types (dict): The key is attribute name + and the value is attribute type. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + """ + swagger_types = { + 'organization_token': 'str', + 'description': 'str', + 'admin': 'bool' + } + + attribute_map = { + 'organization_token': 'organizationToken', + 'description': 'description', + 'admin': 'admin' + } + + def __init__(self, organization_token=None, description=None, admin=None): # noqa: E501 + """InlineResponse2005Memberships - a model defined in Swagger""" # noqa: E501 + self._organization_token = None + self._description = None + self._admin = None + self.discriminator = None + if organization_token is not None: + self.organization_token = organization_token + if description is not None: + self.description = description + if admin is not None: + self.admin = admin + + @property + def organization_token(self): + """Gets the organization_token of this InlineResponse2005Memberships. # noqa: E501 + + + :return: The organization_token of this InlineResponse2005Memberships. # noqa: E501 + :rtype: str + """ + return self._organization_token + + @organization_token.setter + def organization_token(self, organization_token): + """Sets the organization_token of this InlineResponse2005Memberships. + + + :param organization_token: The organization_token of this InlineResponse2005Memberships. # noqa: E501 + :type: str + """ + + self._organization_token = organization_token + + @property + def description(self): + """Gets the description of this InlineResponse2005Memberships. # noqa: E501 + + + :return: The description of this InlineResponse2005Memberships. # noqa: E501 + :rtype: str + """ + return self._description + + @description.setter + def description(self, description): + """Sets the description of this InlineResponse2005Memberships. + + + :param description: The description of this InlineResponse2005Memberships. # noqa: E501 + :type: str + """ + + self._description = description + + @property + def admin(self): + """Gets the admin of this InlineResponse2005Memberships. # noqa: E501 + + + :return: The admin of this InlineResponse2005Memberships. # noqa: E501 + :rtype: bool + """ + return self._admin + + @admin.setter + def admin(self, admin): + """Sets the admin of this InlineResponse2005Memberships. + + + :param admin: The admin of this InlineResponse2005Memberships. # noqa: E501 + :type: bool + """ + + self._admin = admin + + def to_dict(self): + """Returns the model properties as a dict""" + result = {} + + for attr, _ in six.iteritems(self.swagger_types): + value = getattr(self, attr) + if isinstance(value, list): + result[attr] = list(map( + lambda x: x.to_dict() if hasattr(x, "to_dict") else x, + value + )) + elif hasattr(value, "to_dict"): + result[attr] = value.to_dict() + elif isinstance(value, dict): + result[attr] = dict(map( + lambda item: (item[0], item[1].to_dict()) + if hasattr(item[1], "to_dict") else item, + value.items() + )) + else: + result[attr] = value + if issubclass(InlineResponse2005Memberships, dict): + for key, value in self.items(): + result[key] = value + + return result + + def to_str(self): + """Returns the string representation of the model""" + return pprint.pformat(self.to_dict()) + + def __repr__(self): + """For `print` and `pprint`""" + return self.to_str() + + def __eq__(self, other): + """Returns true if both objects are equal""" + if not isinstance(other, InlineResponse2005Memberships): + return False + + return self.__dict__ == other.__dict__ + + def __ne__(self, other): + """Returns true if both objects are not equal""" + return not self == other diff --git a/sdk/python/sdk/zrok/zrok_api/models/inline_response2002_organizations.py b/sdk/python/sdk/zrok/zrok_api/models/inline_response2005_organizations.py similarity index 80% rename from sdk/python/sdk/zrok/zrok_api/models/inline_response2002_organizations.py rename to sdk/python/sdk/zrok/zrok_api/models/inline_response2005_organizations.py index b80da9bb..63e7153e 100644 --- a/sdk/python/sdk/zrok/zrok_api/models/inline_response2002_organizations.py +++ b/sdk/python/sdk/zrok/zrok_api/models/inline_response2005_organizations.py @@ -5,7 +5,7 @@ zrok client access # noqa: E501 - OpenAPI spec version: 0.3.0 + OpenAPI spec version: 1.0.0 Generated by: https://github.com/swagger-api/swagger-codegen.git """ @@ -15,7 +15,7 @@ import re # noqa: F401 import six -class InlineResponse2002Organizations(object): +class InlineResponse2005Organizations(object): """NOTE: This class is auto generated by the swagger code generator program. Do not edit the class manually. @@ -38,7 +38,7 @@ class InlineResponse2002Organizations(object): } def __init__(self, token=None, description=None): # noqa: E501 - """InlineResponse2002Organizations - a model defined in Swagger""" # noqa: E501 + """InlineResponse2005Organizations - a model defined in Swagger""" # noqa: E501 self._token = None self._description = None self.discriminator = None @@ -49,20 +49,20 @@ class InlineResponse2002Organizations(object): @property def token(self): - """Gets the token of this InlineResponse2002Organizations. # noqa: E501 + """Gets the token of this InlineResponse2005Organizations. # noqa: E501 - :return: The token of this InlineResponse2002Organizations. # noqa: E501 + :return: The token of this InlineResponse2005Organizations. # noqa: E501 :rtype: str """ return self._token @token.setter def token(self, token): - """Sets the token of this InlineResponse2002Organizations. + """Sets the token of this InlineResponse2005Organizations. - :param token: The token of this InlineResponse2002Organizations. # noqa: E501 + :param token: The token of this InlineResponse2005Organizations. # noqa: E501 :type: str """ @@ -70,20 +70,20 @@ class InlineResponse2002Organizations(object): @property def description(self): - """Gets the description of this InlineResponse2002Organizations. # noqa: E501 + """Gets the description of this InlineResponse2005Organizations. # noqa: E501 - :return: The description of this InlineResponse2002Organizations. # noqa: E501 + :return: The description of this InlineResponse2005Organizations. # noqa: E501 :rtype: str """ return self._description @description.setter def description(self, description): - """Sets the description of this InlineResponse2002Organizations. + """Sets the description of this InlineResponse2005Organizations. - :param description: The description of this InlineResponse2002Organizations. # noqa: E501 + :param description: The description of this InlineResponse2005Organizations. # noqa: E501 :type: str """ @@ -110,7 +110,7 @@ class InlineResponse2002Organizations(object): )) else: result[attr] = value - if issubclass(InlineResponse2002Organizations, dict): + if issubclass(InlineResponse2005Organizations, dict): for key, value in self.items(): result[key] = value @@ -126,7 +126,7 @@ class InlineResponse2002Organizations(object): def __eq__(self, other): """Returns true if both objects are equal""" - if not isinstance(other, InlineResponse2002Organizations): + if not isinstance(other, InlineResponse2005Organizations): return False return self.__dict__ == other.__dict__ diff --git a/sdk/python/sdk/zrok/zrok_api/models/register_response.py b/sdk/python/sdk/zrok/zrok_api/models/inline_response2006.py similarity index 68% rename from sdk/python/sdk/zrok/zrok_api/models/register_response.py rename to sdk/python/sdk/zrok/zrok_api/models/inline_response2006.py index a0b7ac03..5757905a 100644 --- a/sdk/python/sdk/zrok/zrok_api/models/register_response.py +++ b/sdk/python/sdk/zrok/zrok_api/models/inline_response2006.py @@ -5,7 +5,7 @@ zrok client access # noqa: E501 - OpenAPI spec version: 0.3.0 + OpenAPI spec version: 1.0.0 Generated by: https://github.com/swagger-api/swagger-codegen.git """ @@ -15,7 +15,7 @@ import re # noqa: F401 import six -class RegisterResponse(object): +class InlineResponse2006(object): """NOTE: This class is auto generated by the swagger code generator program. Do not edit the class manually. @@ -28,40 +28,40 @@ class RegisterResponse(object): and the value is json key in definition. """ swagger_types = { - 'token': 'str' + 'sparklines': 'list[Metrics]' } attribute_map = { - 'token': 'token' + 'sparklines': 'sparklines' } - def __init__(self, token=None): # noqa: E501 - """RegisterResponse - a model defined in Swagger""" # noqa: E501 - self._token = None + def __init__(self, sparklines=None): # noqa: E501 + """InlineResponse2006 - a model defined in Swagger""" # noqa: E501 + self._sparklines = None self.discriminator = None - if token is not None: - self.token = token + if sparklines is not None: + self.sparklines = sparklines @property - def token(self): - """Gets the token of this RegisterResponse. # noqa: E501 + def sparklines(self): + """Gets the sparklines of this InlineResponse2006. # noqa: E501 - :return: The token of this RegisterResponse. # noqa: E501 - :rtype: str + :return: The sparklines of this InlineResponse2006. # noqa: E501 + :rtype: list[Metrics] """ - return self._token + return self._sparklines - @token.setter - def token(self, token): - """Sets the token of this RegisterResponse. + @sparklines.setter + def sparklines(self, sparklines): + """Sets the sparklines of this InlineResponse2006. - :param token: The token of this RegisterResponse. # noqa: E501 - :type: str + :param sparklines: The sparklines of this InlineResponse2006. # noqa: E501 + :type: list[Metrics] """ - self._token = token + self._sparklines = sparklines def to_dict(self): """Returns the model properties as a dict""" @@ -84,7 +84,7 @@ class RegisterResponse(object): )) else: result[attr] = value - if issubclass(RegisterResponse, dict): + if issubclass(InlineResponse2006, dict): for key, value in self.items(): result[key] = value @@ -100,7 +100,7 @@ class RegisterResponse(object): def __eq__(self, other): """Returns true if both objects are equal""" - if not isinstance(other, RegisterResponse): + if not isinstance(other, InlineResponse2006): return False return self.__dict__ == other.__dict__ diff --git a/sdk/python/sdk/zrok/zrok_api/models/inline_response2003_memberships.py b/sdk/python/sdk/zrok/zrok_api/models/inline_response2006_memberships.py similarity index 77% rename from sdk/python/sdk/zrok/zrok_api/models/inline_response2003_memberships.py rename to sdk/python/sdk/zrok/zrok_api/models/inline_response2006_memberships.py index e7d293af..c1cf8e65 100644 --- a/sdk/python/sdk/zrok/zrok_api/models/inline_response2003_memberships.py +++ b/sdk/python/sdk/zrok/zrok_api/models/inline_response2006_memberships.py @@ -5,7 +5,7 @@ zrok client access # noqa: E501 - OpenAPI spec version: 0.3.0 + OpenAPI spec version: 1.0.0 Generated by: https://github.com/swagger-api/swagger-codegen.git """ @@ -15,7 +15,7 @@ import re # noqa: F401 import six -class InlineResponse2003Memberships(object): +class InlineResponse2006Memberships(object): """NOTE: This class is auto generated by the swagger code generator program. Do not edit the class manually. @@ -40,7 +40,7 @@ class InlineResponse2003Memberships(object): } def __init__(self, token=None, description=None, admin=None): # noqa: E501 - """InlineResponse2003Memberships - a model defined in Swagger""" # noqa: E501 + """InlineResponse2006Memberships - a model defined in Swagger""" # noqa: E501 self._token = None self._description = None self._admin = None @@ -54,20 +54,20 @@ class InlineResponse2003Memberships(object): @property def token(self): - """Gets the token of this InlineResponse2003Memberships. # noqa: E501 + """Gets the token of this InlineResponse2006Memberships. # noqa: E501 - :return: The token of this InlineResponse2003Memberships. # noqa: E501 + :return: The token of this InlineResponse2006Memberships. # noqa: E501 :rtype: str """ return self._token @token.setter def token(self, token): - """Sets the token of this InlineResponse2003Memberships. + """Sets the token of this InlineResponse2006Memberships. - :param token: The token of this InlineResponse2003Memberships. # noqa: E501 + :param token: The token of this InlineResponse2006Memberships. # noqa: E501 :type: str """ @@ -75,20 +75,20 @@ class InlineResponse2003Memberships(object): @property def description(self): - """Gets the description of this InlineResponse2003Memberships. # noqa: E501 + """Gets the description of this InlineResponse2006Memberships. # noqa: E501 - :return: The description of this InlineResponse2003Memberships. # noqa: E501 + :return: The description of this InlineResponse2006Memberships. # noqa: E501 :rtype: str """ return self._description @description.setter def description(self, description): - """Sets the description of this InlineResponse2003Memberships. + """Sets the description of this InlineResponse2006Memberships. - :param description: The description of this InlineResponse2003Memberships. # noqa: E501 + :param description: The description of this InlineResponse2006Memberships. # noqa: E501 :type: str """ @@ -96,20 +96,20 @@ class InlineResponse2003Memberships(object): @property def admin(self): - """Gets the admin of this InlineResponse2003Memberships. # noqa: E501 + """Gets the admin of this InlineResponse2006Memberships. # noqa: E501 - :return: The admin of this InlineResponse2003Memberships. # noqa: E501 + :return: The admin of this InlineResponse2006Memberships. # noqa: E501 :rtype: bool """ return self._admin @admin.setter def admin(self, admin): - """Sets the admin of this InlineResponse2003Memberships. + """Sets the admin of this InlineResponse2006Memberships. - :param admin: The admin of this InlineResponse2003Memberships. # noqa: E501 + :param admin: The admin of this InlineResponse2006Memberships. # noqa: E501 :type: bool """ @@ -136,7 +136,7 @@ class InlineResponse2003Memberships(object): )) else: result[attr] = value - if issubclass(InlineResponse2003Memberships, dict): + if issubclass(InlineResponse2006Memberships, dict): for key, value in self.items(): result[key] = value @@ -152,7 +152,7 @@ class InlineResponse2003Memberships(object): def __eq__(self, other): """Returns true if both objects are equal""" - if not isinstance(other, InlineResponse2003Memberships): + if not isinstance(other, InlineResponse2006Memberships): return False return self.__dict__ == other.__dict__ diff --git a/sdk/python/sdk/zrok/zrok_api/models/create_frontend_response.py b/sdk/python/sdk/zrok/zrok_api/models/inline_response2007.py similarity index 68% rename from sdk/python/sdk/zrok/zrok_api/models/create_frontend_response.py rename to sdk/python/sdk/zrok/zrok_api/models/inline_response2007.py index d93e99ed..af000e8c 100644 --- a/sdk/python/sdk/zrok/zrok_api/models/create_frontend_response.py +++ b/sdk/python/sdk/zrok/zrok_api/models/inline_response2007.py @@ -5,7 +5,7 @@ zrok client access # noqa: E501 - OpenAPI spec version: 0.3.0 + OpenAPI spec version: 1.0.0 Generated by: https://github.com/swagger-api/swagger-codegen.git """ @@ -15,7 +15,7 @@ import re # noqa: F401 import six -class CreateFrontendResponse(object): +class InlineResponse2007(object): """NOTE: This class is auto generated by the swagger code generator program. Do not edit the class manually. @@ -28,40 +28,40 @@ class CreateFrontendResponse(object): and the value is json key in definition. """ swagger_types = { - 'token': 'str' + 'sparklines': 'list[Metrics]' } attribute_map = { - 'token': 'token' + 'sparklines': 'sparklines' } - def __init__(self, token=None): # noqa: E501 - """CreateFrontendResponse - a model defined in Swagger""" # noqa: E501 - self._token = None + def __init__(self, sparklines=None): # noqa: E501 + """InlineResponse2007 - a model defined in Swagger""" # noqa: E501 + self._sparklines = None self.discriminator = None - if token is not None: - self.token = token + if sparklines is not None: + self.sparklines = sparklines @property - def token(self): - """Gets the token of this CreateFrontendResponse. # noqa: E501 + def sparklines(self): + """Gets the sparklines of this InlineResponse2007. # noqa: E501 - :return: The token of this CreateFrontendResponse. # noqa: E501 - :rtype: str + :return: The sparklines of this InlineResponse2007. # noqa: E501 + :rtype: list[Metrics] """ - return self._token + return self._sparklines - @token.setter - def token(self, token): - """Sets the token of this CreateFrontendResponse. + @sparklines.setter + def sparklines(self, sparklines): + """Sets the sparklines of this InlineResponse2007. - :param token: The token of this CreateFrontendResponse. # noqa: E501 - :type: str + :param sparklines: The sparklines of this InlineResponse2007. # noqa: E501 + :type: list[Metrics] """ - self._token = token + self._sparklines = sparklines def to_dict(self): """Returns the model properties as a dict""" @@ -84,7 +84,7 @@ class CreateFrontendResponse(object): )) else: result[attr] = value - if issubclass(CreateFrontendResponse, dict): + if issubclass(InlineResponse2007, dict): for key, value in self.items(): result[key] = value @@ -100,7 +100,7 @@ class CreateFrontendResponse(object): def __eq__(self, other): """Returns true if both objects are equal""" - if not isinstance(other, CreateFrontendResponse): + if not isinstance(other, InlineResponse2007): return False return self.__dict__ == other.__dict__ diff --git a/sdk/python/sdk/zrok/zrok_api/models/inline_response201.py b/sdk/python/sdk/zrok/zrok_api/models/inline_response201.py index a5672fe1..2cc96e64 100644 --- a/sdk/python/sdk/zrok/zrok_api/models/inline_response201.py +++ b/sdk/python/sdk/zrok/zrok_api/models/inline_response201.py @@ -5,7 +5,7 @@ zrok client access # noqa: E501 - OpenAPI spec version: 0.3.0 + OpenAPI spec version: 1.0.0 Generated by: https://github.com/swagger-api/swagger-codegen.git """ @@ -28,66 +28,40 @@ class InlineResponse201(object): and the value is json key in definition. """ swagger_types = { - 'identity': 'str', - 'cfg': 'str' + 'frontend_token': 'str' } attribute_map = { - 'identity': 'identity', - 'cfg': 'cfg' + 'frontend_token': 'frontendToken' } - def __init__(self, identity=None, cfg=None): # noqa: E501 + def __init__(self, frontend_token=None): # noqa: E501 """InlineResponse201 - a model defined in Swagger""" # noqa: E501 - self._identity = None - self._cfg = None + self._frontend_token = None self.discriminator = None - if identity is not None: - self.identity = identity - if cfg is not None: - self.cfg = cfg + if frontend_token is not None: + self.frontend_token = frontend_token @property - def identity(self): - """Gets the identity of this InlineResponse201. # noqa: E501 + def frontend_token(self): + """Gets the frontend_token of this InlineResponse201. # noqa: E501 - :return: The identity of this InlineResponse201. # noqa: E501 + :return: The frontend_token of this InlineResponse201. # noqa: E501 :rtype: str """ - return self._identity + return self._frontend_token - @identity.setter - def identity(self, identity): - """Sets the identity of this InlineResponse201. + @frontend_token.setter + def frontend_token(self, frontend_token): + """Sets the frontend_token of this InlineResponse201. - :param identity: The identity of this InlineResponse201. # noqa: E501 + :param frontend_token: The frontend_token of this InlineResponse201. # noqa: E501 :type: str """ - self._identity = identity - - @property - def cfg(self): - """Gets the cfg of this InlineResponse201. # noqa: E501 - - - :return: The cfg of this InlineResponse201. # noqa: E501 - :rtype: str - """ - return self._cfg - - @cfg.setter - def cfg(self, cfg): - """Sets the cfg of this InlineResponse201. - - - :param cfg: The cfg of this InlineResponse201. # noqa: E501 - :type: str - """ - - self._cfg = cfg + self._frontend_token = frontend_token def to_dict(self): """Returns the model properties as a dict""" diff --git a/sdk/python/sdk/zrok/zrok_api/models/enable_response.py b/sdk/python/sdk/zrok/zrok_api/models/inline_response2011.py similarity index 79% rename from sdk/python/sdk/zrok/zrok_api/models/enable_response.py rename to sdk/python/sdk/zrok/zrok_api/models/inline_response2011.py index 66c8af2f..9d80730a 100644 --- a/sdk/python/sdk/zrok/zrok_api/models/enable_response.py +++ b/sdk/python/sdk/zrok/zrok_api/models/inline_response2011.py @@ -5,7 +5,7 @@ zrok client access # noqa: E501 - OpenAPI spec version: 0.3.0 + OpenAPI spec version: 1.0.0 Generated by: https://github.com/swagger-api/swagger-codegen.git """ @@ -15,7 +15,7 @@ import re # noqa: F401 import six -class EnableResponse(object): +class InlineResponse2011(object): """NOTE: This class is auto generated by the swagger code generator program. Do not edit the class manually. @@ -38,7 +38,7 @@ class EnableResponse(object): } def __init__(self, identity=None, cfg=None): # noqa: E501 - """EnableResponse - a model defined in Swagger""" # noqa: E501 + """InlineResponse2011 - a model defined in Swagger""" # noqa: E501 self._identity = None self._cfg = None self.discriminator = None @@ -49,20 +49,20 @@ class EnableResponse(object): @property def identity(self): - """Gets the identity of this EnableResponse. # noqa: E501 + """Gets the identity of this InlineResponse2011. # noqa: E501 - :return: The identity of this EnableResponse. # noqa: E501 + :return: The identity of this InlineResponse2011. # noqa: E501 :rtype: str """ return self._identity @identity.setter def identity(self, identity): - """Sets the identity of this EnableResponse. + """Sets the identity of this InlineResponse2011. - :param identity: The identity of this EnableResponse. # noqa: E501 + :param identity: The identity of this InlineResponse2011. # noqa: E501 :type: str """ @@ -70,20 +70,20 @@ class EnableResponse(object): @property def cfg(self): - """Gets the cfg of this EnableResponse. # noqa: E501 + """Gets the cfg of this InlineResponse2011. # noqa: E501 - :return: The cfg of this EnableResponse. # noqa: E501 + :return: The cfg of this InlineResponse2011. # noqa: E501 :rtype: str """ return self._cfg @cfg.setter def cfg(self, cfg): - """Sets the cfg of this EnableResponse. + """Sets the cfg of this InlineResponse2011. - :param cfg: The cfg of this EnableResponse. # noqa: E501 + :param cfg: The cfg of this InlineResponse2011. # noqa: E501 :type: str """ @@ -110,7 +110,7 @@ class EnableResponse(object): )) else: result[attr] = value - if issubclass(EnableResponse, dict): + if issubclass(InlineResponse2011, dict): for key, value in self.items(): result[key] = value @@ -126,7 +126,7 @@ class EnableResponse(object): def __eq__(self, other): """Returns true if both objects are equal""" - if not isinstance(other, EnableResponse): + if not isinstance(other, InlineResponse2011): return False return self.__dict__ == other.__dict__ diff --git a/sdk/python/sdk/zrok/zrok_api/models/inline_response2012.py b/sdk/python/sdk/zrok/zrok_api/models/inline_response2012.py new file mode 100644 index 00000000..dee97a61 --- /dev/null +++ b/sdk/python/sdk/zrok/zrok_api/models/inline_response2012.py @@ -0,0 +1,110 @@ +# coding: utf-8 + +""" + zrok + + zrok client access # noqa: E501 + + OpenAPI spec version: 1.0.0 + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +import pprint +import re # noqa: F401 + +import six + +class InlineResponse2012(object): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + """ + Attributes: + swagger_types (dict): The key is attribute name + and the value is attribute type. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + """ + swagger_types = { + 'organization_token': 'str' + } + + attribute_map = { + 'organization_token': 'organizationToken' + } + + def __init__(self, organization_token=None): # noqa: E501 + """InlineResponse2012 - a model defined in Swagger""" # noqa: E501 + self._organization_token = None + self.discriminator = None + if organization_token is not None: + self.organization_token = organization_token + + @property + def organization_token(self): + """Gets the organization_token of this InlineResponse2012. # noqa: E501 + + + :return: The organization_token of this InlineResponse2012. # noqa: E501 + :rtype: str + """ + return self._organization_token + + @organization_token.setter + def organization_token(self, organization_token): + """Sets the organization_token of this InlineResponse2012. + + + :param organization_token: The organization_token of this InlineResponse2012. # noqa: E501 + :type: str + """ + + self._organization_token = organization_token + + def to_dict(self): + """Returns the model properties as a dict""" + result = {} + + for attr, _ in six.iteritems(self.swagger_types): + value = getattr(self, attr) + if isinstance(value, list): + result[attr] = list(map( + lambda x: x.to_dict() if hasattr(x, "to_dict") else x, + value + )) + elif hasattr(value, "to_dict"): + result[attr] = value.to_dict() + elif isinstance(value, dict): + result[attr] = dict(map( + lambda item: (item[0], item[1].to_dict()) + if hasattr(item[1], "to_dict") else item, + value.items() + )) + else: + result[attr] = value + if issubclass(InlineResponse2012, dict): + for key, value in self.items(): + result[key] = value + + return result + + def to_str(self): + """Returns the string representation of the model""" + return pprint.pformat(self.to_dict()) + + def __repr__(self): + """For `print` and `pprint`""" + return self.to_str() + + def __eq__(self, other): + """Returns true if both objects are equal""" + if not isinstance(other, InlineResponse2012): + return False + + return self.__dict__ == other.__dict__ + + def __ne__(self, other): + """Returns true if both objects are not equal""" + return not self == other diff --git a/sdk/python/sdk/zrok/zrok_api/models/access_response.py b/sdk/python/sdk/zrok/zrok_api/models/inline_response2013.py similarity index 78% rename from sdk/python/sdk/zrok/zrok_api/models/access_response.py rename to sdk/python/sdk/zrok/zrok_api/models/inline_response2013.py index ba02584f..34a37b49 100644 --- a/sdk/python/sdk/zrok/zrok_api/models/access_response.py +++ b/sdk/python/sdk/zrok/zrok_api/models/inline_response2013.py @@ -5,7 +5,7 @@ zrok client access # noqa: E501 - OpenAPI spec version: 0.3.0 + OpenAPI spec version: 1.0.0 Generated by: https://github.com/swagger-api/swagger-codegen.git """ @@ -15,7 +15,7 @@ import re # noqa: F401 import six -class AccessResponse(object): +class InlineResponse2013(object): """NOTE: This class is auto generated by the swagger code generator program. Do not edit the class manually. @@ -38,7 +38,7 @@ class AccessResponse(object): } def __init__(self, frontend_token=None, backend_mode=None): # noqa: E501 - """AccessResponse - a model defined in Swagger""" # noqa: E501 + """InlineResponse2013 - a model defined in Swagger""" # noqa: E501 self._frontend_token = None self._backend_mode = None self.discriminator = None @@ -49,20 +49,20 @@ class AccessResponse(object): @property def frontend_token(self): - """Gets the frontend_token of this AccessResponse. # noqa: E501 + """Gets the frontend_token of this InlineResponse2013. # noqa: E501 - :return: The frontend_token of this AccessResponse. # noqa: E501 + :return: The frontend_token of this InlineResponse2013. # noqa: E501 :rtype: str """ return self._frontend_token @frontend_token.setter def frontend_token(self, frontend_token): - """Sets the frontend_token of this AccessResponse. + """Sets the frontend_token of this InlineResponse2013. - :param frontend_token: The frontend_token of this AccessResponse. # noqa: E501 + :param frontend_token: The frontend_token of this InlineResponse2013. # noqa: E501 :type: str """ @@ -70,20 +70,20 @@ class AccessResponse(object): @property def backend_mode(self): - """Gets the backend_mode of this AccessResponse. # noqa: E501 + """Gets the backend_mode of this InlineResponse2013. # noqa: E501 - :return: The backend_mode of this AccessResponse. # noqa: E501 + :return: The backend_mode of this InlineResponse2013. # noqa: E501 :rtype: str """ return self._backend_mode @backend_mode.setter def backend_mode(self, backend_mode): - """Sets the backend_mode of this AccessResponse. + """Sets the backend_mode of this InlineResponse2013. - :param backend_mode: The backend_mode of this AccessResponse. # noqa: E501 + :param backend_mode: The backend_mode of this InlineResponse2013. # noqa: E501 :type: str """ @@ -110,7 +110,7 @@ class AccessResponse(object): )) else: result[attr] = value - if issubclass(AccessResponse, dict): + if issubclass(InlineResponse2013, dict): for key, value in self.items(): result[key] = value @@ -126,7 +126,7 @@ class AccessResponse(object): def __eq__(self, other): """Returns true if both objects are equal""" - if not isinstance(other, AccessResponse): + if not isinstance(other, InlineResponse2013): return False return self.__dict__ == other.__dict__ diff --git a/sdk/python/sdk/zrok/zrok_api/models/verify_response.py b/sdk/python/sdk/zrok/zrok_api/models/inline_response400.py similarity index 72% rename from sdk/python/sdk/zrok/zrok_api/models/verify_response.py rename to sdk/python/sdk/zrok/zrok_api/models/inline_response400.py index d6b9a617..ca4cc69d 100644 --- a/sdk/python/sdk/zrok/zrok_api/models/verify_response.py +++ b/sdk/python/sdk/zrok/zrok_api/models/inline_response400.py @@ -5,7 +5,7 @@ zrok client access # noqa: E501 - OpenAPI spec version: 0.3.0 + OpenAPI spec version: 1.0.0 Generated by: https://github.com/swagger-api/swagger-codegen.git """ @@ -15,7 +15,7 @@ import re # noqa: F401 import six -class VerifyResponse(object): +class InlineResponse400(object): """NOTE: This class is auto generated by the swagger code generator program. Do not edit the class manually. @@ -28,40 +28,40 @@ class VerifyResponse(object): and the value is json key in definition. """ swagger_types = { - 'email': 'str' + 'message': 'str' } attribute_map = { - 'email': 'email' + 'message': 'message' } - def __init__(self, email=None): # noqa: E501 - """VerifyResponse - a model defined in Swagger""" # noqa: E501 - self._email = None + def __init__(self, message=None): # noqa: E501 + """InlineResponse400 - a model defined in Swagger""" # noqa: E501 + self._message = None self.discriminator = None - if email is not None: - self.email = email + if message is not None: + self.message = message @property - def email(self): - """Gets the email of this VerifyResponse. # noqa: E501 + def message(self): + """Gets the message of this InlineResponse400. # noqa: E501 - :return: The email of this VerifyResponse. # noqa: E501 + :return: The message of this InlineResponse400. # noqa: E501 :rtype: str """ - return self._email + return self._message - @email.setter - def email(self, email): - """Sets the email of this VerifyResponse. + @message.setter + def message(self, message): + """Sets the message of this InlineResponse400. - :param email: The email of this VerifyResponse. # noqa: E501 + :param message: The message of this InlineResponse400. # noqa: E501 :type: str """ - self._email = email + self._message = message def to_dict(self): """Returns the model properties as a dict""" @@ -84,7 +84,7 @@ class VerifyResponse(object): )) else: result[attr] = value - if issubclass(VerifyResponse, dict): + if issubclass(InlineResponse400, dict): for key, value in self.items(): result[key] = value @@ -100,7 +100,7 @@ class VerifyResponse(object): def __eq__(self, other): """Returns true if both objects are equal""" - if not isinstance(other, VerifyResponse): + if not isinstance(other, InlineResponse400): return False return self.__dict__ == other.__dict__ diff --git a/sdk/python/sdk/zrok/zrok_api/models/invite_request.py b/sdk/python/sdk/zrok/zrok_api/models/invite_body.py similarity index 69% rename from sdk/python/sdk/zrok/zrok_api/models/invite_request.py rename to sdk/python/sdk/zrok/zrok_api/models/invite_body.py index cd4a2d92..bb4840d5 100644 --- a/sdk/python/sdk/zrok/zrok_api/models/invite_request.py +++ b/sdk/python/sdk/zrok/zrok_api/models/invite_body.py @@ -5,7 +5,7 @@ zrok client access # noqa: E501 - OpenAPI spec version: 0.3.0 + OpenAPI spec version: 1.0.0 Generated by: https://github.com/swagger-api/swagger-codegen.git """ @@ -15,7 +15,7 @@ import re # noqa: F401 import six -class InviteRequest(object): +class InviteBody(object): """NOTE: This class is auto generated by the swagger code generator program. Do not edit the class manually. @@ -29,65 +29,65 @@ class InviteRequest(object): """ swagger_types = { 'email': 'str', - 'token': 'str' + 'invite_token': 'str' } attribute_map = { 'email': 'email', - 'token': 'token' + 'invite_token': 'inviteToken' } - def __init__(self, email=None, token=None): # noqa: E501 - """InviteRequest - a model defined in Swagger""" # noqa: E501 + def __init__(self, email=None, invite_token=None): # noqa: E501 + """InviteBody - a model defined in Swagger""" # noqa: E501 self._email = None - self._token = None + self._invite_token = None self.discriminator = None if email is not None: self.email = email - if token is not None: - self.token = token + if invite_token is not None: + self.invite_token = invite_token @property def email(self): - """Gets the email of this InviteRequest. # noqa: E501 + """Gets the email of this InviteBody. # noqa: E501 - :return: The email of this InviteRequest. # noqa: E501 + :return: The email of this InviteBody. # noqa: E501 :rtype: str """ return self._email @email.setter def email(self, email): - """Sets the email of this InviteRequest. + """Sets the email of this InviteBody. - :param email: The email of this InviteRequest. # noqa: E501 + :param email: The email of this InviteBody. # noqa: E501 :type: str """ self._email = email @property - def token(self): - """Gets the token of this InviteRequest. # noqa: E501 + def invite_token(self): + """Gets the invite_token of this InviteBody. # noqa: E501 - :return: The token of this InviteRequest. # noqa: E501 + :return: The invite_token of this InviteBody. # noqa: E501 :rtype: str """ - return self._token + return self._invite_token - @token.setter - def token(self, token): - """Sets the token of this InviteRequest. + @invite_token.setter + def invite_token(self, invite_token): + """Sets the invite_token of this InviteBody. - :param token: The token of this InviteRequest. # noqa: E501 + :param invite_token: The invite_token of this InviteBody. # noqa: E501 :type: str """ - self._token = token + self._invite_token = invite_token def to_dict(self): """Returns the model properties as a dict""" @@ -110,7 +110,7 @@ class InviteRequest(object): )) else: result[attr] = value - if issubclass(InviteRequest, dict): + if issubclass(InviteBody, dict): for key, value in self.items(): result[key] = value @@ -126,7 +126,7 @@ class InviteRequest(object): def __eq__(self, other): """Returns true if both objects are equal""" - if not isinstance(other, InviteRequest): + if not isinstance(other, InviteBody): return False return self.__dict__ == other.__dict__ diff --git a/sdk/python/sdk/zrok/zrok_api/models/login_request.py b/sdk/python/sdk/zrok/zrok_api/models/login_body.py similarity index 80% rename from sdk/python/sdk/zrok/zrok_api/models/login_request.py rename to sdk/python/sdk/zrok/zrok_api/models/login_body.py index c91bcc2b..127672ca 100644 --- a/sdk/python/sdk/zrok/zrok_api/models/login_request.py +++ b/sdk/python/sdk/zrok/zrok_api/models/login_body.py @@ -5,7 +5,7 @@ zrok client access # noqa: E501 - OpenAPI spec version: 0.3.0 + OpenAPI spec version: 1.0.0 Generated by: https://github.com/swagger-api/swagger-codegen.git """ @@ -15,7 +15,7 @@ import re # noqa: F401 import six -class LoginRequest(object): +class LoginBody(object): """NOTE: This class is auto generated by the swagger code generator program. Do not edit the class manually. @@ -38,7 +38,7 @@ class LoginRequest(object): } def __init__(self, email=None, password=None): # noqa: E501 - """LoginRequest - a model defined in Swagger""" # noqa: E501 + """LoginBody - a model defined in Swagger""" # noqa: E501 self._email = None self._password = None self.discriminator = None @@ -49,20 +49,20 @@ class LoginRequest(object): @property def email(self): - """Gets the email of this LoginRequest. # noqa: E501 + """Gets the email of this LoginBody. # noqa: E501 - :return: The email of this LoginRequest. # noqa: E501 + :return: The email of this LoginBody. # noqa: E501 :rtype: str """ return self._email @email.setter def email(self, email): - """Sets the email of this LoginRequest. + """Sets the email of this LoginBody. - :param email: The email of this LoginRequest. # noqa: E501 + :param email: The email of this LoginBody. # noqa: E501 :type: str """ @@ -70,20 +70,20 @@ class LoginRequest(object): @property def password(self): - """Gets the password of this LoginRequest. # noqa: E501 + """Gets the password of this LoginBody. # noqa: E501 - :return: The password of this LoginRequest. # noqa: E501 + :return: The password of this LoginBody. # noqa: E501 :rtype: str """ return self._password @password.setter def password(self, password): - """Sets the password of this LoginRequest. + """Sets the password of this LoginBody. - :param password: The password of this LoginRequest. # noqa: E501 + :param password: The password of this LoginBody. # noqa: E501 :type: str """ @@ -110,7 +110,7 @@ class LoginRequest(object): )) else: result[attr] = value - if issubclass(LoginRequest, dict): + if issubclass(LoginBody, dict): for key, value in self.items(): result[key] = value @@ -126,7 +126,7 @@ class LoginRequest(object): def __eq__(self, other): """Returns true if both objects are equal""" - if not isinstance(other, LoginRequest): + if not isinstance(other, LoginBody): return False return self.__dict__ == other.__dict__ diff --git a/sdk/python/sdk/zrok/zrok_api/models/login_response.py b/sdk/python/sdk/zrok/zrok_api/models/login_response.py deleted file mode 100644 index 65178a79..00000000 --- a/sdk/python/sdk/zrok/zrok_api/models/login_response.py +++ /dev/null @@ -1,84 +0,0 @@ -# coding: utf-8 - -""" - zrok - - zrok client access # noqa: E501 - - OpenAPI spec version: 0.3.0 - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - -class LoginResponse(object): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = { - } - - attribute_map = { - } - - def __init__(self): # noqa: E501 - """LoginResponse - a model defined in Swagger""" # noqa: E501 - self.discriminator = None - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list(map( - lambda x: x.to_dict() if hasattr(x, "to_dict") else x, - value - )) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict(map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") else item, - value.items() - )) - else: - result[attr] = value - if issubclass(LoginResponse, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, LoginResponse): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/sdk/python/sdk/zrok/zrok_api/models/metrics.py b/sdk/python/sdk/zrok/zrok_api/models/metrics.py index 6fe13362..d7dd52f8 100644 --- a/sdk/python/sdk/zrok/zrok_api/models/metrics.py +++ b/sdk/python/sdk/zrok/zrok_api/models/metrics.py @@ -5,7 +5,7 @@ zrok client access # noqa: E501 - OpenAPI spec version: 0.3.0 + OpenAPI spec version: 1.0.0 Generated by: https://github.com/swagger-api/swagger-codegen.git """ diff --git a/sdk/python/sdk/zrok/zrok_api/models/metrics_sample.py b/sdk/python/sdk/zrok/zrok_api/models/metrics_sample.py index 70db528d..8e297c43 100644 --- a/sdk/python/sdk/zrok/zrok_api/models/metrics_sample.py +++ b/sdk/python/sdk/zrok/zrok_api/models/metrics_sample.py @@ -5,7 +5,7 @@ zrok client access # noqa: E501 - OpenAPI spec version: 0.3.0 + OpenAPI spec version: 1.0.0 Generated by: https://github.com/swagger-api/swagger-codegen.git """ diff --git a/sdk/python/sdk/zrok/zrok_api/models/organization_add_body.py b/sdk/python/sdk/zrok/zrok_api/models/organization_add_body.py index 918758ab..48fd06da 100644 --- a/sdk/python/sdk/zrok/zrok_api/models/organization_add_body.py +++ b/sdk/python/sdk/zrok/zrok_api/models/organization_add_body.py @@ -5,7 +5,7 @@ zrok client access # noqa: E501 - OpenAPI spec version: 0.3.0 + OpenAPI spec version: 1.0.0 Generated by: https://github.com/swagger-api/swagger-codegen.git """ @@ -28,50 +28,50 @@ class OrganizationAddBody(object): and the value is json key in definition. """ swagger_types = { - 'token': 'str', + 'organization_token': 'str', 'email': 'str', 'admin': 'bool' } attribute_map = { - 'token': 'token', + 'organization_token': 'organizationToken', 'email': 'email', 'admin': 'admin' } - def __init__(self, token=None, email=None, admin=None): # noqa: E501 + def __init__(self, organization_token=None, email=None, admin=None): # noqa: E501 """OrganizationAddBody - a model defined in Swagger""" # noqa: E501 - self._token = None + self._organization_token = None self._email = None self._admin = None self.discriminator = None - if token is not None: - self.token = token + if organization_token is not None: + self.organization_token = organization_token if email is not None: self.email = email if admin is not None: self.admin = admin @property - def token(self): - """Gets the token of this OrganizationAddBody. # noqa: E501 + def organization_token(self): + """Gets the organization_token of this OrganizationAddBody. # noqa: E501 - :return: The token of this OrganizationAddBody. # noqa: E501 + :return: The organization_token of this OrganizationAddBody. # noqa: E501 :rtype: str """ - return self._token + return self._organization_token - @token.setter - def token(self, token): - """Sets the token of this OrganizationAddBody. + @organization_token.setter + def organization_token(self, organization_token): + """Sets the organization_token of this OrganizationAddBody. - :param token: The token of this OrganizationAddBody. # noqa: E501 + :param organization_token: The organization_token of this OrganizationAddBody. # noqa: E501 :type: str """ - self._token = token + self._organization_token = organization_token @property def email(self): diff --git a/sdk/python/sdk/zrok/zrok_api/models/organization_body.py b/sdk/python/sdk/zrok/zrok_api/models/organization_body.py index 0875eadb..8133f0ff 100644 --- a/sdk/python/sdk/zrok/zrok_api/models/organization_body.py +++ b/sdk/python/sdk/zrok/zrok_api/models/organization_body.py @@ -5,7 +5,7 @@ zrok client access # noqa: E501 - OpenAPI spec version: 0.3.0 + OpenAPI spec version: 1.0.0 Generated by: https://github.com/swagger-api/swagger-codegen.git """ diff --git a/sdk/python/sdk/zrok/zrok_api/models/organization_body1.py b/sdk/python/sdk/zrok/zrok_api/models/organization_body1.py index a605af16..45a5afde 100644 --- a/sdk/python/sdk/zrok/zrok_api/models/organization_body1.py +++ b/sdk/python/sdk/zrok/zrok_api/models/organization_body1.py @@ -5,7 +5,7 @@ zrok client access # noqa: E501 - OpenAPI spec version: 0.3.0 + OpenAPI spec version: 1.0.0 Generated by: https://github.com/swagger-api/swagger-codegen.git """ @@ -28,40 +28,40 @@ class OrganizationBody1(object): and the value is json key in definition. """ swagger_types = { - 'token': 'str' + 'organization_token': 'str' } attribute_map = { - 'token': 'token' + 'organization_token': 'organizationToken' } - def __init__(self, token=None): # noqa: E501 + def __init__(self, organization_token=None): # noqa: E501 """OrganizationBody1 - a model defined in Swagger""" # noqa: E501 - self._token = None + self._organization_token = None self.discriminator = None - if token is not None: - self.token = token + if organization_token is not None: + self.organization_token = organization_token @property - def token(self): - """Gets the token of this OrganizationBody1. # noqa: E501 + def organization_token(self): + """Gets the organization_token of this OrganizationBody1. # noqa: E501 - :return: The token of this OrganizationBody1. # noqa: E501 + :return: The organization_token of this OrganizationBody1. # noqa: E501 :rtype: str """ - return self._token + return self._organization_token - @token.setter - def token(self, token): - """Sets the token of this OrganizationBody1. + @organization_token.setter + def organization_token(self, organization_token): + """Sets the organization_token of this OrganizationBody1. - :param token: The token of this OrganizationBody1. # noqa: E501 + :param organization_token: The organization_token of this OrganizationBody1. # noqa: E501 :type: str """ - self._token = token + self._organization_token = organization_token def to_dict(self): """Returns the model properties as a dict""" diff --git a/sdk/python/sdk/zrok/zrok_api/models/organization_list_body.py b/sdk/python/sdk/zrok/zrok_api/models/organization_list_body.py index 4b783851..167a9fe9 100644 --- a/sdk/python/sdk/zrok/zrok_api/models/organization_list_body.py +++ b/sdk/python/sdk/zrok/zrok_api/models/organization_list_body.py @@ -5,7 +5,7 @@ zrok client access # noqa: E501 - OpenAPI spec version: 0.3.0 + OpenAPI spec version: 1.0.0 Generated by: https://github.com/swagger-api/swagger-codegen.git """ @@ -28,40 +28,40 @@ class OrganizationListBody(object): and the value is json key in definition. """ swagger_types = { - 'token': 'str' + 'organization_token': 'str' } attribute_map = { - 'token': 'token' + 'organization_token': 'organizationToken' } - def __init__(self, token=None): # noqa: E501 + def __init__(self, organization_token=None): # noqa: E501 """OrganizationListBody - a model defined in Swagger""" # noqa: E501 - self._token = None + self._organization_token = None self.discriminator = None - if token is not None: - self.token = token + if organization_token is not None: + self.organization_token = organization_token @property - def token(self): - """Gets the token of this OrganizationListBody. # noqa: E501 + def organization_token(self): + """Gets the organization_token of this OrganizationListBody. # noqa: E501 - :return: The token of this OrganizationListBody. # noqa: E501 + :return: The organization_token of this OrganizationListBody. # noqa: E501 :rtype: str """ - return self._token + return self._organization_token - @token.setter - def token(self, token): - """Sets the token of this OrganizationListBody. + @organization_token.setter + def organization_token(self, organization_token): + """Sets the organization_token of this OrganizationListBody. - :param token: The token of this OrganizationListBody. # noqa: E501 + :param organization_token: The organization_token of this OrganizationListBody. # noqa: E501 :type: str """ - self._token = token + self._organization_token = organization_token def to_dict(self): """Returns the model properties as a dict""" diff --git a/sdk/python/sdk/zrok/zrok_api/models/organization_remove_body.py b/sdk/python/sdk/zrok/zrok_api/models/organization_remove_body.py index 4600d47f..c4a9374d 100644 --- a/sdk/python/sdk/zrok/zrok_api/models/organization_remove_body.py +++ b/sdk/python/sdk/zrok/zrok_api/models/organization_remove_body.py @@ -5,7 +5,7 @@ zrok client access # noqa: E501 - OpenAPI spec version: 0.3.0 + OpenAPI spec version: 1.0.0 Generated by: https://github.com/swagger-api/swagger-codegen.git """ @@ -28,45 +28,45 @@ class OrganizationRemoveBody(object): and the value is json key in definition. """ swagger_types = { - 'token': 'str', + 'organization_token': 'str', 'email': 'str' } attribute_map = { - 'token': 'token', + 'organization_token': 'organizationToken', 'email': 'email' } - def __init__(self, token=None, email=None): # noqa: E501 + def __init__(self, organization_token=None, email=None): # noqa: E501 """OrganizationRemoveBody - a model defined in Swagger""" # noqa: E501 - self._token = None + self._organization_token = None self._email = None self.discriminator = None - if token is not None: - self.token = token + if organization_token is not None: + self.organization_token = organization_token if email is not None: self.email = email @property - def token(self): - """Gets the token of this OrganizationRemoveBody. # noqa: E501 + def organization_token(self): + """Gets the organization_token of this OrganizationRemoveBody. # noqa: E501 - :return: The token of this OrganizationRemoveBody. # noqa: E501 + :return: The organization_token of this OrganizationRemoveBody. # noqa: E501 :rtype: str """ - return self._token + return self._organization_token - @token.setter - def token(self, token): - """Sets the token of this OrganizationRemoveBody. + @organization_token.setter + def organization_token(self, organization_token): + """Sets the organization_token of this OrganizationRemoveBody. - :param token: The token of this OrganizationRemoveBody. # noqa: E501 + :param organization_token: The organization_token of this OrganizationRemoveBody. # noqa: E501 :type: str """ - self._token = token + self._organization_token = organization_token @property def email(self): diff --git a/sdk/python/sdk/zrok/zrok_api/models/overview.py b/sdk/python/sdk/zrok/zrok_api/models/overview.py index d8319858..7ef8aac4 100644 --- a/sdk/python/sdk/zrok/zrok_api/models/overview.py +++ b/sdk/python/sdk/zrok/zrok_api/models/overview.py @@ -5,7 +5,7 @@ zrok client access # noqa: E501 - OpenAPI spec version: 0.3.0 + OpenAPI spec version: 1.0.0 Generated by: https://github.com/swagger-api/swagger-codegen.git """ diff --git a/sdk/python/sdk/zrok/zrok_api/models/password_requirements.py b/sdk/python/sdk/zrok/zrok_api/models/password_requirements.py deleted file mode 100644 index 8589a8b8..00000000 --- a/sdk/python/sdk/zrok/zrok_api/models/password_requirements.py +++ /dev/null @@ -1,214 +0,0 @@ -# coding: utf-8 - -""" - zrok - - zrok client access # noqa: E501 - - OpenAPI spec version: 0.3.0 - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - -class PasswordRequirements(object): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = { - 'length': 'int', - 'require_capital': 'bool', - 'require_numeric': 'bool', - 'require_special': 'bool', - 'valid_special_characters': 'str' - } - - attribute_map = { - 'length': 'length', - 'require_capital': 'requireCapital', - 'require_numeric': 'requireNumeric', - 'require_special': 'requireSpecial', - 'valid_special_characters': 'validSpecialCharacters' - } - - def __init__(self, length=None, require_capital=None, require_numeric=None, require_special=None, valid_special_characters=None): # noqa: E501 - """PasswordRequirements - a model defined in Swagger""" # noqa: E501 - self._length = None - self._require_capital = None - self._require_numeric = None - self._require_special = None - self._valid_special_characters = None - self.discriminator = None - if length is not None: - self.length = length - if require_capital is not None: - self.require_capital = require_capital - if require_numeric is not None: - self.require_numeric = require_numeric - if require_special is not None: - self.require_special = require_special - if valid_special_characters is not None: - self.valid_special_characters = valid_special_characters - - @property - def length(self): - """Gets the length of this PasswordRequirements. # noqa: E501 - - - :return: The length of this PasswordRequirements. # noqa: E501 - :rtype: int - """ - return self._length - - @length.setter - def length(self, length): - """Sets the length of this PasswordRequirements. - - - :param length: The length of this PasswordRequirements. # noqa: E501 - :type: int - """ - - self._length = length - - @property - def require_capital(self): - """Gets the require_capital of this PasswordRequirements. # noqa: E501 - - - :return: The require_capital of this PasswordRequirements. # noqa: E501 - :rtype: bool - """ - return self._require_capital - - @require_capital.setter - def require_capital(self, require_capital): - """Sets the require_capital of this PasswordRequirements. - - - :param require_capital: The require_capital of this PasswordRequirements. # noqa: E501 - :type: bool - """ - - self._require_capital = require_capital - - @property - def require_numeric(self): - """Gets the require_numeric of this PasswordRequirements. # noqa: E501 - - - :return: The require_numeric of this PasswordRequirements. # noqa: E501 - :rtype: bool - """ - return self._require_numeric - - @require_numeric.setter - def require_numeric(self, require_numeric): - """Sets the require_numeric of this PasswordRequirements. - - - :param require_numeric: The require_numeric of this PasswordRequirements. # noqa: E501 - :type: bool - """ - - self._require_numeric = require_numeric - - @property - def require_special(self): - """Gets the require_special of this PasswordRequirements. # noqa: E501 - - - :return: The require_special of this PasswordRequirements. # noqa: E501 - :rtype: bool - """ - return self._require_special - - @require_special.setter - def require_special(self, require_special): - """Sets the require_special of this PasswordRequirements. - - - :param require_special: The require_special of this PasswordRequirements. # noqa: E501 - :type: bool - """ - - self._require_special = require_special - - @property - def valid_special_characters(self): - """Gets the valid_special_characters of this PasswordRequirements. # noqa: E501 - - - :return: The valid_special_characters of this PasswordRequirements. # noqa: E501 - :rtype: str - """ - return self._valid_special_characters - - @valid_special_characters.setter - def valid_special_characters(self, valid_special_characters): - """Sets the valid_special_characters of this PasswordRequirements. - - - :param valid_special_characters: The valid_special_characters of this PasswordRequirements. # noqa: E501 - :type: str - """ - - self._valid_special_characters = valid_special_characters - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list(map( - lambda x: x.to_dict() if hasattr(x, "to_dict") else x, - value - )) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict(map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") else item, - value.items() - )) - else: - result[attr] = value - if issubclass(PasswordRequirements, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, PasswordRequirements): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/sdk/python/sdk/zrok/zrok_api/models/principal.py b/sdk/python/sdk/zrok/zrok_api/models/principal.py index b93a23f8..0f1c6ff4 100644 --- a/sdk/python/sdk/zrok/zrok_api/models/principal.py +++ b/sdk/python/sdk/zrok/zrok_api/models/principal.py @@ -5,7 +5,7 @@ zrok client access # noqa: E501 - OpenAPI spec version: 0.3.0 + OpenAPI spec version: 1.0.0 Generated by: https://github.com/swagger-api/swagger-codegen.git """ diff --git a/sdk/python/sdk/zrok/zrok_api/models/public_frontend.py b/sdk/python/sdk/zrok/zrok_api/models/public_frontend.py deleted file mode 100644 index d2873403..00000000 --- a/sdk/python/sdk/zrok/zrok_api/models/public_frontend.py +++ /dev/null @@ -1,240 +0,0 @@ -# coding: utf-8 - -""" - zrok - - zrok client access # noqa: E501 - - OpenAPI spec version: 0.3.0 - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - -class PublicFrontend(object): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = { - 'token': 'str', - 'z_id': 'str', - 'url_template': 'str', - 'public_name': 'str', - 'created_at': 'int', - 'updated_at': 'int' - } - - attribute_map = { - 'token': 'token', - 'z_id': 'zId', - 'url_template': 'urlTemplate', - 'public_name': 'publicName', - 'created_at': 'createdAt', - 'updated_at': 'updatedAt' - } - - def __init__(self, token=None, z_id=None, url_template=None, public_name=None, created_at=None, updated_at=None): # noqa: E501 - """PublicFrontend - a model defined in Swagger""" # noqa: E501 - self._token = None - self._z_id = None - self._url_template = None - self._public_name = None - self._created_at = None - self._updated_at = None - self.discriminator = None - if token is not None: - self.token = token - if z_id is not None: - self.z_id = z_id - if url_template is not None: - self.url_template = url_template - if public_name is not None: - self.public_name = public_name - if created_at is not None: - self.created_at = created_at - if updated_at is not None: - self.updated_at = updated_at - - @property - def token(self): - """Gets the token of this PublicFrontend. # noqa: E501 - - - :return: The token of this PublicFrontend. # noqa: E501 - :rtype: str - """ - return self._token - - @token.setter - def token(self, token): - """Sets the token of this PublicFrontend. - - - :param token: The token of this PublicFrontend. # noqa: E501 - :type: str - """ - - self._token = token - - @property - def z_id(self): - """Gets the z_id of this PublicFrontend. # noqa: E501 - - - :return: The z_id of this PublicFrontend. # noqa: E501 - :rtype: str - """ - return self._z_id - - @z_id.setter - def z_id(self, z_id): - """Sets the z_id of this PublicFrontend. - - - :param z_id: The z_id of this PublicFrontend. # noqa: E501 - :type: str - """ - - self._z_id = z_id - - @property - def url_template(self): - """Gets the url_template of this PublicFrontend. # noqa: E501 - - - :return: The url_template of this PublicFrontend. # noqa: E501 - :rtype: str - """ - return self._url_template - - @url_template.setter - def url_template(self, url_template): - """Sets the url_template of this PublicFrontend. - - - :param url_template: The url_template of this PublicFrontend. # noqa: E501 - :type: str - """ - - self._url_template = url_template - - @property - def public_name(self): - """Gets the public_name of this PublicFrontend. # noqa: E501 - - - :return: The public_name of this PublicFrontend. # noqa: E501 - :rtype: str - """ - return self._public_name - - @public_name.setter - def public_name(self, public_name): - """Sets the public_name of this PublicFrontend. - - - :param public_name: The public_name of this PublicFrontend. # noqa: E501 - :type: str - """ - - self._public_name = public_name - - @property - def created_at(self): - """Gets the created_at of this PublicFrontend. # noqa: E501 - - - :return: The created_at of this PublicFrontend. # noqa: E501 - :rtype: int - """ - return self._created_at - - @created_at.setter - def created_at(self, created_at): - """Sets the created_at of this PublicFrontend. - - - :param created_at: The created_at of this PublicFrontend. # noqa: E501 - :type: int - """ - - self._created_at = created_at - - @property - def updated_at(self): - """Gets the updated_at of this PublicFrontend. # noqa: E501 - - - :return: The updated_at of this PublicFrontend. # noqa: E501 - :rtype: int - """ - return self._updated_at - - @updated_at.setter - def updated_at(self, updated_at): - """Sets the updated_at of this PublicFrontend. - - - :param updated_at: The updated_at of this PublicFrontend. # noqa: E501 - :type: int - """ - - self._updated_at = updated_at - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list(map( - lambda x: x.to_dict() if hasattr(x, "to_dict") else x, - value - )) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict(map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") else item, - value.items() - )) - else: - result[attr] = value - if issubclass(PublicFrontend, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, PublicFrontend): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/sdk/python/sdk/zrok/zrok_api/models/public_frontend_list.py b/sdk/python/sdk/zrok/zrok_api/models/public_frontend_list.py deleted file mode 100644 index abbe9bd3..00000000 --- a/sdk/python/sdk/zrok/zrok_api/models/public_frontend_list.py +++ /dev/null @@ -1,84 +0,0 @@ -# coding: utf-8 - -""" - zrok - - zrok client access # noqa: E501 - - OpenAPI spec version: 0.3.0 - - Generated by: https://github.com/swagger-api/swagger-codegen.git -""" - -import pprint -import re # noqa: F401 - -import six - -class PublicFrontendList(object): - """NOTE: This class is auto generated by the swagger code generator program. - - Do not edit the class manually. - """ - """ - Attributes: - swagger_types (dict): The key is attribute name - and the value is attribute type. - attribute_map (dict): The key is attribute name - and the value is json key in definition. - """ - swagger_types = { - } - - attribute_map = { - } - - def __init__(self): # noqa: E501 - """PublicFrontendList - a model defined in Swagger""" # noqa: E501 - self.discriminator = None - - def to_dict(self): - """Returns the model properties as a dict""" - result = {} - - for attr, _ in six.iteritems(self.swagger_types): - value = getattr(self, attr) - if isinstance(value, list): - result[attr] = list(map( - lambda x: x.to_dict() if hasattr(x, "to_dict") else x, - value - )) - elif hasattr(value, "to_dict"): - result[attr] = value.to_dict() - elif isinstance(value, dict): - result[attr] = dict(map( - lambda item: (item[0], item[1].to_dict()) - if hasattr(item[1], "to_dict") else item, - value.items() - )) - else: - result[attr] = value - if issubclass(PublicFrontendList, dict): - for key, value in self.items(): - result[key] = value - - return result - - def to_str(self): - """Returns the string representation of the model""" - return pprint.pformat(self.to_dict()) - - def __repr__(self): - """For `print` and `pprint`""" - return self.to_str() - - def __eq__(self, other): - """Returns true if both objects are equal""" - if not isinstance(other, PublicFrontendList): - return False - - return self.__dict__ == other.__dict__ - - def __ne__(self, other): - """Returns true if both objects are not equal""" - return not self == other diff --git a/sdk/python/sdk/zrok/zrok_api/models/regenerate_account_token_body.py b/sdk/python/sdk/zrok/zrok_api/models/regenerate_account_token_body.py new file mode 100644 index 00000000..61513276 --- /dev/null +++ b/sdk/python/sdk/zrok/zrok_api/models/regenerate_account_token_body.py @@ -0,0 +1,110 @@ +# coding: utf-8 + +""" + zrok + + zrok client access # noqa: E501 + + OpenAPI spec version: 1.0.0 + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +import pprint +import re # noqa: F401 + +import six + +class RegenerateAccountTokenBody(object): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + """ + Attributes: + swagger_types (dict): The key is attribute name + and the value is attribute type. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + """ + swagger_types = { + 'email_address': 'str' + } + + attribute_map = { + 'email_address': 'emailAddress' + } + + def __init__(self, email_address=None): # noqa: E501 + """RegenerateAccountTokenBody - a model defined in Swagger""" # noqa: E501 + self._email_address = None + self.discriminator = None + if email_address is not None: + self.email_address = email_address + + @property + def email_address(self): + """Gets the email_address of this RegenerateAccountTokenBody. # noqa: E501 + + + :return: The email_address of this RegenerateAccountTokenBody. # noqa: E501 + :rtype: str + """ + return self._email_address + + @email_address.setter + def email_address(self, email_address): + """Sets the email_address of this RegenerateAccountTokenBody. + + + :param email_address: The email_address of this RegenerateAccountTokenBody. # noqa: E501 + :type: str + """ + + self._email_address = email_address + + def to_dict(self): + """Returns the model properties as a dict""" + result = {} + + for attr, _ in six.iteritems(self.swagger_types): + value = getattr(self, attr) + if isinstance(value, list): + result[attr] = list(map( + lambda x: x.to_dict() if hasattr(x, "to_dict") else x, + value + )) + elif hasattr(value, "to_dict"): + result[attr] = value.to_dict() + elif isinstance(value, dict): + result[attr] = dict(map( + lambda item: (item[0], item[1].to_dict()) + if hasattr(item[1], "to_dict") else item, + value.items() + )) + else: + result[attr] = value + if issubclass(RegenerateAccountTokenBody, dict): + for key, value in self.items(): + result[key] = value + + return result + + def to_str(self): + """Returns the string representation of the model""" + return pprint.pformat(self.to_dict()) + + def __repr__(self): + """For `print` and `pprint`""" + return self.to_str() + + def __eq__(self, other): + """Returns true if both objects are equal""" + if not isinstance(other, RegenerateAccountTokenBody): + return False + + return self.__dict__ == other.__dict__ + + def __ne__(self, other): + """Returns true if both objects are not equal""" + return not self == other diff --git a/sdk/python/sdk/zrok/zrok_api/models/regenerate_token_body.py b/sdk/python/sdk/zrok/zrok_api/models/regenerate_token_body.py index 0b1e532c..8c4184ac 100644 --- a/sdk/python/sdk/zrok/zrok_api/models/regenerate_token_body.py +++ b/sdk/python/sdk/zrok/zrok_api/models/regenerate_token_body.py @@ -5,7 +5,7 @@ zrok client access # noqa: E501 - OpenAPI spec version: 0.3.0 + OpenAPI spec version: 1.0.0 Generated by: https://github.com/swagger-api/swagger-codegen.git """ diff --git a/sdk/python/sdk/zrok/zrok_api/models/register_request.py b/sdk/python/sdk/zrok/zrok_api/models/register_body.py similarity index 67% rename from sdk/python/sdk/zrok/zrok_api/models/register_request.py rename to sdk/python/sdk/zrok/zrok_api/models/register_body.py index cfb274a8..80549446 100644 --- a/sdk/python/sdk/zrok/zrok_api/models/register_request.py +++ b/sdk/python/sdk/zrok/zrok_api/models/register_body.py @@ -5,7 +5,7 @@ zrok client access # noqa: E501 - OpenAPI spec version: 0.3.0 + OpenAPI spec version: 1.0.0 Generated by: https://github.com/swagger-api/swagger-codegen.git """ @@ -15,7 +15,7 @@ import re # noqa: F401 import six -class RegisterRequest(object): +class RegisterBody(object): """NOTE: This class is auto generated by the swagger code generator program. Do not edit the class manually. @@ -28,62 +28,62 @@ class RegisterRequest(object): and the value is json key in definition. """ swagger_types = { - 'token': 'str', + 'register_token': 'str', 'password': 'str' } attribute_map = { - 'token': 'token', + 'register_token': 'registerToken', 'password': 'password' } - def __init__(self, token=None, password=None): # noqa: E501 - """RegisterRequest - a model defined in Swagger""" # noqa: E501 - self._token = None + def __init__(self, register_token=None, password=None): # noqa: E501 + """RegisterBody - a model defined in Swagger""" # noqa: E501 + self._register_token = None self._password = None self.discriminator = None - if token is not None: - self.token = token + if register_token is not None: + self.register_token = register_token if password is not None: self.password = password @property - def token(self): - """Gets the token of this RegisterRequest. # noqa: E501 + def register_token(self): + """Gets the register_token of this RegisterBody. # noqa: E501 - :return: The token of this RegisterRequest. # noqa: E501 + :return: The register_token of this RegisterBody. # noqa: E501 :rtype: str """ - return self._token + return self._register_token - @token.setter - def token(self, token): - """Sets the token of this RegisterRequest. + @register_token.setter + def register_token(self, register_token): + """Sets the register_token of this RegisterBody. - :param token: The token of this RegisterRequest. # noqa: E501 + :param register_token: The register_token of this RegisterBody. # noqa: E501 :type: str """ - self._token = token + self._register_token = register_token @property def password(self): - """Gets the password of this RegisterRequest. # noqa: E501 + """Gets the password of this RegisterBody. # noqa: E501 - :return: The password of this RegisterRequest. # noqa: E501 + :return: The password of this RegisterBody. # noqa: E501 :rtype: str """ return self._password @password.setter def password(self, password): - """Sets the password of this RegisterRequest. + """Sets the password of this RegisterBody. - :param password: The password of this RegisterRequest. # noqa: E501 + :param password: The password of this RegisterBody. # noqa: E501 :type: str """ @@ -110,7 +110,7 @@ class RegisterRequest(object): )) else: result[attr] = value - if issubclass(RegisterRequest, dict): + if issubclass(RegisterBody, dict): for key, value in self.items(): result[key] = value @@ -126,7 +126,7 @@ class RegisterRequest(object): def __eq__(self, other): """Returns true if both objects are equal""" - if not isinstance(other, RegisterRequest): + if not isinstance(other, RegisterBody): return False return self.__dict__ == other.__dict__ diff --git a/sdk/python/sdk/zrok/zrok_api/models/reset_password_request.py b/sdk/python/sdk/zrok/zrok_api/models/reset_password_body.py similarity index 68% rename from sdk/python/sdk/zrok/zrok_api/models/reset_password_request.py rename to sdk/python/sdk/zrok/zrok_api/models/reset_password_body.py index cf52cc88..0dbc086a 100644 --- a/sdk/python/sdk/zrok/zrok_api/models/reset_password_request.py +++ b/sdk/python/sdk/zrok/zrok_api/models/reset_password_body.py @@ -5,7 +5,7 @@ zrok client access # noqa: E501 - OpenAPI spec version: 0.3.0 + OpenAPI spec version: 1.0.0 Generated by: https://github.com/swagger-api/swagger-codegen.git """ @@ -15,7 +15,7 @@ import re # noqa: F401 import six -class ResetPasswordRequest(object): +class ResetPasswordBody(object): """NOTE: This class is auto generated by the swagger code generator program. Do not edit the class manually. @@ -28,62 +28,62 @@ class ResetPasswordRequest(object): and the value is json key in definition. """ swagger_types = { - 'token': 'str', + 'reset_token': 'str', 'password': 'str' } attribute_map = { - 'token': 'token', + 'reset_token': 'resetToken', 'password': 'password' } - def __init__(self, token=None, password=None): # noqa: E501 - """ResetPasswordRequest - a model defined in Swagger""" # noqa: E501 - self._token = None + def __init__(self, reset_token=None, password=None): # noqa: E501 + """ResetPasswordBody - a model defined in Swagger""" # noqa: E501 + self._reset_token = None self._password = None self.discriminator = None - if token is not None: - self.token = token + if reset_token is not None: + self.reset_token = reset_token if password is not None: self.password = password @property - def token(self): - """Gets the token of this ResetPasswordRequest. # noqa: E501 + def reset_token(self): + """Gets the reset_token of this ResetPasswordBody. # noqa: E501 - :return: The token of this ResetPasswordRequest. # noqa: E501 + :return: The reset_token of this ResetPasswordBody. # noqa: E501 :rtype: str """ - return self._token + return self._reset_token - @token.setter - def token(self, token): - """Sets the token of this ResetPasswordRequest. + @reset_token.setter + def reset_token(self, reset_token): + """Sets the reset_token of this ResetPasswordBody. - :param token: The token of this ResetPasswordRequest. # noqa: E501 + :param reset_token: The reset_token of this ResetPasswordBody. # noqa: E501 :type: str """ - self._token = token + self._reset_token = reset_token @property def password(self): - """Gets the password of this ResetPasswordRequest. # noqa: E501 + """Gets the password of this ResetPasswordBody. # noqa: E501 - :return: The password of this ResetPasswordRequest. # noqa: E501 + :return: The password of this ResetPasswordBody. # noqa: E501 :rtype: str """ return self._password @password.setter def password(self, password): - """Sets the password of this ResetPasswordRequest. + """Sets the password of this ResetPasswordBody. - :param password: The password of this ResetPasswordRequest. # noqa: E501 + :param password: The password of this ResetPasswordBody. # noqa: E501 :type: str """ @@ -110,7 +110,7 @@ class ResetPasswordRequest(object): )) else: result[attr] = value - if issubclass(ResetPasswordRequest, dict): + if issubclass(ResetPasswordBody, dict): for key, value in self.items(): result[key] = value @@ -126,7 +126,7 @@ class ResetPasswordRequest(object): def __eq__(self, other): """Returns true if both objects are equal""" - if not isinstance(other, ResetPasswordRequest): + if not isinstance(other, ResetPasswordBody): return False return self.__dict__ == other.__dict__ diff --git a/sdk/python/sdk/zrok/zrok_api/models/reset_password_request_body.py b/sdk/python/sdk/zrok/zrok_api/models/reset_password_request_body.py index 44e975ec..2d0bd614 100644 --- a/sdk/python/sdk/zrok/zrok_api/models/reset_password_request_body.py +++ b/sdk/python/sdk/zrok/zrok_api/models/reset_password_request_body.py @@ -5,7 +5,7 @@ zrok client access # noqa: E501 - OpenAPI spec version: 0.3.0 + OpenAPI spec version: 1.0.0 Generated by: https://github.com/swagger-api/swagger-codegen.git """ diff --git a/sdk/python/sdk/zrok/zrok_api/models/share.py b/sdk/python/sdk/zrok/zrok_api/models/share.py index 7399068c..abdb66af 100644 --- a/sdk/python/sdk/zrok/zrok_api/models/share.py +++ b/sdk/python/sdk/zrok/zrok_api/models/share.py @@ -5,7 +5,7 @@ zrok client access # noqa: E501 - OpenAPI spec version: 0.3.0 + OpenAPI spec version: 1.0.0 Generated by: https://github.com/swagger-api/swagger-codegen.git """ @@ -28,7 +28,7 @@ class Share(object): and the value is json key in definition. """ swagger_types = { - 'token': 'str', + 'share_token': 'str', 'z_id': 'str', 'share_mode': 'str', 'backend_mode': 'str', @@ -43,7 +43,7 @@ class Share(object): } attribute_map = { - 'token': 'token', + 'share_token': 'shareToken', 'z_id': 'zId', 'share_mode': 'shareMode', 'backend_mode': 'backendMode', @@ -57,9 +57,9 @@ class Share(object): 'updated_at': 'updatedAt' } - def __init__(self, token=None, z_id=None, share_mode=None, backend_mode=None, frontend_selection=None, frontend_endpoint=None, backend_proxy_endpoint=None, reserved=None, activity=None, limited=None, created_at=None, updated_at=None): # noqa: E501 + def __init__(self, share_token=None, z_id=None, share_mode=None, backend_mode=None, frontend_selection=None, frontend_endpoint=None, backend_proxy_endpoint=None, reserved=None, activity=None, limited=None, created_at=None, updated_at=None): # noqa: E501 """Share - a model defined in Swagger""" # noqa: E501 - self._token = None + self._share_token = None self._z_id = None self._share_mode = None self._backend_mode = None @@ -72,8 +72,8 @@ class Share(object): self._created_at = None self._updated_at = None self.discriminator = None - if token is not None: - self.token = token + if share_token is not None: + self.share_token = share_token if z_id is not None: self.z_id = z_id if share_mode is not None: @@ -98,25 +98,25 @@ class Share(object): self.updated_at = updated_at @property - def token(self): - """Gets the token of this Share. # noqa: E501 + def share_token(self): + """Gets the share_token of this Share. # noqa: E501 - :return: The token of this Share. # noqa: E501 + :return: The share_token of this Share. # noqa: E501 :rtype: str """ - return self._token + return self._share_token - @token.setter - def token(self, token): - """Sets the token of this Share. + @share_token.setter + def share_token(self, share_token): + """Sets the share_token of this Share. - :param token: The token of this Share. # noqa: E501 + :param share_token: The share_token of this Share. # noqa: E501 :type: str """ - self._token = token + self._share_token = share_token @property def z_id(self): diff --git a/sdk/python/sdk/zrok/zrok_api/models/update_share_request.py b/sdk/python/sdk/zrok/zrok_api/models/share_body.py similarity index 69% rename from sdk/python/sdk/zrok/zrok_api/models/update_share_request.py rename to sdk/python/sdk/zrok/zrok_api/models/share_body.py index 3548c101..f8398b70 100644 --- a/sdk/python/sdk/zrok/zrok_api/models/update_share_request.py +++ b/sdk/python/sdk/zrok/zrok_api/models/share_body.py @@ -5,7 +5,7 @@ zrok client access # noqa: E501 - OpenAPI spec version: 0.3.0 + OpenAPI spec version: 1.0.0 Generated by: https://github.com/swagger-api/swagger-codegen.git """ @@ -15,7 +15,7 @@ import re # noqa: F401 import six -class UpdateShareRequest(object): +class ShareBody(object): """NOTE: This class is auto generated by the swagger code generator program. Do not edit the class manually. @@ -28,28 +28,28 @@ class UpdateShareRequest(object): and the value is json key in definition. """ swagger_types = { - 'shr_token': 'str', + 'share_token': 'str', 'backend_proxy_endpoint': 'str', 'add_access_grants': 'list[str]', 'remove_access_grants': 'list[str]' } attribute_map = { - 'shr_token': 'shrToken', + 'share_token': 'shareToken', 'backend_proxy_endpoint': 'backendProxyEndpoint', 'add_access_grants': 'addAccessGrants', 'remove_access_grants': 'removeAccessGrants' } - def __init__(self, shr_token=None, backend_proxy_endpoint=None, add_access_grants=None, remove_access_grants=None): # noqa: E501 - """UpdateShareRequest - a model defined in Swagger""" # noqa: E501 - self._shr_token = None + def __init__(self, share_token=None, backend_proxy_endpoint=None, add_access_grants=None, remove_access_grants=None): # noqa: E501 + """ShareBody - a model defined in Swagger""" # noqa: E501 + self._share_token = None self._backend_proxy_endpoint = None self._add_access_grants = None self._remove_access_grants = None self.discriminator = None - if shr_token is not None: - self.shr_token = shr_token + if share_token is not None: + self.share_token = share_token if backend_proxy_endpoint is not None: self.backend_proxy_endpoint = backend_proxy_endpoint if add_access_grants is not None: @@ -58,42 +58,42 @@ class UpdateShareRequest(object): self.remove_access_grants = remove_access_grants @property - def shr_token(self): - """Gets the shr_token of this UpdateShareRequest. # noqa: E501 + def share_token(self): + """Gets the share_token of this ShareBody. # noqa: E501 - :return: The shr_token of this UpdateShareRequest. # noqa: E501 + :return: The share_token of this ShareBody. # noqa: E501 :rtype: str """ - return self._shr_token + return self._share_token - @shr_token.setter - def shr_token(self, shr_token): - """Sets the shr_token of this UpdateShareRequest. + @share_token.setter + def share_token(self, share_token): + """Sets the share_token of this ShareBody. - :param shr_token: The shr_token of this UpdateShareRequest. # noqa: E501 + :param share_token: The share_token of this ShareBody. # noqa: E501 :type: str """ - self._shr_token = shr_token + self._share_token = share_token @property def backend_proxy_endpoint(self): - """Gets the backend_proxy_endpoint of this UpdateShareRequest. # noqa: E501 + """Gets the backend_proxy_endpoint of this ShareBody. # noqa: E501 - :return: The backend_proxy_endpoint of this UpdateShareRequest. # noqa: E501 + :return: The backend_proxy_endpoint of this ShareBody. # noqa: E501 :rtype: str """ return self._backend_proxy_endpoint @backend_proxy_endpoint.setter def backend_proxy_endpoint(self, backend_proxy_endpoint): - """Sets the backend_proxy_endpoint of this UpdateShareRequest. + """Sets the backend_proxy_endpoint of this ShareBody. - :param backend_proxy_endpoint: The backend_proxy_endpoint of this UpdateShareRequest. # noqa: E501 + :param backend_proxy_endpoint: The backend_proxy_endpoint of this ShareBody. # noqa: E501 :type: str """ @@ -101,20 +101,20 @@ class UpdateShareRequest(object): @property def add_access_grants(self): - """Gets the add_access_grants of this UpdateShareRequest. # noqa: E501 + """Gets the add_access_grants of this ShareBody. # noqa: E501 - :return: The add_access_grants of this UpdateShareRequest. # noqa: E501 + :return: The add_access_grants of this ShareBody. # noqa: E501 :rtype: list[str] """ return self._add_access_grants @add_access_grants.setter def add_access_grants(self, add_access_grants): - """Sets the add_access_grants of this UpdateShareRequest. + """Sets the add_access_grants of this ShareBody. - :param add_access_grants: The add_access_grants of this UpdateShareRequest. # noqa: E501 + :param add_access_grants: The add_access_grants of this ShareBody. # noqa: E501 :type: list[str] """ @@ -122,20 +122,20 @@ class UpdateShareRequest(object): @property def remove_access_grants(self): - """Gets the remove_access_grants of this UpdateShareRequest. # noqa: E501 + """Gets the remove_access_grants of this ShareBody. # noqa: E501 - :return: The remove_access_grants of this UpdateShareRequest. # noqa: E501 + :return: The remove_access_grants of this ShareBody. # noqa: E501 :rtype: list[str] """ return self._remove_access_grants @remove_access_grants.setter def remove_access_grants(self, remove_access_grants): - """Sets the remove_access_grants of this UpdateShareRequest. + """Sets the remove_access_grants of this ShareBody. - :param remove_access_grants: The remove_access_grants of this UpdateShareRequest. # noqa: E501 + :param remove_access_grants: The remove_access_grants of this ShareBody. # noqa: E501 :type: list[str] """ @@ -162,7 +162,7 @@ class UpdateShareRequest(object): )) else: result[attr] = value - if issubclass(UpdateShareRequest, dict): + if issubclass(ShareBody, dict): for key, value in self.items(): result[key] = value @@ -178,7 +178,7 @@ class UpdateShareRequest(object): def __eq__(self, other): """Returns true if both objects are equal""" - if not isinstance(other, UpdateShareRequest): + if not isinstance(other, ShareBody): return False return self.__dict__ == other.__dict__ diff --git a/sdk/python/sdk/zrok/zrok_api/models/share_request.py b/sdk/python/sdk/zrok/zrok_api/models/share_request.py index 32f02f29..ee9a08b1 100644 --- a/sdk/python/sdk/zrok/zrok_api/models/share_request.py +++ b/sdk/python/sdk/zrok/zrok_api/models/share_request.py @@ -5,7 +5,7 @@ zrok client access # noqa: E501 - OpenAPI spec version: 0.3.0 + OpenAPI spec version: 1.0.0 Generated by: https://github.com/swagger-api/swagger-codegen.git """ diff --git a/sdk/python/sdk/zrok/zrok_api/models/share_response.py b/sdk/python/sdk/zrok/zrok_api/models/share_response.py index b8d01c70..dcb30e38 100644 --- a/sdk/python/sdk/zrok/zrok_api/models/share_response.py +++ b/sdk/python/sdk/zrok/zrok_api/models/share_response.py @@ -5,7 +5,7 @@ zrok client access # noqa: E501 - OpenAPI spec version: 0.3.0 + OpenAPI spec version: 1.0.0 Generated by: https://github.com/swagger-api/swagger-codegen.git """ @@ -29,23 +29,23 @@ class ShareResponse(object): """ swagger_types = { 'frontend_proxy_endpoints': 'list[str]', - 'shr_token': 'str' + 'share_token': 'str' } attribute_map = { 'frontend_proxy_endpoints': 'frontendProxyEndpoints', - 'shr_token': 'shrToken' + 'share_token': 'shareToken' } - def __init__(self, frontend_proxy_endpoints=None, shr_token=None): # noqa: E501 + def __init__(self, frontend_proxy_endpoints=None, share_token=None): # noqa: E501 """ShareResponse - a model defined in Swagger""" # noqa: E501 self._frontend_proxy_endpoints = None - self._shr_token = None + self._share_token = None self.discriminator = None if frontend_proxy_endpoints is not None: self.frontend_proxy_endpoints = frontend_proxy_endpoints - if shr_token is not None: - self.shr_token = shr_token + if share_token is not None: + self.share_token = share_token @property def frontend_proxy_endpoints(self): @@ -69,25 +69,25 @@ class ShareResponse(object): self._frontend_proxy_endpoints = frontend_proxy_endpoints @property - def shr_token(self): - """Gets the shr_token of this ShareResponse. # noqa: E501 + def share_token(self): + """Gets the share_token of this ShareResponse. # noqa: E501 - :return: The shr_token of this ShareResponse. # noqa: E501 + :return: The share_token of this ShareResponse. # noqa: E501 :rtype: str """ - return self._shr_token + return self._share_token - @shr_token.setter - def shr_token(self, shr_token): - """Sets the shr_token of this ShareResponse. + @share_token.setter + def share_token(self, share_token): + """Sets the share_token of this ShareResponse. - :param shr_token: The shr_token of this ShareResponse. # noqa: E501 + :param share_token: The share_token of this ShareResponse. # noqa: E501 :type: str """ - self._shr_token = shr_token + self._share_token = share_token def to_dict(self): """Returns the model properties as a dict""" diff --git a/sdk/python/sdk/zrok/zrok_api/models/shares.py b/sdk/python/sdk/zrok/zrok_api/models/shares.py index 7fba2e9c..c1ce3f4d 100644 --- a/sdk/python/sdk/zrok/zrok_api/models/shares.py +++ b/sdk/python/sdk/zrok/zrok_api/models/shares.py @@ -5,7 +5,7 @@ zrok client access # noqa: E501 - OpenAPI spec version: 0.3.0 + OpenAPI spec version: 1.0.0 Generated by: https://github.com/swagger-api/swagger-codegen.git """ diff --git a/sdk/python/sdk/zrok/zrok_api/models/spark_data.py b/sdk/python/sdk/zrok/zrok_api/models/spark_data.py index 8dd2e32b..9ed04dfe 100644 --- a/sdk/python/sdk/zrok/zrok_api/models/spark_data.py +++ b/sdk/python/sdk/zrok/zrok_api/models/spark_data.py @@ -5,7 +5,7 @@ zrok client access # noqa: E501 - OpenAPI spec version: 0.3.0 + OpenAPI spec version: 1.0.0 Generated by: https://github.com/swagger-api/swagger-codegen.git """ diff --git a/sdk/python/sdk/zrok/zrok_api/models/spark_data_sample.py b/sdk/python/sdk/zrok/zrok_api/models/spark_data_sample.py index ce5f2b09..52a1c1fd 100644 --- a/sdk/python/sdk/zrok/zrok_api/models/spark_data_sample.py +++ b/sdk/python/sdk/zrok/zrok_api/models/spark_data_sample.py @@ -5,7 +5,7 @@ zrok client access # noqa: E501 - OpenAPI spec version: 0.3.0 + OpenAPI spec version: 1.0.0 Generated by: https://github.com/swagger-api/swagger-codegen.git """ diff --git a/sdk/python/sdk/zrok/zrok_api/models/sparklines_body.py b/sdk/python/sdk/zrok/zrok_api/models/sparklines_body.py new file mode 100644 index 00000000..fd84ff20 --- /dev/null +++ b/sdk/python/sdk/zrok/zrok_api/models/sparklines_body.py @@ -0,0 +1,162 @@ +# coding: utf-8 + +""" + zrok + + zrok client access # noqa: E501 + + OpenAPI spec version: 1.0.0 + + Generated by: https://github.com/swagger-api/swagger-codegen.git +""" + +import pprint +import re # noqa: F401 + +import six + +class SparklinesBody(object): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + """ + Attributes: + swagger_types (dict): The key is attribute name + and the value is attribute type. + attribute_map (dict): The key is attribute name + and the value is json key in definition. + """ + swagger_types = { + 'account': 'bool', + 'environments': 'list[str]', + 'shares': 'list[str]' + } + + attribute_map = { + 'account': 'account', + 'environments': 'environments', + 'shares': 'shares' + } + + def __init__(self, account=None, environments=None, shares=None): # noqa: E501 + """SparklinesBody - a model defined in Swagger""" # noqa: E501 + self._account = None + self._environments = None + self._shares = None + self.discriminator = None + if account is not None: + self.account = account + if environments is not None: + self.environments = environments + if shares is not None: + self.shares = shares + + @property + def account(self): + """Gets the account of this SparklinesBody. # noqa: E501 + + + :return: The account of this SparklinesBody. # noqa: E501 + :rtype: bool + """ + return self._account + + @account.setter + def account(self, account): + """Sets the account of this SparklinesBody. + + + :param account: The account of this SparklinesBody. # noqa: E501 + :type: bool + """ + + self._account = account + + @property + def environments(self): + """Gets the environments of this SparklinesBody. # noqa: E501 + + + :return: The environments of this SparklinesBody. # noqa: E501 + :rtype: list[str] + """ + return self._environments + + @environments.setter + def environments(self, environments): + """Sets the environments of this SparklinesBody. + + + :param environments: The environments of this SparklinesBody. # noqa: E501 + :type: list[str] + """ + + self._environments = environments + + @property + def shares(self): + """Gets the shares of this SparklinesBody. # noqa: E501 + + + :return: The shares of this SparklinesBody. # noqa: E501 + :rtype: list[str] + """ + return self._shares + + @shares.setter + def shares(self, shares): + """Sets the shares of this SparklinesBody. + + + :param shares: The shares of this SparklinesBody. # noqa: E501 + :type: list[str] + """ + + self._shares = shares + + def to_dict(self): + """Returns the model properties as a dict""" + result = {} + + for attr, _ in six.iteritems(self.swagger_types): + value = getattr(self, attr) + if isinstance(value, list): + result[attr] = list(map( + lambda x: x.to_dict() if hasattr(x, "to_dict") else x, + value + )) + elif hasattr(value, "to_dict"): + result[attr] = value.to_dict() + elif isinstance(value, dict): + result[attr] = dict(map( + lambda item: (item[0], item[1].to_dict()) + if hasattr(item[1], "to_dict") else item, + value.items() + )) + else: + result[attr] = value + if issubclass(SparklinesBody, dict): + for key, value in self.items(): + result[key] = value + + return result + + def to_str(self): + """Returns the string representation of the model""" + return pprint.pformat(self.to_dict()) + + def __repr__(self): + """For `print` and `pprint`""" + return self.to_str() + + def __eq__(self, other): + """Returns true if both objects are equal""" + if not isinstance(other, SparklinesBody): + return False + + return self.__dict__ == other.__dict__ + + def __ne__(self, other): + """Returns true if both objects are not equal""" + return not self == other diff --git a/sdk/python/sdk/zrok/zrok_api/models/invite_token_generate_request.py b/sdk/python/sdk/zrok/zrok_api/models/token_generate_body.py similarity index 69% rename from sdk/python/sdk/zrok/zrok_api/models/invite_token_generate_request.py rename to sdk/python/sdk/zrok/zrok_api/models/token_generate_body.py index 6cc198d9..0aaa2468 100644 --- a/sdk/python/sdk/zrok/zrok_api/models/invite_token_generate_request.py +++ b/sdk/python/sdk/zrok/zrok_api/models/token_generate_body.py @@ -5,7 +5,7 @@ zrok client access # noqa: E501 - OpenAPI spec version: 0.3.0 + OpenAPI spec version: 1.0.0 Generated by: https://github.com/swagger-api/swagger-codegen.git """ @@ -15,7 +15,7 @@ import re # noqa: F401 import six -class InviteTokenGenerateRequest(object): +class TokenGenerateBody(object): """NOTE: This class is auto generated by the swagger code generator program. Do not edit the class manually. @@ -28,40 +28,40 @@ class InviteTokenGenerateRequest(object): and the value is json key in definition. """ swagger_types = { - 'tokens': 'list[str]' + 'invite_tokens': 'list[str]' } attribute_map = { - 'tokens': 'tokens' + 'invite_tokens': 'inviteTokens' } - def __init__(self, tokens=None): # noqa: E501 - """InviteTokenGenerateRequest - a model defined in Swagger""" # noqa: E501 - self._tokens = None + def __init__(self, invite_tokens=None): # noqa: E501 + """TokenGenerateBody - a model defined in Swagger""" # noqa: E501 + self._invite_tokens = None self.discriminator = None - if tokens is not None: - self.tokens = tokens + if invite_tokens is not None: + self.invite_tokens = invite_tokens @property - def tokens(self): - """Gets the tokens of this InviteTokenGenerateRequest. # noqa: E501 + def invite_tokens(self): + """Gets the invite_tokens of this TokenGenerateBody. # noqa: E501 - :return: The tokens of this InviteTokenGenerateRequest. # noqa: E501 + :return: The invite_tokens of this TokenGenerateBody. # noqa: E501 :rtype: list[str] """ - return self._tokens + return self._invite_tokens - @tokens.setter - def tokens(self, tokens): - """Sets the tokens of this InviteTokenGenerateRequest. + @invite_tokens.setter + def invite_tokens(self, invite_tokens): + """Sets the invite_tokens of this TokenGenerateBody. - :param tokens: The tokens of this InviteTokenGenerateRequest. # noqa: E501 + :param invite_tokens: The invite_tokens of this TokenGenerateBody. # noqa: E501 :type: list[str] """ - self._tokens = tokens + self._invite_tokens = invite_tokens def to_dict(self): """Returns the model properties as a dict""" @@ -84,7 +84,7 @@ class InviteTokenGenerateRequest(object): )) else: result[attr] = value - if issubclass(InviteTokenGenerateRequest, dict): + if issubclass(TokenGenerateBody, dict): for key, value in self.items(): result[key] = value @@ -100,7 +100,7 @@ class InviteTokenGenerateRequest(object): def __eq__(self, other): """Returns true if both objects are equal""" - if not isinstance(other, InviteTokenGenerateRequest): + if not isinstance(other, TokenGenerateBody): return False return self.__dict__ == other.__dict__ diff --git a/sdk/python/sdk/zrok/zrok_api/models/unaccess_request.py b/sdk/python/sdk/zrok/zrok_api/models/unaccess_body.py similarity index 69% rename from sdk/python/sdk/zrok/zrok_api/models/unaccess_request.py rename to sdk/python/sdk/zrok/zrok_api/models/unaccess_body.py index 75158673..77321334 100644 --- a/sdk/python/sdk/zrok/zrok_api/models/unaccess_request.py +++ b/sdk/python/sdk/zrok/zrok_api/models/unaccess_body.py @@ -5,7 +5,7 @@ zrok client access # noqa: E501 - OpenAPI spec version: 0.3.0 + OpenAPI spec version: 1.0.0 Generated by: https://github.com/swagger-api/swagger-codegen.git """ @@ -15,7 +15,7 @@ import re # noqa: F401 import six -class UnaccessRequest(object): +class UnaccessBody(object): """NOTE: This class is auto generated by the swagger code generator program. Do not edit the class manually. @@ -30,44 +30,44 @@ class UnaccessRequest(object): swagger_types = { 'frontend_token': 'str', 'env_zid': 'str', - 'shr_token': 'str' + 'share_token': 'str' } attribute_map = { 'frontend_token': 'frontendToken', 'env_zid': 'envZId', - 'shr_token': 'shrToken' + 'share_token': 'shareToken' } - def __init__(self, frontend_token=None, env_zid=None, shr_token=None): # noqa: E501 - """UnaccessRequest - a model defined in Swagger""" # noqa: E501 + def __init__(self, frontend_token=None, env_zid=None, share_token=None): # noqa: E501 + """UnaccessBody - a model defined in Swagger""" # noqa: E501 self._frontend_token = None self._env_zid = None - self._shr_token = None + self._share_token = None self.discriminator = None if frontend_token is not None: self.frontend_token = frontend_token if env_zid is not None: self.env_zid = env_zid - if shr_token is not None: - self.shr_token = shr_token + if share_token is not None: + self.share_token = share_token @property def frontend_token(self): - """Gets the frontend_token of this UnaccessRequest. # noqa: E501 + """Gets the frontend_token of this UnaccessBody. # noqa: E501 - :return: The frontend_token of this UnaccessRequest. # noqa: E501 + :return: The frontend_token of this UnaccessBody. # noqa: E501 :rtype: str """ return self._frontend_token @frontend_token.setter def frontend_token(self, frontend_token): - """Sets the frontend_token of this UnaccessRequest. + """Sets the frontend_token of this UnaccessBody. - :param frontend_token: The frontend_token of this UnaccessRequest. # noqa: E501 + :param frontend_token: The frontend_token of this UnaccessBody. # noqa: E501 :type: str """ @@ -75,45 +75,45 @@ class UnaccessRequest(object): @property def env_zid(self): - """Gets the env_zid of this UnaccessRequest. # noqa: E501 + """Gets the env_zid of this UnaccessBody. # noqa: E501 - :return: The env_zid of this UnaccessRequest. # noqa: E501 + :return: The env_zid of this UnaccessBody. # noqa: E501 :rtype: str """ return self._env_zid @env_zid.setter def env_zid(self, env_zid): - """Sets the env_zid of this UnaccessRequest. + """Sets the env_zid of this UnaccessBody. - :param env_zid: The env_zid of this UnaccessRequest. # noqa: E501 + :param env_zid: The env_zid of this UnaccessBody. # noqa: E501 :type: str """ self._env_zid = env_zid @property - def shr_token(self): - """Gets the shr_token of this UnaccessRequest. # noqa: E501 + def share_token(self): + """Gets the share_token of this UnaccessBody. # noqa: E501 - :return: The shr_token of this UnaccessRequest. # noqa: E501 + :return: The share_token of this UnaccessBody. # noqa: E501 :rtype: str """ - return self._shr_token + return self._share_token - @shr_token.setter - def shr_token(self, shr_token): - """Sets the shr_token of this UnaccessRequest. + @share_token.setter + def share_token(self, share_token): + """Sets the share_token of this UnaccessBody. - :param shr_token: The shr_token of this UnaccessRequest. # noqa: E501 + :param share_token: The share_token of this UnaccessBody. # noqa: E501 :type: str """ - self._shr_token = shr_token + self._share_token = share_token def to_dict(self): """Returns the model properties as a dict""" @@ -136,7 +136,7 @@ class UnaccessRequest(object): )) else: result[attr] = value - if issubclass(UnaccessRequest, dict): + if issubclass(UnaccessBody, dict): for key, value in self.items(): result[key] = value @@ -152,7 +152,7 @@ class UnaccessRequest(object): def __eq__(self, other): """Returns true if both objects are equal""" - if not isinstance(other, UnaccessRequest): + if not isinstance(other, UnaccessBody): return False return self.__dict__ == other.__dict__ diff --git a/sdk/python/sdk/zrok/zrok_api/models/unshare_request.py b/sdk/python/sdk/zrok/zrok_api/models/unshare_body.py similarity index 67% rename from sdk/python/sdk/zrok/zrok_api/models/unshare_request.py rename to sdk/python/sdk/zrok/zrok_api/models/unshare_body.py index ecfc9e3c..e6463475 100644 --- a/sdk/python/sdk/zrok/zrok_api/models/unshare_request.py +++ b/sdk/python/sdk/zrok/zrok_api/models/unshare_body.py @@ -5,7 +5,7 @@ zrok client access # noqa: E501 - OpenAPI spec version: 0.3.0 + OpenAPI spec version: 1.0.0 Generated by: https://github.com/swagger-api/swagger-codegen.git """ @@ -15,7 +15,7 @@ import re # noqa: F401 import six -class UnshareRequest(object): +class UnshareBody(object): """NOTE: This class is auto generated by the swagger code generator program. Do not edit the class manually. @@ -29,87 +29,87 @@ class UnshareRequest(object): """ swagger_types = { 'env_zid': 'str', - 'shr_token': 'str', + 'share_token': 'str', 'reserved': 'bool' } attribute_map = { 'env_zid': 'envZId', - 'shr_token': 'shrToken', + 'share_token': 'shareToken', 'reserved': 'reserved' } - def __init__(self, env_zid=None, shr_token=None, reserved=None): # noqa: E501 - """UnshareRequest - a model defined in Swagger""" # noqa: E501 + def __init__(self, env_zid=None, share_token=None, reserved=None): # noqa: E501 + """UnshareBody - a model defined in Swagger""" # noqa: E501 self._env_zid = None - self._shr_token = None + self._share_token = None self._reserved = None self.discriminator = None if env_zid is not None: self.env_zid = env_zid - if shr_token is not None: - self.shr_token = shr_token + if share_token is not None: + self.share_token = share_token if reserved is not None: self.reserved = reserved @property def env_zid(self): - """Gets the env_zid of this UnshareRequest. # noqa: E501 + """Gets the env_zid of this UnshareBody. # noqa: E501 - :return: The env_zid of this UnshareRequest. # noqa: E501 + :return: The env_zid of this UnshareBody. # noqa: E501 :rtype: str """ return self._env_zid @env_zid.setter def env_zid(self, env_zid): - """Sets the env_zid of this UnshareRequest. + """Sets the env_zid of this UnshareBody. - :param env_zid: The env_zid of this UnshareRequest. # noqa: E501 + :param env_zid: The env_zid of this UnshareBody. # noqa: E501 :type: str """ self._env_zid = env_zid @property - def shr_token(self): - """Gets the shr_token of this UnshareRequest. # noqa: E501 + def share_token(self): + """Gets the share_token of this UnshareBody. # noqa: E501 - :return: The shr_token of this UnshareRequest. # noqa: E501 + :return: The share_token of this UnshareBody. # noqa: E501 :rtype: str """ - return self._shr_token + return self._share_token - @shr_token.setter - def shr_token(self, shr_token): - """Sets the shr_token of this UnshareRequest. + @share_token.setter + def share_token(self, share_token): + """Sets the share_token of this UnshareBody. - :param shr_token: The shr_token of this UnshareRequest. # noqa: E501 + :param share_token: The share_token of this UnshareBody. # noqa: E501 :type: str """ - self._shr_token = shr_token + self._share_token = share_token @property def reserved(self): - """Gets the reserved of this UnshareRequest. # noqa: E501 + """Gets the reserved of this UnshareBody. # noqa: E501 - :return: The reserved of this UnshareRequest. # noqa: E501 + :return: The reserved of this UnshareBody. # noqa: E501 :rtype: bool """ return self._reserved @reserved.setter def reserved(self, reserved): - """Sets the reserved of this UnshareRequest. + """Sets the reserved of this UnshareBody. - :param reserved: The reserved of this UnshareRequest. # noqa: E501 + :param reserved: The reserved of this UnshareBody. # noqa: E501 :type: bool """ @@ -136,7 +136,7 @@ class UnshareRequest(object): )) else: result[attr] = value - if issubclass(UnshareRequest, dict): + if issubclass(UnshareBody, dict): for key, value in self.items(): result[key] = value @@ -152,7 +152,7 @@ class UnshareRequest(object): def __eq__(self, other): """Returns true if both objects are equal""" - if not isinstance(other, UnshareRequest): + if not isinstance(other, UnshareBody): return False return self.__dict__ == other.__dict__ diff --git a/sdk/python/sdk/zrok/zrok_api/models/organization_members_body.py b/sdk/python/sdk/zrok/zrok_api/models/verify_body.py similarity index 69% rename from sdk/python/sdk/zrok/zrok_api/models/organization_members_body.py rename to sdk/python/sdk/zrok/zrok_api/models/verify_body.py index 354d3f46..26acf208 100644 --- a/sdk/python/sdk/zrok/zrok_api/models/organization_members_body.py +++ b/sdk/python/sdk/zrok/zrok_api/models/verify_body.py @@ -5,7 +5,7 @@ zrok client access # noqa: E501 - OpenAPI spec version: 0.3.0 + OpenAPI spec version: 1.0.0 Generated by: https://github.com/swagger-api/swagger-codegen.git """ @@ -15,7 +15,7 @@ import re # noqa: F401 import six -class OrganizationMembersBody(object): +class VerifyBody(object): """NOTE: This class is auto generated by the swagger code generator program. Do not edit the class manually. @@ -28,40 +28,40 @@ class OrganizationMembersBody(object): and the value is json key in definition. """ swagger_types = { - 'token': 'str' + 'register_token': 'str' } attribute_map = { - 'token': 'token' + 'register_token': 'registerToken' } - def __init__(self, token=None): # noqa: E501 - """OrganizationMembersBody - a model defined in Swagger""" # noqa: E501 - self._token = None + def __init__(self, register_token=None): # noqa: E501 + """VerifyBody - a model defined in Swagger""" # noqa: E501 + self._register_token = None self.discriminator = None - if token is not None: - self.token = token + if register_token is not None: + self.register_token = register_token @property - def token(self): - """Gets the token of this OrganizationMembersBody. # noqa: E501 + def register_token(self): + """Gets the register_token of this VerifyBody. # noqa: E501 - :return: The token of this OrganizationMembersBody. # noqa: E501 + :return: The register_token of this VerifyBody. # noqa: E501 :rtype: str """ - return self._token + return self._register_token - @token.setter - def token(self, token): - """Sets the token of this OrganizationMembersBody. + @register_token.setter + def register_token(self, register_token): + """Sets the register_token of this VerifyBody. - :param token: The token of this OrganizationMembersBody. # noqa: E501 + :param register_token: The register_token of this VerifyBody. # noqa: E501 :type: str """ - self._token = token + self._register_token = register_token def to_dict(self): """Returns the model properties as a dict""" @@ -84,7 +84,7 @@ class OrganizationMembersBody(object): )) else: result[attr] = value - if issubclass(OrganizationMembersBody, dict): + if issubclass(VerifyBody, dict): for key, value in self.items(): result[key] = value @@ -100,7 +100,7 @@ class OrganizationMembersBody(object): def __eq__(self, other): """Returns true if both objects are equal""" - if not isinstance(other, OrganizationMembersBody): + if not isinstance(other, VerifyBody): return False return self.__dict__ == other.__dict__ diff --git a/sdk/python/sdk/zrok/zrok_api/models/version.py b/sdk/python/sdk/zrok/zrok_api/models/version.py index eba996e2..98e90760 100644 --- a/sdk/python/sdk/zrok/zrok_api/models/version.py +++ b/sdk/python/sdk/zrok/zrok_api/models/version.py @@ -5,7 +5,7 @@ zrok client access # noqa: E501 - OpenAPI spec version: 0.3.0 + OpenAPI spec version: 1.0.0 Generated by: https://github.com/swagger-api/swagger-codegen.git """ diff --git a/sdk/python/sdk/zrok/zrok_api/models/verify_request.py b/sdk/python/sdk/zrok/zrok_api/models/version_body.py similarity index 70% rename from sdk/python/sdk/zrok/zrok_api/models/verify_request.py rename to sdk/python/sdk/zrok/zrok_api/models/version_body.py index 8089bc9b..338869c0 100644 --- a/sdk/python/sdk/zrok/zrok_api/models/verify_request.py +++ b/sdk/python/sdk/zrok/zrok_api/models/version_body.py @@ -5,7 +5,7 @@ zrok client access # noqa: E501 - OpenAPI spec version: 0.3.0 + OpenAPI spec version: 1.0.0 Generated by: https://github.com/swagger-api/swagger-codegen.git """ @@ -15,7 +15,7 @@ import re # noqa: F401 import six -class VerifyRequest(object): +class VersionBody(object): """NOTE: This class is auto generated by the swagger code generator program. Do not edit the class manually. @@ -28,40 +28,40 @@ class VerifyRequest(object): and the value is json key in definition. """ swagger_types = { - 'token': 'str' + 'client_version': 'str' } attribute_map = { - 'token': 'token' + 'client_version': 'clientVersion' } - def __init__(self, token=None): # noqa: E501 - """VerifyRequest - a model defined in Swagger""" # noqa: E501 - self._token = None + def __init__(self, client_version=None): # noqa: E501 + """VersionBody - a model defined in Swagger""" # noqa: E501 + self._client_version = None self.discriminator = None - if token is not None: - self.token = token + if client_version is not None: + self.client_version = client_version @property - def token(self): - """Gets the token of this VerifyRequest. # noqa: E501 + def client_version(self): + """Gets the client_version of this VersionBody. # noqa: E501 - :return: The token of this VerifyRequest. # noqa: E501 + :return: The client_version of this VersionBody. # noqa: E501 :rtype: str """ - return self._token + return self._client_version - @token.setter - def token(self, token): - """Sets the token of this VerifyRequest. + @client_version.setter + def client_version(self, client_version): + """Sets the client_version of this VersionBody. - :param token: The token of this VerifyRequest. # noqa: E501 + :param client_version: The client_version of this VersionBody. # noqa: E501 :type: str """ - self._token = token + self._client_version = client_version def to_dict(self): """Returns the model properties as a dict""" @@ -84,7 +84,7 @@ class VerifyRequest(object): )) else: result[attr] = value - if issubclass(VerifyRequest, dict): + if issubclass(VersionBody, dict): for key, value in self.items(): result[key] = value @@ -100,7 +100,7 @@ class VerifyRequest(object): def __eq__(self, other): """Returns true if both objects are equal""" - if not isinstance(other, VerifyRequest): + if not isinstance(other, VersionBody): return False return self.__dict__ == other.__dict__ diff --git a/sdk/python/sdk/zrok/zrok_api/rest.py b/sdk/python/sdk/zrok/zrok_api/rest.py index 21bc091b..a2c54065 100644 --- a/sdk/python/sdk/zrok/zrok_api/rest.py +++ b/sdk/python/sdk/zrok/zrok_api/rest.py @@ -5,7 +5,7 @@ zrok client access # noqa: E501 - OpenAPI spec version: 0.3.0 + OpenAPI spec version: 1.0.0 Generated by: https://github.com/swagger-api/swagger-codegen.git """ diff --git a/specs/zrok.yml b/specs/zrok.yml index 8a88e019..cd71d28c 100644 --- a/specs/zrok.yml +++ b/specs/zrok.yml @@ -1,7 +1,7 @@ info: description: zrok client access title: zrok - version: 0.3.0 + version: 1.0.0 basePath: /api/v1 @@ -26,10 +26,16 @@ paths: - name: body in: body schema: - $ref: '#/definitions/changePasswordRequest' + properties: + email: + type: string + oldPassword: + type: string + newPassword: + type: string responses: 200: - description: changed password + description: password changed 400: description: password not changed 401: @@ -50,7 +56,11 @@ paths: - name: body in: body schema: - $ref: "#/definitions/inviteRequest" + properties: + email: + type: string + inviteToken: + type: string responses: 201: description: invitation created @@ -72,22 +82,26 @@ paths: - name: body in: body schema: - $ref: "#/definitions/loginRequest" + properties: + email: + type: string + password: + type: string responses: 200: description: login successful schema: - $ref: "#/definitions/loginResponse" + type: string 401: description: invalid login - /regenerateToken: + /regenerateAccountToken: post: tags: - account security: - key: [] - operationId: regenerateToken + operationId: regenerateAccountToken parameters: - name: body in: body @@ -100,7 +114,7 @@ paths: description: regenerate account token schema: properties: - token: + accountToken: type: string 404: description: account not found @@ -116,12 +130,18 @@ paths: - name: body in: body schema: - $ref: "#/definitions/registerRequest" + properties: + registerToken: + type: string + password: + type: string responses: 200: description: account created schema: - $ref: "#/definitions/registerResponse" + properties: + accountToken: + type: string 404: description: request not found 422: @@ -140,7 +160,11 @@ paths: - name: body in: body schema: - $ref: "#/definitions/resetPasswordRequest" + properties: + resetToken: + type: string + password: + type: string responses: 200: description: password reset @@ -167,9 +191,9 @@ paths: type: string responses: 201: - description: forgot password request created + description: reset password request created 400: - description: forgot password request not created + description: reset password request not created 500: description: internal server error @@ -182,14 +206,18 @@ paths: - name: body in: body schema: - $ref: "#/definitions/verifyRequest" + properties: + registerToken: + type: string responses: 200: - description: token ready + description: registration token ready schema: - $ref: "#/definitions/verifyResponse" + properties: + email: + type: string 404: - description: token not found + description: registration token not found 500: description: internal server error @@ -217,7 +245,7 @@ paths: description: created schema: properties: - token: + accountToken: type: string 401: description: unauthorized @@ -235,12 +263,25 @@ paths: - name: body in: body schema: - $ref: "#/definitions/createFrontendRequest" + type: object + properties: + zId: + type: string + url_template: + type: string + public_name: + type: string + permissionMode: + type: string + enum: [ "open", "closed" ] responses: 201: description: frontend created schema: - $ref: "#/definitions/createFrontendResponse" + type: object + properties: + frontendToken: + type: string 400: description: bad request 401: @@ -259,7 +300,14 @@ paths: - name: body in: body schema: - $ref: "#/definitions/updateFrontendRequest" + type: object + properties: + frontendToken: + type: string + publicName: + type: string + urlTemplate: + type: string responses: 200: description: frontend updated @@ -279,7 +327,10 @@ paths: - name: body in: body schema: - $ref: "#/definitions/deleteFrontendRequest" + type: object + properties: + frontendToken: + type: string responses: 200: description: frontend deleted @@ -301,7 +352,22 @@ paths: 200: description: ok schema: - $ref: "#/definitions/publicFrontendList" + type: array + items: + type: object + properties: + frontendToken: + type: string + zId: + type: string + urlTemplate: + type: string + publicName: + type: string + createdAt: + type: integer + updatedAt: + type: integer 401: description: unauthorized 500: @@ -371,12 +437,16 @@ paths: - name: body in: body schema: - $ref: "#/definitions/inviteTokenGenerateRequest" + properties: + inviteTokens: + type: array + items: + type: string responses: 201: - description: invitation tokens created + description: invite tokens created 400: - description: invitation tokens not created + description: invite tokens not created 401: description: unauthorized 500: @@ -401,7 +471,7 @@ paths: description: organization created schema: properties: - token: + organizationToken: type: string 401: description: unauthorized @@ -418,7 +488,7 @@ paths: in: body schema: properties: - token: + organizationToken: type: string responses: 200: @@ -442,7 +512,7 @@ paths: in: body schema: properties: - token: + organizationToken: type: string email: type: string @@ -470,7 +540,7 @@ paths: in: body schema: properties: - token: + organizationToken: type: string responses: 200: @@ -504,7 +574,7 @@ paths: in: body schema: properties: - token: + organizationToken: type: string email: type: string @@ -534,7 +604,7 @@ paths: type: array items: properties: - token: + organizationToken: type: string description: type: string @@ -557,12 +627,20 @@ paths: - name: body in: body schema: - $ref: "#/definitions/enableRequest" + properties: + description: + type: string + host: + type: string responses: 201: description: environment enabled schema: - $ref: "#/definitions/enableResponse" + properties: + identity: + type: string + cfg: + type: string 401: description: unauthorized 404: @@ -581,7 +659,9 @@ paths: - name: body in: body schema: - $ref: "#/definitions/disableRequest" + properties: + identity: + type: string responses: 200: description: environment disabled @@ -643,7 +723,7 @@ paths: 500: description: internal server error - /detail/frontend/{feId}: + /detail/frontend/{frontendId}: get: tags: - metadata @@ -651,7 +731,7 @@ paths: - key: [] operationId: getFrontendDetail parameters: - - name: feId + - name: frontendId in: path type: integer required: true @@ -667,7 +747,7 @@ paths: 500: description: internal server error - /detail/share/{shrToken}: + /detail/share/{shareToken}: get: tags: - metadata @@ -675,7 +755,7 @@ paths: - key: [] operationId: getShareDetail parameters: - - name: shrToken + - name: shareToken in: path type: string required: true @@ -737,7 +817,7 @@ paths: type: array items: properties: - token: + organizationToken: type: string description: type: string @@ -838,7 +918,7 @@ paths: description: internal server error - /metrics/share/{shrToken}: + /metrics/share/{shareToken}: get: tags: - metadata @@ -846,7 +926,7 @@ paths: - key: [] operationId: getShareMetrics parameters: - - name: shrToken + - name: shareToken in: path type: string required: true @@ -865,6 +945,41 @@ paths: 500: description: internal server error + /sparklines: + post: + tags: + - metadata + security: + - key: [] + operationId: getSparklines + parameters: + - name: body + in: body + schema: + properties: + account: + type: boolean + environments: + type: array + items: + type: string + shares: + type: array + items: + type: string + responses: + 200: + description: sparklines data + schema: + properties: + sparklines: + type: array + items: + $ref: "#/definitions/metrics" + 401: + description: unauthorized + 500: + description: internal server error /version: get: @@ -873,9 +988,27 @@ paths: operationId: version responses: 200: - description: current server version + description: legacy upgrade required schema: $ref: "#/definitions/version" + post: + tags: + - metadata + operationId: clientVersionCheck + parameters: + - name: body + in: body + schema: + properties: + clientVersion: + type: string + responses: + 200: + description: compatible + 400: + description: not compatible + schema: + type: string # # share @@ -891,12 +1024,50 @@ paths: - name: body in: body schema: - $ref: "#/definitions/accessRequest" + properties: + envZId: + type: string + shareToken: + type: string + bindAddress: + type: string + description: + type: string responses: 201: description: access created schema: - $ref: "#/definitions/accessResponse" + properties: + frontendToken: + type: string + backendMode: + type: string + 401: + description: unauthorized + 404: + description: not found + 500: + description: internal server error + patch: + tags: + - share + security: + - key: [] + operationId: updateAccess + parameters: + - name: body + in: body + schema: + properties: + frontendToken: + type: string + bindAddress: + type: string + description: + type: string + responses: + 200: + description: access updated 401: description: unauthorized 404: @@ -943,7 +1114,19 @@ paths: - name: body in: body schema: - $ref: "#/definitions/updateShareRequest" + properties: + shareToken: + type: string + backendProxyEndpoint: + type: string + addAccessGrants: + type: array + items: + type: string + removeAccessGrants: + type: array + items: + type: string responses: 200: description: share updated @@ -967,7 +1150,13 @@ paths: - name: body in: body schema: - $ref: "#/definitions/unaccessRequest" + properties: + frontendToken: + type: string + envZId: + type: string + shareToken: + type: string responses: 200: description: access removed @@ -989,7 +1178,13 @@ paths: - name: body in: body schema: - $ref: "#/definitions/unshareRequest" + properties: + envZId: + type: string + shareToken: + type: string + reserved: + type: boolean responses: 200: description: share removed @@ -1003,22 +1198,6 @@ paths: $ref: "#/definitions/errorMessage" definitions: - accessRequest: - type: object - properties: - envZId: - type: string - shrToken: - type: string - - accessResponse: - type: object - properties: - frontendToken: - type: string - backendMode: - type: string - authUser: type: object properties: @@ -1027,16 +1206,6 @@ definitions: password: type: string - changePasswordRequest: - type: object - properties: - email: - type: string - oldPassword: - type: string - newPassword: - type: string - configuration: type: object properties: @@ -1050,55 +1219,6 @@ definitions: type: boolean inviteTokenContact: type: string - passwordRequirements: - $ref: "#/definitions/passwordRequirements" - - createFrontendRequest: - type: object - properties: - zId: - type: string - url_template: - type: string - public_name: - type: string - permissionMode: - type: string - enum: ["open", "closed"] - - createFrontendResponse: - type: object - properties: - token: - type: string - - deleteFrontendRequest: - type: object - properties: - frontendToken: - type: string - - disableRequest: - type: object - properties: - identity: - type: string - - enableRequest: - type: object - properties: - description: - type: string - host: - type: string - - enableResponse: - type: object - properties: - identity: - type: string - cfg: - type: string environment: type: object @@ -1143,9 +1263,15 @@ definitions: properties: id: type: integer - token: + frontendToken: type: string - shrToken: + shareToken: + type: string + backendMode: + type: string + bindAddress: + type: string + description: type: string zId: type: string @@ -1159,33 +1285,6 @@ definitions: items: $ref: "#/definitions/frontend" - inviteTokenGenerateRequest: - type: object - properties: - tokens: - type: array - items: - type: string - - inviteRequest: - type: object - properties: - email: - type: string - token: - type: string - - loginRequest: - type: object - properties: - email: - type: string - password: - type: string - - loginResponse: - type: string - metrics: type: object properties: @@ -1219,20 +1318,6 @@ definitions: type: array items: $ref: "#/definitions/environmentAndResources" - - passwordRequirements: - type: object - properties: - length: - type: integer - requireCapital: - type: boolean - requireNumeric: - type: boolean - requireSpecial: - type: boolean - validSpecialCharacters: - type: string principal: type: object @@ -1248,53 +1333,10 @@ definitions: admin: type: boolean - publicFrontend: - type: object - properties: - token: - type: string - zId: - type: string - urlTemplate: - type: string - publicName: - type: string - createdAt: - type: integer - updatedAt: - type: integer - - publicFrontendList: - type: array - items: - $ref: "#/definitions/publicFrontend" - - registerRequest: - type: object - properties: - token: - type: string - password: - type: string - - registerResponse: - type: object - properties: - token: - type: string - - resetPasswordRequest: - type: object - properties: - token: - type: string - password: - type: string - share: type: object properties: - token: + shareToken: type: string zId: type: string @@ -1375,7 +1417,7 @@ definitions: type: array items: type: string - shrToken: + shareToken: type: string sparkData: @@ -1391,63 +1433,6 @@ definitions: tx: type: number - unaccessRequest: - type: object - properties: - frontendToken: - type: string - envZId: - type: string - shrToken: - type: string - - unshareRequest: - type: object - properties: - envZId: - type: string - shrToken: - type: string - reserved: - type: boolean - - updateFrontendRequest: - type: object - properties: - frontendToken: - type: string - publicName: - type: string - urlTemplate: - type: string - - updateShareRequest: - type: object - properties: - shrToken: - type: string - backendProxyEndpoint: - type: string - addAccessGrants: - type: array - items: - type: string - removeAccessGrants: - type: array - items: - type: string - - verifyRequest: - type: object - properties: - token: - type: string - verifyResponse: - type: object - properties: - email: - type: string - version: type: string diff --git a/ui/.gitignore b/ui/.gitignore index 4d29575d..a547bf36 100644 --- a/ui/.gitignore +++ b/ui/.gitignore @@ -1,23 +1,24 @@ -# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. - -# dependencies -/node_modules -/.pnp -.pnp.js - -# testing -/coverage - -# production -/build - -# misc -.DS_Store -.env.local -.env.development.local -.env.test.local -.env.production.local - +# Logs +logs +*.log npm-debug.log* yarn-debug.log* yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/ui/README.md b/ui/README.md new file mode 100644 index 00000000..74872fd4 --- /dev/null +++ b/ui/README.md @@ -0,0 +1,50 @@ +# React + TypeScript + Vite + +This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules. + +Currently, two official plugins are available: + +- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/README.md) uses [Babel](https://babeljs.io/) for Fast Refresh +- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh + +## Expanding the ESLint configuration + +If you are developing a production application, we recommend updating the configuration to enable type aware lint rules: + +- Configure the top-level `parserOptions` property like this: + +```js +export default tseslint.config({ + languageOptions: { + // other options... + parserOptions: { + project: ['./tsconfig.node.json', './tsconfig.app.json'], + tsconfigRootDir: import.meta.dirname, + }, + }, +}) +``` + +- Replace `tseslint.configs.recommended` to `tseslint.configs.recommendedTypeChecked` or `tseslint.configs.strictTypeChecked` +- Optionally add `...tseslint.configs.stylisticTypeChecked` +- Install [eslint-plugin-react](https://github.com/jsx-eslint/eslint-plugin-react) and update the config: + +```js +// eslint.config.js +import react from 'eslint-plugin-react' + +export default tseslint.config({ + // Set the react version + settings: { react: { version: '18.3' } }, + plugins: { + // Add the react plugin + react, + }, + rules: { + // other rules... + // Enable its recommended rules + ...react.configs.recommended.rules, + ...react.configs['jsx-runtime'].rules, + }, +}) +``` diff --git a/ui/_variables.scss b/ui/_variables.scss deleted file mode 100755 index b37b69db..00000000 --- a/ui/_variables.scss +++ /dev/null @@ -1,6 +0,0 @@ - -$blue: #3b2693; -$font-family-sans-serif: "Russo One", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; -$font-family-monospace: "JetBrains Mono", SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; -$grid-breakpoints: ( xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1400px ); -$container-max-widths: ( sm: 540px, md: 720px, lg: 960px, xl: 1440px ); \ No newline at end of file diff --git a/ui/embed.go b/ui/embed.go index 38fef97d..b07fcf89 100644 --- a/ui/embed.go +++ b/ui/embed.go @@ -2,5 +2,5 @@ package ui import "embed" -//go:embed build -var FS embed.FS \ No newline at end of file +//go:embed dist +var FS embed.FS diff --git a/ui/eslint.config.js b/ui/eslint.config.js new file mode 100644 index 00000000..092408a9 --- /dev/null +++ b/ui/eslint.config.js @@ -0,0 +1,28 @@ +import js from '@eslint/js' +import globals from 'globals' +import reactHooks from 'eslint-plugin-react-hooks' +import reactRefresh from 'eslint-plugin-react-refresh' +import tseslint from 'typescript-eslint' + +export default tseslint.config( + { ignores: ['dist'] }, + { + extends: [js.configs.recommended, ...tseslint.configs.recommended], + files: ['**/*.{ts,tsx}'], + languageOptions: { + ecmaVersion: 2020, + globals: globals.browser, + }, + plugins: { + 'react-hooks': reactHooks, + 'react-refresh': reactRefresh, + }, + rules: { + ...reactHooks.configs.recommended.rules, + 'react-refresh/only-export-components': [ + 'warn', + { allowConstantExport: true }, + ], + }, + }, +) diff --git a/ui/index.html b/ui/index.html new file mode 100644 index 00000000..a012a471 --- /dev/null +++ b/ui/index.html @@ -0,0 +1,17 @@ + + + + + + + + + + + zrok API Console + + +
+ + + diff --git a/ui/middleware.go b/ui/middleware.go index e31cf967..62512c22 100644 --- a/ui/middleware.go +++ b/ui/middleware.go @@ -19,7 +19,7 @@ func Middleware(handler http.Handler, healthCheck func(w http.ResponseWriter, r return } - staticPath := "build" + staticPath := "dist" indexPath := "index.html" // get the absolute path to prevent directory traversal diff --git a/ui/package-lock.json b/ui/package-lock.json index e225b946..d28a2e65 100644 --- a/ui/package-lock.json +++ b/ui/package-lock.json @@ -1,89 +1,103 @@ { - "name": "ui", - "version": "0.1.0", - "lockfileVersion": 2, + "name": "ui100", + "version": "0.0.0", + "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "ui", - "version": "0.1.0", + "name": "ui100", + "version": "0.0.0", "dependencies": { - "@emotion/react": "^11.10.4", - "@emotion/styled": "^11.10.4", - "@mdi/js": "^7.0.96", - "@mdi/react": "^1.6.1", - "@mui/material": "^5.15.18", - "bootstrap": "^5.2.3", - "dagre": "^0.8.5", - "eslint-config-react-app": "^7.0.1", - "humanize-duration": "^3.27.3", - "moment": "^2.29.4", + "@emotion/react": "^11.13.5", + "@emotion/styled": "^11.13.5", + "@mui/icons-material": "^6.1.8", + "@mui/material": "^6.1.8", + "@mui/x-charts": "^7.24.1", + "@xyflow/react": "^12.3.5", + "d3-hierarchy": "^3.1.2", + "date-fns": "^4.1.0", + "formik": "^2.4.6", + "material-react-table": "^3.1.0", "react": "^18.3.1", - "react-bootstrap": "^2.10.2", - "react-data-table-component": "^7.5.2", "react-dom": "^18.3.1", - "react-force-graph": "^1.43.0", - "react-router-dom": "^6.23.1", - "react-sizeme": "^3.0.2", - "recharts": "^2.12.7", - "styled-components": "^5.3.5", - "svgo": "^3.0.2" + "react-router": "^7.0.1", + "yup": "^1.6.1", + "zustand": "^5.0.2" }, "devDependencies": { - "react-scripts": "^5.0.1" + "@eslint/js": "^9.13.0", + "@types/d3-hierarchy": "^3.1.7", + "@types/react": "^18.3.12", + "@types/react-dom": "^18.3.1", + "@vitejs/plugin-react": "^4.3.3", + "eslint": "^9.13.0", + "eslint-plugin-react-hooks": "^5.0.0", + "eslint-plugin-react-refresh": "^0.4.14", + "globals": "^15.11.0", + "typescript-eslint": "^8.11.0", + "vite": "^5.4.10" } }, "node_modules/@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { "node": ">=6.0.0" } }, "node_modules/@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", + "license": "MIT", "dependencies": { - "@babel/highlight": "^7.18.6" + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/compat-data": { - "version": "7.20.14", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.14.tgz", - "integrity": "sha512-0YpKHD6ImkWMEINCyDAD0HLLUH/lPCefG8ld9it8DJB2wnApraKuhgYTvTY1z7UFIfBTGy5LwncZ+5HWWGbhFw==", + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.2.tgz", + "integrity": "sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg==", + "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.20.12", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.12.tgz", - "integrity": "sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.0.tgz", + "integrity": "sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==", + "dev": true, + "license": "MIT", "dependencies": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.7", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-module-transforms": "^7.20.11", - "@babel/helpers": "^7.20.7", - "@babel/parser": "^7.20.7", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.12", - "@babel/types": "^7.20.7", - "convert-source-map": "^1.7.0", + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.26.0", + "@babel/generator": "^7.26.0", + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helpers": "^7.26.0", + "@babel/parser": "^7.26.0", + "@babel/template": "^7.25.9", + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.26.0", + "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.0" + "json5": "^2.2.3", + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" @@ -93,260 +107,62 @@ "url": "https://opencollective.com/babel" } }, - "node_modules/@babel/eslint-parser": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.19.1.tgz", - "integrity": "sha512-AqNf2QWt1rtu2/1rLswy6CDP7H9Oh3mMhk177Y67Rg8d7RD9WfOLLv8CGn6tisFvS2htm86yIe1yLF6I1UDaGQ==", - "dependencies": { - "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", - "eslint-visitor-keys": "^2.1.0", - "semver": "^6.3.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || >=14.0.0" - }, - "peerDependencies": { - "@babel/core": ">=7.11.0", - "eslint": "^7.5.0 || ^8.0.0" - } - }, - "node_modules/@babel/eslint-parser/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "engines": { - "node": ">=10" - } - }, "node_modules/@babel/generator": { - "version": "7.20.14", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.14.tgz", - "integrity": "sha512-AEmuXHdcD3A52HHXxaTmYlb8q/xMEhoRP67B3T4Oq7lbmSoqroMZzjnGj3+i1io3pdnF8iBYVu4Ilj+c4hBxYg==", + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.2.tgz", + "integrity": "sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==", + "license": "MIT", "dependencies": { - "@babel/types": "^7.20.7", - "@jridgewell/gen-mapping": "^0.3.2", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", - "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz", - "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==", - "dependencies": { - "@babel/helper-explode-assignable-expression": "^7.18.6", - "@babel/types": "^7.18.9" + "@babel/parser": "^7.26.2", + "@babel/types": "^7.26.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz", - "integrity": "sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz", + "integrity": "sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==", + "dev": true, + "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.20.5", - "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.21.3", + "@babel/compat-data": "^7.25.9", + "@babel/helper-validator-option": "^7.25.9", + "browserslist": "^4.24.0", "lru-cache": "^5.1.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.20.12", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.12.tgz", - "integrity": "sha512-9OunRkbT0JQcednL0UFvbfXpAsUXiGjUk0a7sN8fUXX7Mue79cUSMjHGDRRi/Vz9vYlpIhLV5fMD5dKoMhhsNQ==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-member-expression-to-functions": "^7.20.7", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-replace-supers": "^7.20.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/helper-split-export-declaration": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.20.5.tgz", - "integrity": "sha512-m68B1lkg3XDGX5yCvGO0kPx3v9WIYLnzjKfPcQiwntEQa5ZeRkPmo2X/ISJc8qxWGfwUr+kvZAeEzAwLec2r2w==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "regexpu-core": "^5.2.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", - "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", - "dependencies": { - "@babel/helper-compilation-targets": "^7.17.7", - "@babel/helper-plugin-utils": "^7.16.7", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0-0" - } - }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", - "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-explode-assignable-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", - "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==", - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", - "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", - "dependencies": { - "@babel/template": "^7.18.10", - "@babel/types": "^7.19.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.20.7.tgz", - "integrity": "sha512-9J0CxJLq315fEdi4s7xK5TQaNYjZw+nDVpVqr1axNGKzdrdwYBD5b4uKv3n75aABG0rCCTK8Im8Ww7eYfMrZgw==", - "dependencies": { - "@babel/types": "^7.20.7" + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", - "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", + "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", + "license": "MIT", "dependencies": { - "@babel/types": "^7.18.6" + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.20.11", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.11.tgz", - "integrity": "sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", + "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", + "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.20.2", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.10", - "@babel/types": "^7.20.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", - "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", - "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz", - "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-wrap-function": "^7.18.9", - "@babel/types": "^7.18.9" + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -355,123 +171,66 @@ "@babel/core": "^7.0.0" } }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.20.7.tgz", - "integrity": "sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A==", - "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-member-expression-to-functions": "^7.20.7", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.7", - "@babel/types": "^7.20.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", - "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", - "dependencies": { - "@babel/types": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz", - "integrity": "sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==", - "dependencies": { - "@babel/types": "^7.20.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", - "dependencies": { - "@babel/types": "^7.18.6" - }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz", + "integrity": "sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==", + "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", - "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", - "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-wrap-function": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz", - "integrity": "sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==", - "dependencies": { - "@babel/helper-function-name": "^7.19.0", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.5", - "@babel/types": "^7.20.5" - }, + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", + "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", + "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.20.13", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.13.tgz", - "integrity": "sha512-nzJ0DWCL3gB5RCXbUO3KIMMsBY2Eqbx8mBpKGE/02PgyRQFcPQLbkQ1vyy596mZLaP+dAfD+R4ckASzNVmW3jg==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.0.tgz", + "integrity": "sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==", + "dev": true, + "license": "MIT", "dependencies": { - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.13", - "@babel/types": "^7.20.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" + "@babel/template": "^7.25.9", + "@babel/types": "^7.26.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.20.13", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.13.tgz", - "integrity": "sha512-gFDLKMfpiXCsjt4za2JA9oTMn70CeseCehb11kRZgvd7+F67Hih3OHOK24cRrWECJ/ljfPGac6ygXAs/C8kIvw==", + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.2.tgz", + "integrity": "sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.26.0" + }, "bin": { "parser": "bin/babel-parser.js" }, @@ -479,328 +238,14 @@ "node": ">=6.0.0" } }, - "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz", - "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.20.7.tgz", - "integrity": "sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/plugin-proposal-optional-chaining": "^7.20.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.13.0" - } - }, - "node_modules/@babel/plugin-proposal-async-generator-functions": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz", - "integrity": "sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==", - "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-remap-async-to-generator": "^7.18.9", - "@babel/plugin-syntax-async-generators": "^7.8.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-class-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", - "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-class-static-block": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.20.7.tgz", - "integrity": "sha512-AveGOoi9DAjUYYuUAG//Ig69GlazLnoyzMw68VCDux+c1tsnnH/OkYcpz/5xzMkEFC6UxjR5Gw1c+iY2wOGVeQ==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.20.7", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0" - } - }, - "node_modules/@babel/plugin-proposal-decorators": { - "version": "7.20.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.20.13.tgz", - "integrity": "sha512-7T6BKHa9Cpd7lCueHBBzP0nkXNina+h5giOZw+a8ZpMfPFY19VjJAjIxyFHuWkhCWgL6QMqRiY/wB1fLXzm6Mw==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.20.12", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-replace-supers": "^7.20.7", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/plugin-syntax-decorators": "^7.19.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-dynamic-import": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", - "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-export-namespace-from": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", - "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-json-strings": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", - "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-json-strings": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz", - "integrity": "sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", - "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-numeric-separator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", - "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz", - "integrity": "sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==", - "dependencies": { - "@babel/compat-data": "^7.20.5", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.20.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-optional-catch-binding": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", - "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-optional-chaining": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.20.7.tgz", - "integrity": "sha512-T+A7b1kfjtRM51ssoOfS1+wbyCVqorfyZhT99TvxxLMirPShD8CzKMRepMlCBGM5RpHMbn8s+5MMHnPstJH6mQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-private-methods": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", - "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.20.5.tgz", - "integrity": "sha512-Vq7b9dUA12ByzB4EjQTPo25sFhY+08pQDBSZRtUAkj7lb7jahaHR5igera16QZ+3my1nYR4dKsNdYj5IjPHilQ==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-create-class-features-plugin": "^7.20.5", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-unicode-property-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", - "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.25.9.tgz", + "integrity": "sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -809,946 +254,14 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-decorators": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.19.0.tgz", - "integrity": "sha512-xaBZUEDntt4faL1yN8oIFlhfXeQAWJW7CLKYsHTUqriCUbj8xOra8bfxxKGi/UwExPFBuPdH4XfHc9rGQhrVkQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.19.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-flow": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.18.6.tgz", - "integrity": "sha512-LUbR+KNTBWCUAqRG9ex5Gnzu2IOkt8jRJbHHXFT9q+L9zm7M/QQbEqXyw1n1pohYvOyWC8CjeyjrSaIwiYjK7A==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz", - "integrity": "sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.19.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.25.9.tgz", + "integrity": "sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", - "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz", - "integrity": "sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.19.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.20.7.tgz", - "integrity": "sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.20.7.tgz", - "integrity": "sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==", - "dependencies": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-remap-async-to-generator": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", - "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.20.14", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.14.tgz", - "integrity": "sha512-sMPepQtsOs5fM1bwNvuJJHvaCfOEQfmc01FGw0ELlTpTJj5Ql/zuNRRldYhAPys4ghXdBIQJbRVYi44/7QflQQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.20.7.tgz", - "integrity": "sha512-LWYbsiXTPKl+oBlXUGlwNlJZetXD5Am+CyBdqhPsDVjM9Jc8jwBJFrKhHf900Kfk2eZG1y9MAG3UNajol7A4VQ==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-replace-supers": "^7.20.7", - "@babel/helper-split-export-declaration": "^7.18.6", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.20.7.tgz", - "integrity": "sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/template": "^7.20.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.20.7.tgz", - "integrity": "sha512-Xwg403sRrZb81IVB79ZPqNQME23yhugYVqgTxAhT99h485F4f+GMELFhhOsscDUB7HCswepKeCKLn/GZvUKoBA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", - "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz", - "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", - "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", - "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-flow-strip-types": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.19.0.tgz", - "integrity": "sha512-sgeMlNaQVbCSpgLSKP4ZZKfsJVnFnNQlUSk6gPYzR/q7tzCgQF2t8RBKAP6cKJeZdveei7Q7Jm527xepI8lNLg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/plugin-syntax-flow": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz", - "integrity": "sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz", - "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==", - "dependencies": { - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", - "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", - "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.20.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.20.11.tgz", - "integrity": "sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==", - "dependencies": { - "@babel/helper-module-transforms": "^7.20.11", - "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.20.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.20.11.tgz", - "integrity": "sha512-S8e1f7WQ7cimJQ51JkAaDrEtohVEitXjgCGAS2N8S31Y42E+kWwfSz83LYz57QdBm7q9diARVqanIaH2oVgQnw==", - "dependencies": { - "@babel/helper-module-transforms": "^7.20.11", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-simple-access": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.20.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.20.11.tgz", - "integrity": "sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw==", - "dependencies": { - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-module-transforms": "^7.20.11", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-validator-identifier": "^7.19.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", - "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", - "dependencies": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.20.5.tgz", - "integrity": "sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.20.5", - "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz", - "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", - "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-replace-supers": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.7.tgz", - "integrity": "sha512-WiWBIkeHKVOSYPO0pWkxGPfKeWrCJyD3NJ53+Lrp/QMSZbsVPovrVl2aWZ19D/LTVnaDv5Ap7GJ/B2CTOZdrfA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", - "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-constant-elements": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.20.2.tgz", - "integrity": "sha512-KS/G8YI8uwMGKErLFOHS/ekhqdHhpEloxs43NecQHVgo2QuQSyJhGIY1fL8UGl9wy5ItVwwoUL4YxVqsplGq2g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-display-name": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz", - "integrity": "sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.20.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.20.13.tgz", - "integrity": "sha512-MmTZx/bkUrfJhhYAYt3Urjm+h8DQGrPrnKQ94jLo7NLuOU+T89a7IByhKmrb8SKhrIYIQ0FN0CHMbnFRen4qNw==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-jsx": "^7.18.6", - "@babel/types": "^7.20.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-development": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz", - "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==", - "dependencies": { - "@babel/plugin-transform-react-jsx": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-pure-annotations": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz", - "integrity": "sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.20.5.tgz", - "integrity": "sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "regenerator-transform": "^0.15.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", - "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.19.6.tgz", - "integrity": "sha512-PRH37lz4JU156lYFW1p8OxE5i7d6Sl/zV58ooyr+q1J1lnQPyg5tIiXlIwNVhJaY4W3TmOtdc8jqdXQcB1v5Yw==", - "dependencies": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.19.0", - "babel-plugin-polyfill-corejs2": "^0.3.3", - "babel-plugin-polyfill-corejs3": "^0.6.0", - "babel-plugin-polyfill-regenerator": "^0.4.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", - "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.20.7.tgz", - "integrity": "sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", - "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", - "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", - "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typescript": { - "version": "7.20.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.20.13.tgz", - "integrity": "sha512-O7I/THxarGcDZxkgWKMUrk7NK1/WbHAg3Xx86gqS6x9MTrNL6AwIluuZ96ms4xeDe6AVx6rjHbWHP7x26EPQBA==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.20.12", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-typescript": "^7.20.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz", - "integrity": "sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", - "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-env": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.20.2.tgz", - "integrity": "sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg==", - "dependencies": { - "@babel/compat-data": "^7.20.1", - "@babel/helper-compilation-targets": "^7.20.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-async-generator-functions": "^7.20.1", - "@babel/plugin-proposal-class-properties": "^7.18.6", - "@babel/plugin-proposal-class-static-block": "^7.18.6", - "@babel/plugin-proposal-dynamic-import": "^7.18.6", - "@babel/plugin-proposal-export-namespace-from": "^7.18.9", - "@babel/plugin-proposal-json-strings": "^7.18.6", - "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", - "@babel/plugin-proposal-numeric-separator": "^7.18.6", - "@babel/plugin-proposal-object-rest-spread": "^7.20.2", - "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", - "@babel/plugin-proposal-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-private-methods": "^7.18.6", - "@babel/plugin-proposal-private-property-in-object": "^7.18.6", - "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.20.0", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-transform-arrow-functions": "^7.18.6", - "@babel/plugin-transform-async-to-generator": "^7.18.6", - "@babel/plugin-transform-block-scoped-functions": "^7.18.6", - "@babel/plugin-transform-block-scoping": "^7.20.2", - "@babel/plugin-transform-classes": "^7.20.2", - "@babel/plugin-transform-computed-properties": "^7.18.9", - "@babel/plugin-transform-destructuring": "^7.20.2", - "@babel/plugin-transform-dotall-regex": "^7.18.6", - "@babel/plugin-transform-duplicate-keys": "^7.18.9", - "@babel/plugin-transform-exponentiation-operator": "^7.18.6", - "@babel/plugin-transform-for-of": "^7.18.8", - "@babel/plugin-transform-function-name": "^7.18.9", - "@babel/plugin-transform-literals": "^7.18.9", - "@babel/plugin-transform-member-expression-literals": "^7.18.6", - "@babel/plugin-transform-modules-amd": "^7.19.6", - "@babel/plugin-transform-modules-commonjs": "^7.19.6", - "@babel/plugin-transform-modules-systemjs": "^7.19.6", - "@babel/plugin-transform-modules-umd": "^7.18.6", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.19.1", - "@babel/plugin-transform-new-target": "^7.18.6", - "@babel/plugin-transform-object-super": "^7.18.6", - "@babel/plugin-transform-parameters": "^7.20.1", - "@babel/plugin-transform-property-literals": "^7.18.6", - "@babel/plugin-transform-regenerator": "^7.18.6", - "@babel/plugin-transform-reserved-words": "^7.18.6", - "@babel/plugin-transform-shorthand-properties": "^7.18.6", - "@babel/plugin-transform-spread": "^7.19.0", - "@babel/plugin-transform-sticky-regex": "^7.18.6", - "@babel/plugin-transform-template-literals": "^7.18.9", - "@babel/plugin-transform-typeof-symbol": "^7.18.9", - "@babel/plugin-transform-unicode-escapes": "^7.18.10", - "@babel/plugin-transform-unicode-regex": "^7.18.6", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.20.2", - "babel-plugin-polyfill-corejs2": "^0.3.3", - "babel-plugin-polyfill-corejs3": "^0.6.0", - "babel-plugin-polyfill-regenerator": "^0.4.1", - "core-js-compat": "^3.25.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-modules": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", - "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-react": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.18.6.tgz", - "integrity": "sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-transform-react-display-name": "^7.18.6", - "@babel/plugin-transform-react-jsx": "^7.18.6", - "@babel/plugin-transform-react-jsx-development": "^7.18.6", - "@babel/plugin-transform-react-pure-annotations": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-typescript": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.18.6.tgz", - "integrity": "sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-transform-typescript": "^7.18.6" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1758,9 +271,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.7.tgz", - "integrity": "sha512-UwgBRMjJP+xv857DCngvqXI3Iq6J4v0wXmwc6sapg+zyhbwmQX67LUEFrkK5tbyJ30jGuG3ZvWpBiB9LCy1kWw==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.0.tgz", + "integrity": "sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==", "license": "MIT", "dependencies": { "regenerator-runtime": "^0.14.0" @@ -1769,614 +282,784 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/runtime/node_modules/regenerator-runtime": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", - "license": "MIT" - }, "node_modules/@babel/template": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", - "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz", + "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==", + "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7" + "@babel/code-frame": "^7.25.9", + "@babel/parser": "^7.25.9", + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.20.13", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.13.tgz", - "integrity": "sha512-kMJXfF0T6DIS9E8cgdLCSAL+cuCK+YEZHWiLK0SXpTo8YRj5lpJu3CDNKiIBCne4m9hhTIqUg6SYTAI39tAiVQ==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.9.tgz", + "integrity": "sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==", + "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.7", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.20.13", - "@babel/types": "^7.20.7", - "debug": "^4.1.0", + "@babel/code-frame": "^7.25.9", + "@babel/generator": "^7.25.9", + "@babel/parser": "^7.25.9", + "@babel/template": "^7.25.9", + "@babel/types": "^7.25.9", + "debug": "^4.3.1", "globals": "^11.1.0" }, "engines": { "node": ">=6.9.0" } }, + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/@babel/types": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.7.tgz", - "integrity": "sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz", + "integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==", + "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.19.4", - "@babel/helper-validator-identifier": "^7.19.1", - "to-fast-properties": "^2.0.0" + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true - }, - "node_modules/@csstools/normalize.css": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-12.0.0.tgz", - "integrity": "sha512-M0qqxAcwCsIVfpFQSlGN5XjXWu8l5JDZN+fPt1LeW5SZexQTgnaEvgXAY+CeygRw0EeppWHi12JxESWiWrB0Sg==", - "dev": true - }, - "node_modules/@csstools/postcss-cascade-layers": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-1.1.1.tgz", - "integrity": "sha512-+KdYrpKC5TgomQr2DlZF4lDEpHcoxnj5IGddYYfBWJAKfj1JtuHUIqMa+E1pJJ+z3kvDViWMqyqPlG4Ja7amQA==", - "dev": true, - "dependencies": { - "@csstools/selector-specificity": "^2.0.2", - "postcss-selector-parser": "^6.0.10" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-color-function": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-1.1.1.tgz", - "integrity": "sha512-Bc0f62WmHdtRDjf5f3e2STwRAl89N2CLb+9iAwzrv4L2hncrbDwnQD9PCq0gtAt7pOI2leIV08HIBUd4jxD8cw==", - "dev": true, - "dependencies": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-font-format-keywords": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-1.0.1.tgz", - "integrity": "sha512-ZgrlzuUAjXIOc2JueK0X5sZDjCtgimVp/O5CEqTcs5ShWBa6smhWYbS0x5cVc/+rycTDbjjzoP0KTDnUneZGOg==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-hwb-function": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-1.0.2.tgz", - "integrity": "sha512-YHdEru4o3Rsbjmu6vHy4UKOXZD+Rn2zmkAmLRfPet6+Jz4Ojw8cbWxe1n42VaXQhD3CQUXXTooIy8OkVbUcL+w==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-ic-unit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-1.0.1.tgz", - "integrity": "sha512-Ot1rcwRAaRHNKC9tAqoqNZhjdYBzKk1POgWfhN4uCOE47ebGcLRqXjKkApVDpjifL6u2/55ekkpnFcp+s/OZUw==", - "dev": true, - "dependencies": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-is-pseudo-class": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-2.0.7.tgz", - "integrity": "sha512-7JPeVVZHd+jxYdULl87lvjgvWldYu+Bc62s9vD/ED6/QTGjy0jy0US/f6BG53sVMTBJ1lzKZFpYmofBN9eaRiA==", - "dev": true, - "dependencies": { - "@csstools/selector-specificity": "^2.0.0", - "postcss-selector-parser": "^6.0.10" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-nested-calc": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-nested-calc/-/postcss-nested-calc-1.0.0.tgz", - "integrity": "sha512-JCsQsw1wjYwv1bJmgjKSoZNvf7R6+wuHDAbi5f/7MbFhl2d/+v+TvBTU4BJH3G1X1H87dHl0mh6TfYogbT/dJQ==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-normalize-display-values": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-1.0.1.tgz", - "integrity": "sha512-jcOanIbv55OFKQ3sYeFD/T0Ti7AMXc9nM1hZWu8m/2722gOTxFg7xYu4RDLJLeZmPUVQlGzo4jhzvTUq3x4ZUw==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-oklab-function": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-1.1.1.tgz", - "integrity": "sha512-nJpJgsdA3dA9y5pgyb/UfEzE7W5Ka7u0CX0/HIMVBNWzWemdcTH3XwANECU6anWv/ao4vVNLTMxhiPNZsTK6iA==", - "dev": true, - "dependencies": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-progressive-custom-properties": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-1.3.0.tgz", - "integrity": "sha512-ASA9W1aIy5ygskZYuWams4BzafD12ULvSypmaLJT2jvQ8G0M3I8PRQhC0h7mG0Z3LI05+agZjqSR9+K9yaQQjA==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "peerDependencies": { - "postcss": "^8.3" - } - }, - "node_modules/@csstools/postcss-stepped-value-functions": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-1.0.1.tgz", - "integrity": "sha512-dz0LNoo3ijpTOQqEJLY8nyaapl6umbmDcgj4AD0lgVQ572b2eqA1iGZYTTWhrcrHztWDDRAX2DGYyw2VBjvCvQ==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-text-decoration-shorthand": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-1.0.0.tgz", - "integrity": "sha512-c1XwKJ2eMIWrzQenN0XbcfzckOLLJiczqy+YvfGmzoVXd7pT9FfObiSEfzs84bpE/VqfpEuAZ9tCRbZkZxxbdw==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-trigonometric-functions": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-1.0.2.tgz", - "integrity": "sha512-woKaLO///4bb+zZC2s80l+7cm07M7268MsyG3M0ActXXEFi6SuhvriQYcb58iiKGbjwwIU7n45iRLEHypB47Og==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/postcss-unset-value": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@csstools/postcss-unset-value/-/postcss-unset-value-1.0.2.tgz", - "integrity": "sha512-c8J4roPBILnelAsdLr4XOAR/GsTm0GJi4XpcfvoWk3U6KiTCqiFYc63KhRMQQX35jYMp4Ao8Ij9+IZRgMfJp1g==", - "dev": true, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/@csstools/selector-specificity": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.1.1.tgz", - "integrity": "sha512-jwx+WCqszn53YHOfvFMJJRd/B2GqkCBt+1MJSG6o5/s8+ytHMvDZXsJgUEWLk12UnLd7HYKac4BYU5i/Ron1Cw==", - "dev": true, - "engines": { - "node": "^14 || ^16 || >=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.4", - "postcss-selector-parser": "^6.0.10" - } - }, "node_modules/@emotion/babel-plugin": { - "version": "11.10.5", - "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.10.5.tgz", - "integrity": "sha512-xE7/hyLHJac7D2Ve9dKroBBZqBT7WuPQmWcq7HSGb84sUuP4mlOWoB8dvVfD9yk5DHkU1m6RW7xSoDtnQHNQeA==", + "version": "11.13.5", + "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.13.5.tgz", + "integrity": "sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==", + "license": "MIT", "dependencies": { "@babel/helper-module-imports": "^7.16.7", - "@babel/plugin-syntax-jsx": "^7.17.12", "@babel/runtime": "^7.18.3", - "@emotion/hash": "^0.9.0", - "@emotion/memoize": "^0.8.0", - "@emotion/serialize": "^1.1.1", + "@emotion/hash": "^0.9.2", + "@emotion/memoize": "^0.9.0", + "@emotion/serialize": "^1.3.3", "babel-plugin-macros": "^3.1.0", "convert-source-map": "^1.5.0", "escape-string-regexp": "^4.0.0", "find-root": "^1.1.0", "source-map": "^0.5.7", - "stylis": "4.1.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@emotion/cache": { - "version": "11.11.0", - "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.11.0.tgz", - "integrity": "sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ==", - "license": "MIT", - "dependencies": { - "@emotion/memoize": "^0.8.1", - "@emotion/sheet": "^1.2.2", - "@emotion/utils": "^1.2.1", - "@emotion/weak-memoize": "^0.3.1", "stylis": "4.2.0" } }, - "node_modules/@emotion/cache/node_modules/stylis": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", - "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==", + "node_modules/@emotion/babel-plugin/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", "license": "MIT" }, + "node_modules/@emotion/cache": { + "version": "11.13.5", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.13.5.tgz", + "integrity": "sha512-Z3xbtJ+UcK76eWkagZ1onvn/wAVb1GOMuR15s30Fm2wrMgC7jzpnO2JZXr4eujTTqoQFUrZIw/rT0c6Zzjca1g==", + "license": "MIT", + "dependencies": { + "@emotion/memoize": "^0.9.0", + "@emotion/sheet": "^1.4.0", + "@emotion/utils": "^1.4.2", + "@emotion/weak-memoize": "^0.4.0", + "stylis": "4.2.0" + } + }, "node_modules/@emotion/hash": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.0.tgz", - "integrity": "sha512-14FtKiHhy2QoPIzdTcvh//8OyBlknNs2nXRwIhG904opCby3l+9Xaf/wuPvICBF0rc1ZCNBd3nKe9cd2mecVkQ==" + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.2.tgz", + "integrity": "sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==", + "license": "MIT" }, "node_modules/@emotion/is-prop-valid": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.0.tgz", - "integrity": "sha512-3aDpDprjM0AwaxGE09bOPkNxHpBd+kA6jty3RnaEXdweX1DF1U3VQpPYb0g1IStAuK7SVQ1cy+bNBBKp4W3Fjg==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.3.1.tgz", + "integrity": "sha512-/ACwoqx7XQi9knQs/G0qKvv5teDMhD7bXYns9N/wM8ah8iNb8jZ2uNO0YOgiq2o2poIvVtJS2YALasQuMSQ7Kw==", + "license": "MIT", "dependencies": { - "@emotion/memoize": "^0.8.0" + "@emotion/memoize": "^0.9.0" } }, "node_modules/@emotion/memoize": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz", - "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==", + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.9.0.tgz", + "integrity": "sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==", "license": "MIT" }, "node_modules/@emotion/react": { - "version": "11.10.5", - "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.10.5.tgz", - "integrity": "sha512-TZs6235tCJ/7iF6/rvTaOH4oxQg2gMAcdHemjwLKIjKz4rRuYe1HJ2TQJKnAcRAfOUDdU8XoDadCe1rl72iv8A==", + "version": "11.13.5", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.13.5.tgz", + "integrity": "sha512-6zeCUxUH+EPF1s+YF/2hPVODeV/7V07YU5x+2tfuRL8MdW6rv5vb2+CBEGTGwBdux0OIERcOS+RzxeK80k2DsQ==", + "license": "MIT", "dependencies": { "@babel/runtime": "^7.18.3", - "@emotion/babel-plugin": "^11.10.5", - "@emotion/cache": "^11.10.5", - "@emotion/serialize": "^1.1.1", - "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", - "@emotion/utils": "^1.2.0", - "@emotion/weak-memoize": "^0.3.0", + "@emotion/babel-plugin": "^11.13.5", + "@emotion/cache": "^11.13.5", + "@emotion/serialize": "^1.3.3", + "@emotion/use-insertion-effect-with-fallbacks": "^1.1.0", + "@emotion/utils": "^1.4.2", + "@emotion/weak-memoize": "^0.4.0", "hoist-non-react-statics": "^3.3.1" }, "peerDependencies": { - "@babel/core": "^7.0.0", "react": ">=16.8.0" }, "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, "@types/react": { "optional": true } } }, "node_modules/@emotion/serialize": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.1.tgz", - "integrity": "sha512-Zl/0LFggN7+L1liljxXdsVSVlg6E/Z/olVWpfxUTxOAmi8NU7YoeWeLfi1RmnB2TATHoaWwIBRoL+FvAJiTUQA==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.3.3.tgz", + "integrity": "sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA==", + "license": "MIT", "dependencies": { - "@emotion/hash": "^0.9.0", - "@emotion/memoize": "^0.8.0", - "@emotion/unitless": "^0.8.0", - "@emotion/utils": "^1.2.0", + "@emotion/hash": "^0.9.2", + "@emotion/memoize": "^0.9.0", + "@emotion/unitless": "^0.10.0", + "@emotion/utils": "^1.4.2", "csstype": "^3.0.2" } }, "node_modules/@emotion/sheet": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.2.2.tgz", - "integrity": "sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.4.0.tgz", + "integrity": "sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==", "license": "MIT" }, "node_modules/@emotion/styled": { - "version": "11.10.5", - "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.10.5.tgz", - "integrity": "sha512-8EP6dD7dMkdku2foLoruPCNkRevzdcBaY6q0l0OsbyJK+x8D9HWjX27ARiSIKNF634hY9Zdoedh8bJCiva8yZw==", + "version": "11.13.5", + "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.13.5.tgz", + "integrity": "sha512-gnOQ+nGLPvDXgIx119JqGalys64lhMdnNQA9TMxhDA4K0Hq5+++OE20Zs5GxiCV9r814xQ2K5WmtofSpHVW6BQ==", + "license": "MIT", "dependencies": { "@babel/runtime": "^7.18.3", - "@emotion/babel-plugin": "^11.10.5", - "@emotion/is-prop-valid": "^1.2.0", - "@emotion/serialize": "^1.1.1", - "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", - "@emotion/utils": "^1.2.0" + "@emotion/babel-plugin": "^11.13.5", + "@emotion/is-prop-valid": "^1.3.0", + "@emotion/serialize": "^1.3.3", + "@emotion/use-insertion-effect-with-fallbacks": "^1.1.0", + "@emotion/utils": "^1.4.2" }, "peerDependencies": { - "@babel/core": "^7.0.0", "@emotion/react": "^11.0.0-rc.0", "react": ">=16.8.0" }, "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, "@types/react": { "optional": true } } }, - "node_modules/@emotion/stylis": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/@emotion/stylis/-/stylis-0.8.5.tgz", - "integrity": "sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ==" - }, "node_modules/@emotion/unitless": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.0.tgz", - "integrity": "sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw==" + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.10.0.tgz", + "integrity": "sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==", + "license": "MIT" }, "node_modules/@emotion/use-insertion-effect-with-fallbacks": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.0.tgz", - "integrity": "sha512-1eEgUGmkaljiBnRMTdksDV1W4kUnmwgp7X9G8B++9GYwl1lUdqSndSriIrTJ0N7LQaoauY9JJ2yhiOYK5+NI4A==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.1.0.tgz", + "integrity": "sha512-+wBOcIV5snwGgI2ya3u99D7/FJquOIniQT1IKyDsBmEgwvpxMNeS65Oib7OnE2d2aY+3BU4OiH+0Wchf8yk3Hw==", + "license": "MIT", "peerDependencies": { "react": ">=16.8.0" } }, "node_modules/@emotion/utils": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.1.tgz", - "integrity": "sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg==", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.4.2.tgz", + "integrity": "sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA==", "license": "MIT" }, "node_modules/@emotion/weak-memoize": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz", - "integrity": "sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.4.0.tgz", + "integrity": "sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==", "license": "MIT" }, - "node_modules/@eslint/eslintrc": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.1.tgz", - "integrity": "sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==", + "node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz", + "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==", + "dev": true, + "license": "MIT", "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.4.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" + "eslint-visitor-keys": "^3.4.3" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.19.0.tgz", + "integrity": "sha512-zdHg2FPIFNKPdcHWtiNT+jEFCHYVplAXRDlQDyqy0zGx/q2parwh7brGJSiTxRk/TSMkbM//zt/f5CHgyTyaSQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.4", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.9.0.tgz", + "integrity": "sha512-7ATR9F0e4W85D/0w7cU0SNj7qkAexMG+bAHEZOjo9akvGuhHE2m7umzWzfnpa0XAg5Kxc1BWmtPMV67jJ+9VUg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.2.0.tgz", + "integrity": "sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, "funding": { "url": "https://opencollective.com/eslint" } }, "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", - "dependencies": { - "type-fest": "^0.20.2" - }, + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@eslint/eslintrc/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "node_modules/@eslint/js": { + "version": "9.15.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.15.0.tgz", + "integrity": "sha512-tMTqrY+EzbXmKJR5ToI8lxu7jaN5EdmrBFJpQk5JmSlyLsx6o4t27r883K5xsLuCYCpfKBCGswMSWXsM+jB7lg==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=10" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.4.tgz", + "integrity": "sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.3.tgz", + "integrity": "sha512-2b/g5hRmpbb1o4GnTZax9N9m0FXzz9OV42ZzI4rDDMDuHUqigAiQCEWChBWCY4ztAGVRjoWT19v0yMmc5/L5kA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", + "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@floating-ui/core": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.2.tgz", - "integrity": "sha512-+2XpQV9LLZeanU4ZevzRnGFg2neDeKHgFLjP6YLW+tly0IvrhqT4u8enLGjLH3qeh85g19xY5rsAusfwTdn5lg==", - "license": "MIT", - "dependencies": { - "@floating-ui/utils": "^0.2.0" - } - }, - "node_modules/@floating-ui/dom": { - "version": "1.6.5", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.5.tgz", - "integrity": "sha512-Nsdud2X65Dz+1RHjAIP0t8z5e2ff/IRbei6BqFrl1urT8sDVzM1HMQ+R0XcU5ceRfyO3I6ayeqIfh+6Wb8LGTw==", - "license": "MIT", - "dependencies": { - "@floating-ui/core": "^1.0.0", - "@floating-ui/utils": "^0.2.0" - } - }, - "node_modules/@floating-ui/react-dom": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.0.tgz", - "integrity": "sha512-lNzj5EQmEKn5FFKc04+zasr09h/uX8RtJRNj5gUXsSQIXHVWTVh+hVAg1vOMCexkX8EgvemMvIFpQfkosnVNyA==", - "license": "MIT", - "dependencies": { - "@floating-ui/dom": "^1.0.0" - }, - "peerDependencies": { - "react": ">=16.8.0", - "react-dom": ">=16.8.0" - } - }, - "node_modules/@floating-ui/utils": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.2.tgz", - "integrity": "sha512-J4yDIIthosAsRZ5CPYP/jQvUAQtlZTTD/4suA08/FEnlxqW3sKS9iAhgsa9VYLZ6vDHn/ixJgIqRQPotoBjxIw==", - "license": "MIT" - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.8", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", - "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", - "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=10.10.0" + "type": "github", + "url": "https://github.com/sponsors/nzakas" } }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=12.22" }, @@ -2385,867 +1068,97 @@ "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==" - }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "node_modules/@humanwhocodes/retry": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.1.tgz", + "integrity": "sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==", "dev": true, - "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, + "license": "Apache-2.0", "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" + "node": ">=18.18" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/console": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", - "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", - "dev": true, - "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^27.5.1", - "jest-util": "^27.5.1", - "slash": "^3.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/console/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/console/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/console/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/console/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/@jest/console/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/console/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/core": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz", - "integrity": "sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==", - "dev": true, - "dependencies": { - "@jest/console": "^27.5.1", - "@jest/reporters": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.8.1", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^27.5.1", - "jest-config": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-resolve-dependencies": "^27.5.1", - "jest-runner": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "jest-watcher": "^27.5.1", - "micromatch": "^4.0.4", - "rimraf": "^3.0.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/core/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/core/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/core/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/core/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/@jest/core/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/core/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/environment": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", - "integrity": "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==", - "dev": true, - "dependencies": { - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "jest-mock": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/fake-timers": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", - "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", - "dev": true, - "dependencies": { - "@jest/types": "^27.5.1", - "@sinonjs/fake-timers": "^8.0.1", - "@types/node": "*", - "jest-message-util": "^27.5.1", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/globals": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", - "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", - "dev": true, - "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/types": "^27.5.1", - "expect": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/reporters": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz", - "integrity": "sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==", - "dev": true, - "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.2", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^5.1.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-haste-map": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "slash": "^3.0.0", - "source-map": "^0.6.0", - "string-length": "^4.0.1", - "terminal-link": "^2.0.0", - "v8-to-istanbul": "^8.1.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/reporters/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/reporters/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/reporters/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/reporters/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/@jest/reporters/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/reporters/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@jest/reporters/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/schemas": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", - "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", - "dev": true, - "dependencies": { - "@sinclair/typebox": "^0.24.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/@jest/source-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", - "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9", - "source-map": "^0.6.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/source-map/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@jest/test-result": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", - "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", - "dev": true, - "dependencies": { - "@jest/console": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/test-sequencer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz", - "integrity": "sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==", - "dev": true, - "dependencies": { - "@jest/test-result": "^27.5.1", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-runtime": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/transform": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", - "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", - "dev": true, - "dependencies": { - "@babel/core": "^7.1.0", - "@jest/types": "^27.5.1", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-util": "^27.5.1", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/transform/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/transform/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/transform/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/transform/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/@jest/transform/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/transform/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@jest/transform/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/@jest/types/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@jest/types/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@jest/types/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@jest/types/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/@jest/types/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/types/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" + "type": "github", + "url": "https://github.com/sponsors/nzakas" } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "license": "MIT", "dependencies": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "license": "MIT", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", - "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "node_modules/@jridgewell/source-map/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "license": "MIT", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.17", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", - "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", - "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - }, - "node_modules/@leichtgewicht/ip-codec": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", - "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==", - "dev": true - }, - "node_modules/@mdi/js": { - "version": "7.1.96", - "resolved": "https://registry.npmjs.org/@mdi/js/-/js-7.1.96.tgz", - "integrity": "sha512-wlrJs6Ryhaa5CqhK3FjTfMRnb/s7HeLkKMFqwQySkK86cdN1TGdzpSM3O4tsmzCA1dYBeTbXvOwSE/Y42cUrvA==" - }, - "node_modules/@mdi/react": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@mdi/react/-/react-1.6.1.tgz", - "integrity": "sha512-4qZeDcluDFGFTWkHs86VOlHkm6gnKaMql13/gpIcUQ8kzxHgpj31NuCkD8abECVfbULJ3shc7Yt4HJ6Wu6SN4w==", - "dependencies": { - "prop-types": "^15.7.2" - } - }, - "node_modules/@mui/base": { - "version": "5.0.0-beta.40", - "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.40.tgz", - "integrity": "sha512-I/lGHztkCzvwlXpjD2+SNmvNQvB4227xBXhISPjEaJUXGImOQ9f3D2Yj/T3KasSI/h0MLWy74X0J6clhPmsRbQ==", + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.23.9", - "@floating-ui/react-dom": "^2.0.8", - "@mui/types": "^7.2.14", - "@mui/utils": "^5.15.14", - "@popperjs/core": "^2.11.8", - "clsx": "^2.1.0", - "prop-types": "^15.8.1" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@mui/core-downloads-tracker": { + "version": "6.1.8", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-6.1.8.tgz", + "integrity": "sha512-TGAvzwUg9hybDacwfIGFjI2bXYXrIqky+vMfaeay8rvT56/PNAlvIDUJ54kpT5KRc9AWAihOvtDI7/LJOThOmQ==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + } + }, + "node_modules/@mui/icons-material": { + "version": "6.1.8", + "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-6.1.8.tgz", + "integrity": "sha512-6frsXcf1TcJKWevWwRup6V4L8lzI33cbHcAjT83YLgKw0vYRZKY0kjMI9fhrJZdRWXgFFgKKvEv3GjoxbqFF7A==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.26.0" }, "engines": { - "node": ">=12.0.0" + "node": ">=14.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/mui-org" }, "peerDependencies": { - "@types/react": "^17.0.0 || ^18.0.0", - "react": "^17.0.0 || ^18.0.0", - "react-dom": "^17.0.0 || ^18.0.0" + "@mui/material": "^6.1.8", + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" }, "peerDependenciesMeta": { "@types/react": { @@ -3253,37 +1166,27 @@ } } }, - "node_modules/@mui/core-downloads-tracker": { - "version": "5.15.20", - "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.15.20.tgz", - "integrity": "sha512-DoL2ppgldL16utL8nNyj/P12f8mCNdx/Hb/AJnX9rLY4b52hCMIx1kH83pbXQ6uMy6n54M3StmEbvSGoj2OFuA==", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mui-org" - } - }, "node_modules/@mui/material": { - "version": "5.15.18", - "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.15.18.tgz", - "integrity": "sha512-n+/dsiqux74fFfcRUJjok+ieNQ7+BEk6/OwX9cLcLvriZrZb+/7Y8+Fd2HlUUbn5N0CDurgAHm0VH1DqyJ9HAw==", + "version": "6.1.8", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-6.1.8.tgz", + "integrity": "sha512-QZdQFnXct+7NXIzHgT3qt+sQiO7HYGZU2vymP9Xl9tUMXEOA/S1mZMMb7+WGZrk5TzNlU/kP/85K0da5V1jXoQ==", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.23.9", - "@mui/base": "5.0.0-beta.40", - "@mui/core-downloads-tracker": "^5.15.18", - "@mui/system": "^5.15.15", - "@mui/types": "^7.2.14", - "@mui/utils": "^5.15.14", - "@types/react-transition-group": "^4.4.10", - "clsx": "^2.1.0", + "@babel/runtime": "^7.26.0", + "@mui/core-downloads-tracker": "^6.1.8", + "@mui/system": "^6.1.8", + "@mui/types": "^7.2.19", + "@mui/utils": "^6.1.8", + "@popperjs/core": "^2.11.8", + "@types/react-transition-group": "^4.4.11", + "clsx": "^2.1.1", "csstype": "^3.1.3", "prop-types": "^15.8.1", - "react-is": "^18.2.0", + "react-is": "^18.3.1", "react-transition-group": "^4.4.5" }, "engines": { - "node": ">=12.0.0" + "node": ">=14.0.0" }, "funding": { "type": "opencollective", @@ -3292,9 +1195,10 @@ "peerDependencies": { "@emotion/react": "^11.5.0", "@emotion/styled": "^11.3.0", - "@types/react": "^17.0.0 || ^18.0.0", - "react": "^17.0.0 || ^18.0.0", - "react-dom": "^17.0.0 || ^18.0.0" + "@mui/material-pigment-css": "^6.1.8", + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0" }, "peerDependenciesMeta": { "@emotion/react": { @@ -3303,31 +1207,34 @@ "@emotion/styled": { "optional": true }, + "@mui/material-pigment-css": { + "optional": true + }, "@types/react": { "optional": true } } }, "node_modules/@mui/private-theming": { - "version": "5.15.20", - "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.15.20.tgz", - "integrity": "sha512-BK8F94AIqSrnaPYXf2KAOjGZJgWfvqAVQ2gVR3EryvQFtuBnG6RwodxrCvd3B48VuMy6Wsk897+lQMUxJyk+6g==", + "version": "6.1.8", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-6.1.8.tgz", + "integrity": "sha512-TuKl7msynCNCVvhX3c0ef1sF0Qb3VHcPs8XOGB/8bdOGBr/ynmIG1yTMjZeiFQXk8yN9fzK/FDEKMFxILNn3wg==", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.23.9", - "@mui/utils": "^5.15.20", + "@babel/runtime": "^7.26.0", + "@mui/utils": "^6.1.8", "prop-types": "^15.8.1" }, "engines": { - "node": ">=12.0.0" + "node": ">=14.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/mui-org" }, "peerDependencies": { - "@types/react": "^17.0.0 || ^18.0.0", - "react": "^17.0.0 || ^18.0.0" + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" }, "peerDependenciesMeta": { "@types/react": { @@ -3336,18 +1243,20 @@ } }, "node_modules/@mui/styled-engine": { - "version": "5.15.14", - "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.15.14.tgz", - "integrity": "sha512-RILkuVD8gY6PvjZjqnWhz8fu68dVkqhM5+jYWfB5yhlSQKg+2rHkmEwm75XIeAqI3qwOndK6zELK5H6Zxn4NHw==", + "version": "6.1.8", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-6.1.8.tgz", + "integrity": "sha512-ZvEoT0U2nPLSLI+B4by4cVjaZnPT2f20f4JUPkyHdwLv65ZzuoHiTlwyhqX1Ch63p8bcJzKTHQVGisEoMK6PGA==", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.23.9", - "@emotion/cache": "^11.11.0", + "@babel/runtime": "^7.26.0", + "@emotion/cache": "^11.13.1", + "@emotion/serialize": "^1.3.2", + "@emotion/sheet": "^1.4.0", "csstype": "^3.1.3", "prop-types": "^15.8.1" }, "engines": { - "node": ">=12.0.0" + "node": ">=14.0.0" }, "funding": { "type": "opencollective", @@ -3356,7 +1265,7 @@ "peerDependencies": { "@emotion/react": "^11.4.1", "@emotion/styled": "^11.3.0", - "react": "^17.0.0 || ^18.0.0" + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" }, "peerDependenciesMeta": { "@emotion/react": { @@ -3368,22 +1277,22 @@ } }, "node_modules/@mui/system": { - "version": "5.15.20", - "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.15.20.tgz", - "integrity": "sha512-LoMq4IlAAhxzL2VNUDBTQxAb4chnBe8JvRINVNDiMtHE2PiPOoHlhOPutSxEbaL5mkECPVWSv6p8JEV+uykwIA==", + "version": "6.1.8", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-6.1.8.tgz", + "integrity": "sha512-i1kLfQoWxzFpXTBQIuPoA3xKnAnP3en4I2T8xIolovSolGQX5k8vGjw1JaydQS40td++cFsgCdEU458HDNTGUA==", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.23.9", - "@mui/private-theming": "^5.15.20", - "@mui/styled-engine": "^5.15.14", - "@mui/types": "^7.2.14", - "@mui/utils": "^5.15.20", - "clsx": "^2.1.0", + "@babel/runtime": "^7.26.0", + "@mui/private-theming": "^6.1.8", + "@mui/styled-engine": "^6.1.8", + "@mui/types": "^7.2.19", + "@mui/utils": "^6.1.8", + "clsx": "^2.1.1", "csstype": "^3.1.3", "prop-types": "^15.8.1" }, "engines": { - "node": ">=12.0.0" + "node": ">=14.0.0" }, "funding": { "type": "opencollective", @@ -3392,8 +1301,8 @@ "peerDependencies": { "@emotion/react": "^11.5.0", "@emotion/styled": "^11.3.0", - "@types/react": "^17.0.0 || ^18.0.0", - "react": "^17.0.0 || ^18.0.0" + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" }, "peerDependenciesMeta": { "@emotion/react": { @@ -3408,12 +1317,12 @@ } }, "node_modules/@mui/types": { - "version": "7.2.14", - "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.14.tgz", - "integrity": "sha512-MZsBZ4q4HfzBsywtXgM1Ksj6HDThtiwmOKUXH1pKYISI9gAVXCNHNpo7TlGoGrBaYWZTdNoirIN7JsQcQUjmQQ==", + "version": "7.2.19", + "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.19.tgz", + "integrity": "sha512-6XpZEM/Q3epK9RN8ENoXuygnqUQxE+siN/6rGRi2iwJPgBUR25mphYQ9ZI87plGh58YoZ5pp40bFvKYOCDJ3tA==", "license": "MIT", "peerDependencies": { - "@types/react": "^17.0.0 || ^18.0.0" + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0" }, "peerDependenciesMeta": { "@types/react": { @@ -3422,26 +1331,28 @@ } }, "node_modules/@mui/utils": { - "version": "5.15.20", - "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.15.20.tgz", - "integrity": "sha512-mAbYx0sovrnpAu1zHc3MDIhPqL8RPVC5W5xcO1b7PiSCJPtckIZmBkp8hefamAvUiAV8gpfMOM6Zb+eSisbI2A==", + "version": "6.1.8", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-6.1.8.tgz", + "integrity": "sha512-O2DWb1kz8hiANVcR7Z4gOB3SvPPsSQGUmStpyBDzde6dJIfBzgV9PbEQOBZd3EBsd1pB+Uv1z5LAJAbymmawrA==", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.23.9", - "@types/prop-types": "^15.7.11", + "@babel/runtime": "^7.26.0", + "@mui/types": "^7.2.19", + "@types/prop-types": "^15.7.13", + "clsx": "^2.1.1", "prop-types": "^15.8.1", - "react-is": "^18.2.0" + "react-is": "^18.3.1" }, "engines": { - "node": ">=12.0.0" + "node": ">=14.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/mui-org" }, "peerDependencies": { - "@types/react": "^17.0.0 || ^18.0.0", - "react": "^17.0.0 || ^18.0.0" + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" }, "peerDependenciesMeta": { "@types/react": { @@ -3449,38 +1360,178 @@ } } }, - "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": { - "version": "5.1.1-v1", - "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", - "integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==", + "node_modules/@mui/x-charts": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@mui/x-charts/-/x-charts-7.24.1.tgz", + "integrity": "sha512-OdTS/nXaANPe4AoUFIDD4LlID8kK/00q+uqVOCkVClEvFQeAkj3pBaghdS4hY7rVqsCgsm+yOStQVJa9G2MR+Q==", + "license": "MIT", "dependencies": { - "eslint-scope": "5.1.1" - } - }, - "node_modules/@nicolo-ribaudo/eslint-scope-5-internals/node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "@babel/runtime": "^7.25.7", + "@mui/utils": "^5.16.6 || ^6.0.0", + "@mui/x-charts-vendor": "7.20.0", + "@mui/x-internals": "7.24.1", + "@react-spring/rafz": "^9.7.5", + "@react-spring/web": "^9.7.5", + "clsx": "^2.1.1", + "prop-types": "^15.8.1" }, "engines": { - "node": ">=8.0.0" + "node": ">=14.0.0" + }, + "peerDependencies": { + "@emotion/react": "^11.9.0", + "@emotion/styled": "^11.8.1", + "@mui/material": "^5.15.14 || ^6.0.0", + "@mui/system": "^5.15.14 || ^6.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + } } }, - "node_modules/@nicolo-ribaudo/eslint-scope-5-internals/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "node_modules/@mui/x-charts-vendor": { + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@mui/x-charts-vendor/-/x-charts-vendor-7.20.0.tgz", + "integrity": "sha512-pzlh7z/7KKs5o0Kk0oPcB+sY0+Dg7Q7RzqQowDQjpy5Slz6qqGsgOB5YUzn0L+2yRmvASc4Pe0914Ao3tMBogg==", + "license": "MIT AND ISC", + "dependencies": { + "@babel/runtime": "^7.25.7", + "@types/d3-color": "^3.1.3", + "@types/d3-delaunay": "^6.0.4", + "@types/d3-interpolate": "^3.0.4", + "@types/d3-scale": "^4.0.8", + "@types/d3-shape": "^3.1.6", + "@types/d3-time": "^3.0.3", + "d3-color": "^3.1.0", + "d3-delaunay": "^6.0.4", + "d3-interpolate": "^3.0.1", + "d3-scale": "^4.0.2", + "d3-shape": "^3.2.0", + "d3-time": "^3.1.0", + "delaunator": "^5.0.1", + "robust-predicates": "^3.0.2" + } + }, + "node_modules/@mui/x-charts/node_modules/@mui/x-internals": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@mui/x-internals/-/x-internals-7.24.1.tgz", + "integrity": "sha512-9BvJzpLJnS9BDphvkiv6v0QOLxbnu8jhwcexFjtCQ2ZyxtVuVsWzGZ2npT9sGOil7+eaFDmWnJtea/tgrPvSwQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.25.7", + "@mui/utils": "^5.16.6 || ^6.0.0" + }, "engines": { - "node": ">=4.0" + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/@mui/x-date-pickers": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@mui/x-date-pickers/-/x-date-pickers-7.23.3.tgz", + "integrity": "sha512-bjTYX/QzD5ZhVZNNnastMUS3j2Hy4p4IXmJgPJ0vKvQBvUdfEO+ZF42r3PJNNde0FVT1MmTzkmdTlz0JZ6ukdw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/runtime": "^7.25.7", + "@mui/utils": "^5.16.6 || ^6.0.0", + "@mui/x-internals": "7.23.0", + "@types/react-transition-group": "^4.4.11", + "clsx": "^2.1.1", + "prop-types": "^15.8.1", + "react-transition-group": "^4.4.5" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@emotion/react": "^11.9.0", + "@emotion/styled": "^11.8.1", + "@mui/material": "^5.15.14 || ^6.0.0", + "@mui/system": "^5.15.14 || ^6.0.0", + "date-fns": "^2.25.0 || ^3.2.0 || ^4.0.0", + "date-fns-jalali": "^2.13.0-0 || ^3.2.0-0", + "dayjs": "^1.10.7", + "luxon": "^3.0.2", + "moment": "^2.29.4", + "moment-hijri": "^2.1.2 || ^3.0.0", + "moment-jalaali": "^0.7.4 || ^0.8.0 || ^0.9.0 || ^0.10.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + }, + "date-fns": { + "optional": true + }, + "date-fns-jalali": { + "optional": true + }, + "dayjs": { + "optional": true + }, + "luxon": { + "optional": true + }, + "moment": { + "optional": true + }, + "moment-hijri": { + "optional": true + }, + "moment-jalaali": { + "optional": true + } + } + }, + "node_modules/@mui/x-internals": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@mui/x-internals/-/x-internals-7.23.0.tgz", + "integrity": "sha512-bPclKpqUiJYIHqmTxSzMVZi6MH51cQsn5U+8jskaTlo3J4QiMeCYJn/gn7YbeR9GOZFp8hetyHjoQoVHKRXCig==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/runtime": "^7.25.7", + "@mui/utils": "^5.16.6 || ^6.0.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" } }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -3493,6 +1544,8 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", "engines": { "node": ">= 8" } @@ -3501,6 +1554,8 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -3509,65 +1564,6 @@ "node": ">= 8" } }, - "node_modules/@pmmmwh/react-refresh-webpack-plugin": { - "version": "0.5.10", - "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.10.tgz", - "integrity": "sha512-j0Ya0hCFZPd4x40qLzbhGsh9TMtdb+CJQiso+WxLOPNasohq9cc5SNUcwsZaRH6++Xh91Xkm/xHCkuIiIu0LUA==", - "dev": true, - "dependencies": { - "ansi-html-community": "^0.0.8", - "common-path-prefix": "^3.0.0", - "core-js-pure": "^3.23.3", - "error-stack-parser": "^2.0.6", - "find-up": "^5.0.0", - "html-entities": "^2.1.0", - "loader-utils": "^2.0.4", - "schema-utils": "^3.0.0", - "source-map": "^0.7.3" - }, - "engines": { - "node": ">= 10.13" - }, - "peerDependencies": { - "@types/webpack": "4.x || 5.x", - "react-refresh": ">=0.10.0 <1.0.0", - "sockjs-client": "^1.4.0", - "type-fest": ">=0.17.0 <4.0.0", - "webpack": ">=4.43.0 <6.0.0", - "webpack-dev-server": "3.x || 4.x", - "webpack-hot-middleware": "2.x", - "webpack-plugin-serve": "0.x || 1.x" - }, - "peerDependenciesMeta": { - "@types/webpack": { - "optional": true - }, - "sockjs-client": { - "optional": true - }, - "type-fest": { - "optional": true - }, - "webpack-dev-server": { - "optional": true - }, - "webpack-hot-middleware": { - "optional": true - }, - "webpack-plugin-serve": { - "optional": true - } - } - }, - "node_modules/@pmmmwh/react-refresh-webpack-plugin/node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, "node_modules/@popperjs/core": { "version": "2.11.8", "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", @@ -3578,586 +1574,412 @@ "url": "https://opencollective.com/popperjs" } }, - "node_modules/@react-aria/ssr": { - "version": "3.9.4", - "resolved": "https://registry.npmjs.org/@react-aria/ssr/-/ssr-3.9.4.tgz", - "integrity": "sha512-4jmAigVq409qcJvQyuorsmBR4+9r3+JEC60wC+Y0MZV0HCtTmm8D9guYXlJMdx0SSkgj0hHAyFm/HvPNFofCoQ==", - "license": "Apache-2.0", - "dependencies": { - "@swc/helpers": "^0.5.0" - }, - "engines": { - "node": ">= 12" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0" - } - }, - "node_modules/@remix-run/router": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.16.1.tgz", - "integrity": "sha512-es2g3dq6Nb07iFxGk5GuHN20RwBZOsuDQN7izWIisUcv9r+d2C5jQxqmgkdebXgReWfiyUabcki6Fg77mSNrig==", - "license": "MIT", - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@restart/hooks": { - "version": "0.4.16", - "resolved": "https://registry.npmjs.org/@restart/hooks/-/hooks-0.4.16.tgz", - "integrity": "sha512-f7aCv7c+nU/3mF7NWLtVVr0Ra80RqsO89hO72r+Y/nvQr5+q0UFGkocElTH6MJApvReVh6JHUFYn2cw1WdHF3w==", + "node_modules/@react-spring/animated": { + "version": "9.7.5", + "resolved": "https://registry.npmjs.org/@react-spring/animated/-/animated-9.7.5.tgz", + "integrity": "sha512-Tqrwz7pIlsSDITzxoLS3n/v/YCUHQdOIKtOJf4yL6kYVSDTSmVK1LI1Q3M/uu2Sx4X3pIWF3xLUhlsA6SPNTNg==", "license": "MIT", "dependencies": { - "dequal": "^2.0.3" + "@react-spring/shared": "~9.7.5", + "@react-spring/types": "~9.7.5" }, "peerDependencies": { - "react": ">=16.8.0" + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/@restart/ui": { - "version": "1.6.9", - "resolved": "https://registry.npmjs.org/@restart/ui/-/ui-1.6.9.tgz", - "integrity": "sha512-mUbygUsJcRurjZCt1f77gg4DpheD1D+Sc7J3JjAkysUj7t8m4EBJVOqWC9788Qtbc69cJ+HlJc6jBguKwS8Mcw==", + "node_modules/@react-spring/core": { + "version": "9.7.5", + "resolved": "https://registry.npmjs.org/@react-spring/core/-/core-9.7.5.tgz", + "integrity": "sha512-rmEqcxRcu7dWh7MnCcMXLvrf6/SDlSokLaLTxiPlAYi11nN3B5oiCUAblO72o+9z/87j2uzxa2Inm8UbLjXA+w==", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.21.0", - "@popperjs/core": "^2.11.6", - "@react-aria/ssr": "^3.5.0", - "@restart/hooks": "^0.4.9", - "@types/warning": "^3.0.0", - "dequal": "^2.0.3", - "dom-helpers": "^5.2.0", - "uncontrollable": "^8.0.1", - "warning": "^4.0.3" + "@react-spring/animated": "~9.7.5", + "@react-spring/shared": "~9.7.5", + "@react-spring/types": "~9.7.5" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/react-spring/donate" }, "peerDependencies": { - "react": ">=16.14.0", - "react-dom": ">=16.14.0" + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/@restart/ui/node_modules/uncontrollable": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/uncontrollable/-/uncontrollable-8.0.4.tgz", - "integrity": "sha512-ulRWYWHvscPFc0QQXvyJjY6LIXU56f0h8pQFvhxiKk5V1fcI8gp9Ht9leVAhrVjzqMw0BgjspBINx9r6oyJUvQ==", + "node_modules/@react-spring/rafz": { + "version": "9.7.5", + "resolved": "https://registry.npmjs.org/@react-spring/rafz/-/rafz-9.7.5.tgz", + "integrity": "sha512-5ZenDQMC48wjUzPAm1EtwQ5Ot3bLIAwwqP2w2owG5KoNdNHpEJV263nGhCeKKmuA3vG2zLLOdu3or6kuDjA6Aw==", + "license": "MIT" + }, + "node_modules/@react-spring/shared": { + "version": "9.7.5", + "resolved": "https://registry.npmjs.org/@react-spring/shared/-/shared-9.7.5.tgz", + "integrity": "sha512-wdtoJrhUeeyD/PP/zo+np2s1Z820Ohr/BbuVYv+3dVLW7WctoiN7std8rISoYoHpUXtbkpesSKuPIw/6U1w1Pw==", "license": "MIT", - "peerDependencies": { - "react": ">=16.14.0" - } - }, - "node_modules/@rollup/plugin-babel": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", - "integrity": "sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==", - "dev": true, "dependencies": { - "@babel/helper-module-imports": "^7.10.4", - "@rollup/pluginutils": "^3.1.0" - }, - "engines": { - "node": ">= 10.0.0" + "@react-spring/rafz": "~9.7.5", + "@react-spring/types": "~9.7.5" }, "peerDependencies": { - "@babel/core": "^7.0.0", - "@types/babel__core": "^7.1.9", - "rollup": "^1.20.0||^2.0.0" - }, - "peerDependenciesMeta": { - "@types/babel__core": { - "optional": true - } + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/@rollup/plugin-node-resolve": { - "version": "11.2.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz", - "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==", - "dev": true, + "node_modules/@react-spring/types": { + "version": "9.7.5", + "resolved": "https://registry.npmjs.org/@react-spring/types/-/types-9.7.5.tgz", + "integrity": "sha512-HVj7LrZ4ReHWBimBvu2SKND3cDVUPWKLqRTmWe/fNY6o1owGOX0cAHbdPDTMelgBlVbrTKrre6lFkhqGZErK/g==", + "license": "MIT" + }, + "node_modules/@react-spring/web": { + "version": "9.7.5", + "resolved": "https://registry.npmjs.org/@react-spring/web/-/web-9.7.5.tgz", + "integrity": "sha512-lmvqGwpe+CSttsWNZVr+Dg62adtKhauGwLyGE/RRyZ8AAMLgb9x3NDMA5RMElXo+IMyTkPp7nxTB8ZQlmhb6JQ==", + "license": "MIT", "dependencies": { - "@rollup/pluginutils": "^3.1.0", - "@types/resolve": "1.17.1", - "builtin-modules": "^3.1.0", - "deepmerge": "^4.2.2", - "is-module": "^1.0.0", - "resolve": "^1.19.0" - }, - "engines": { - "node": ">= 10.0.0" + "@react-spring/animated": "~9.7.5", + "@react-spring/core": "~9.7.5", + "@react-spring/shared": "~9.7.5", + "@react-spring/types": "~9.7.5" }, "peerDependencies": { - "rollup": "^1.20.0||^2.0.0" + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/@rollup/plugin-replace": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", - "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.27.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.27.3.tgz", + "integrity": "sha512-EzxVSkIvCFxUd4Mgm4xR9YXrcp976qVaHnqom/Tgm+vU79k4vV4eYTjmRvGfeoW8m9LVcsAy/lGjcgVegKEhLQ==", + "cpu": [ + "arm" + ], "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.27.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.27.3.tgz", + "integrity": "sha512-LJc5pDf1wjlt9o/Giaw9Ofl+k/vLUaYsE2zeQGH85giX2F+wn/Cg8b3c5CDP3qmVmeO5NzwVUzQQxwZvC2eQKw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.27.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.27.3.tgz", + "integrity": "sha512-OuRysZ1Mt7wpWJ+aYKblVbJWtVn3Cy52h8nLuNSzTqSesYw1EuN6wKp5NW/4eSre3mp12gqFRXOKTcN3AI3LqA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.27.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.27.3.tgz", + "integrity": "sha512-xW//zjJMlJs2sOrCmXdB4d0uiilZsOdlGQIC/jjmMWT47lkLLoB1nsNhPUcnoqyi5YR6I4h+FjBpILxbEy8JRg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.27.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.27.3.tgz", + "integrity": "sha512-58E0tIcwZ+12nK1WiLzHOD8I0d0kdrY/+o7yFVPRHuVGY3twBwzwDdTIBGRxLmyjciMYl1B/U515GJy+yn46qw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.27.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.27.3.tgz", + "integrity": "sha512-78fohrpcVwTLxg1ZzBMlwEimoAJmY6B+5TsyAZ3Vok7YabRBUvjYTsRXPTjGEvv/mfgVBepbW28OlMEz4w8wGA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.27.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.27.3.tgz", + "integrity": "sha512-h2Ay79YFXyQi+QZKo3ISZDyKaVD7uUvukEHTOft7kh00WF9mxAaxZsNs3o/eukbeKuH35jBvQqrT61fzKfAB/Q==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.27.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.27.3.tgz", + "integrity": "sha512-Sv2GWmrJfRY57urktVLQ0VKZjNZGogVtASAgosDZ1aUB+ykPxSi3X1nWORL5Jk0sTIIwQiPH7iE3BMi9zGWfkg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.27.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.27.3.tgz", + "integrity": "sha512-FPoJBLsPW2bDNWjSrwNuTPUt30VnfM8GPGRoLCYKZpPx0xiIEdFip3dH6CqgoT0RnoGXptaNziM0WlKgBc+OWQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.27.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.27.3.tgz", + "integrity": "sha512-TKxiOvBorYq4sUpA0JT+Fkh+l+G9DScnG5Dqx7wiiqVMiRSkzTclP35pE6eQQYjP4Gc8yEkJGea6rz4qyWhp3g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.27.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.27.3.tgz", + "integrity": "sha512-v2M/mPvVUKVOKITa0oCFksnQQ/TqGrT+yD0184/cWHIu0LoIuYHwox0Pm3ccXEz8cEQDLk6FPKd1CCm+PlsISw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.27.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.27.3.tgz", + "integrity": "sha512-LdrI4Yocb1a/tFVkzmOE5WyYRgEBOyEhWYJe4gsDWDiwnjYKjNs7PS6SGlTDB7maOHF4kxevsuNBl2iOcj3b4A==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.27.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.27.3.tgz", + "integrity": "sha512-d4wVu6SXij/jyiwPvI6C4KxdGzuZOvJ6y9VfrcleHTwo68fl8vZC5ZYHsCVPUi4tndCfMlFniWgwonQ5CUpQcA==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.27.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.27.3.tgz", + "integrity": "sha512-/6bn6pp1fsCGEY5n3yajmzZQAh+mW4QPItbiWxs69zskBzJuheb3tNynEjL+mKOsUSFK11X4LYF2BwwXnzWleA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.27.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.27.3.tgz", + "integrity": "sha512-nBXOfJds8OzUT1qUreT/en3eyOXd2EH5b0wr2bVB5999qHdGKkzGzIyKYaKj02lXk6wpN71ltLIaQpu58YFBoQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.27.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.27.3.tgz", + "integrity": "sha512-ogfbEVQgIZOz5WPWXF2HVb6En+kWzScuxJo/WdQTqEgeyGkaa2ui5sQav9Zkr7bnNCLK48uxmmK0TySm22eiuw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.27.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.27.3.tgz", + "integrity": "sha512-ecE36ZBMLINqiTtSNQ1vzWc5pXLQHlf/oqGp/bSbi7iedcjcNb6QbCBNG73Euyy2C+l/fn8qKWEwxr+0SSfs3w==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.27.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.27.3.tgz", + "integrity": "sha512-vliZLrDmYKyaUoMzEbMTg2JkerfBjn03KmAw9CykO0Zzkzoyd7o3iZNam/TpyWNjNT+Cz2iO3P9Smv2wgrR+Eg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@tanstack/match-sorter-utils": { + "version": "8.19.4", + "resolved": "https://registry.npmjs.org/@tanstack/match-sorter-utils/-/match-sorter-utils-8.19.4.tgz", + "integrity": "sha512-Wo1iKt2b9OT7d+YGhvEPD3DXvPv2etTusIMhMUoG7fbhmxcXCtIjJDEygy91Y2JFlwGyjqiBPRozme7UD8hoqg==", + "license": "MIT", "dependencies": { - "@rollup/pluginutils": "^3.1.0", - "magic-string": "^0.25.7" + "remove-accents": "0.5.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@tanstack/react-table": { + "version": "8.20.6", + "resolved": "https://registry.npmjs.org/@tanstack/react-table/-/react-table-8.20.6.tgz", + "integrity": "sha512-w0jluT718MrOKthRcr2xsjqzx+oEM7B7s/XXyfs19ll++hlId3fjTm+B2zrR3ijpANpkzBAr15j1XGVOMxpggQ==", + "license": "MIT", + "dependencies": { + "@tanstack/table-core": "8.20.5" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" }, "peerDependencies": { - "rollup": "^1.20.0 || ^2.0.0" + "react": ">=16.8", + "react-dom": ">=16.8" } }, - "node_modules/@rollup/pluginutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", - "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", - "dev": true, + "node_modules/@tanstack/react-virtual": { + "version": "3.11.2", + "resolved": "https://registry.npmjs.org/@tanstack/react-virtual/-/react-virtual-3.11.2.tgz", + "integrity": "sha512-OuFzMXPF4+xZgx8UzJha0AieuMihhhaWG0tCqpp6tDzlFwOmNBPYMuLOtMJ1Tr4pXLHmgjcWhG6RlknY2oNTdQ==", + "license": "MIT", "dependencies": { - "@types/estree": "0.0.39", - "estree-walker": "^1.0.1", - "picomatch": "^2.2.2" + "@tanstack/virtual-core": "3.11.2" }, - "engines": { - "node": ">= 8.0.0" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" }, "peerDependencies": { - "rollup": "^1.20.0||^2.0.0" + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, - "node_modules/@rollup/pluginutils/node_modules/@types/estree": { - "version": "0.0.39", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", - "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", - "dev": true - }, - "node_modules/@rushstack/eslint-patch": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.2.0.tgz", - "integrity": "sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg==" - }, - "node_modules/@sinclair/typebox": { - "version": "0.24.51", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", - "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==", - "dev": true - }, - "node_modules/@sinonjs/commons": { - "version": "1.8.6", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", - "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==", - "dev": true, - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@sinonjs/fake-timers": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", - "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", - "dev": true, - "dependencies": { - "@sinonjs/commons": "^1.7.0" - } - }, - "node_modules/@surma/rollup-plugin-off-main-thread": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz", - "integrity": "sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==", - "dev": true, - "dependencies": { - "ejs": "^3.1.6", - "json5": "^2.2.0", - "magic-string": "^0.25.0", - "string.prototype.matchall": "^4.0.6" - } - }, - "node_modules/@svgr/babel-plugin-add-jsx-attribute": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz", - "integrity": "sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg==", - "dev": true, + "node_modules/@tanstack/table-core": { + "version": "8.20.5", + "resolved": "https://registry.npmjs.org/@tanstack/table-core/-/table-core-8.20.5.tgz", + "integrity": "sha512-P9dF7XbibHph2PFRz8gfBKEXEY/HJPOhym8CHmjF8y3q5mWpKx9xtZapXQUWCgkqvsK0R46Azuz+VaxD4Xl+Tg==", + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=12" }, "funding": { "type": "github", - "url": "https://github.com/sponsors/gregberge" + "url": "https://github.com/sponsors/tannerlinsley" } }, - "node_modules/@svgr/babel-plugin-remove-jsx-attribute": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz", - "integrity": "sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg==", - "dev": true, - "engines": { - "node": ">=10" - }, + "node_modules/@tanstack/virtual-core": { + "version": "3.11.2", + "resolved": "https://registry.npmjs.org/@tanstack/virtual-core/-/virtual-core-3.11.2.tgz", + "integrity": "sha512-vTtpNt7mKCiZ1pwU9hfKPhpdVO2sVzFQsxoVBGtOSHxlrRRzYr8iQ2TlwbAcRYCcEiZ9ECAM8kBzH0v2+VzfKw==", + "license": "MIT", "funding": { "type": "github", - "url": "https://github.com/sponsors/gregberge" + "url": "https://github.com/sponsors/tannerlinsley" } }, - "node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz", - "integrity": "sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz", - "integrity": "sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-plugin-svg-dynamic-title": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz", - "integrity": "sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-plugin-svg-em-dimensions": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz", - "integrity": "sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-plugin-transform-react-native-svg": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz", - "integrity": "sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-plugin-transform-svg-component": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz", - "integrity": "sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-preset": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-5.5.0.tgz", - "integrity": "sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig==", - "dev": true, - "dependencies": { - "@svgr/babel-plugin-add-jsx-attribute": "^5.4.0", - "@svgr/babel-plugin-remove-jsx-attribute": "^5.4.0", - "@svgr/babel-plugin-remove-jsx-empty-expression": "^5.0.1", - "@svgr/babel-plugin-replace-jsx-attribute-value": "^5.0.1", - "@svgr/babel-plugin-svg-dynamic-title": "^5.4.0", - "@svgr/babel-plugin-svg-em-dimensions": "^5.4.0", - "@svgr/babel-plugin-transform-react-native-svg": "^5.4.0", - "@svgr/babel-plugin-transform-svg-component": "^5.5.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/core": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/core/-/core-5.5.0.tgz", - "integrity": "sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ==", - "dev": true, - "dependencies": { - "@svgr/plugin-jsx": "^5.5.0", - "camelcase": "^6.2.0", - "cosmiconfig": "^7.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/hast-util-to-babel-ast": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz", - "integrity": "sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ==", - "dev": true, - "dependencies": { - "@babel/types": "^7.12.6" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/plugin-jsx": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz", - "integrity": "sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA==", - "dev": true, - "dependencies": { - "@babel/core": "^7.12.3", - "@svgr/babel-preset": "^5.5.0", - "@svgr/hast-util-to-babel-ast": "^5.5.0", - "svg-parser": "^2.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/plugin-svgo": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz", - "integrity": "sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ==", - "dev": true, - "dependencies": { - "cosmiconfig": "^7.0.0", - "deepmerge": "^4.2.2", - "svgo": "^1.2.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/plugin-svgo/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/@svgr/plugin-svgo/node_modules/css-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", - "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", - "dev": true, - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^3.2.1", - "domutils": "^1.7.0", - "nth-check": "^1.0.2" - } - }, - "node_modules/@svgr/plugin-svgo/node_modules/css-tree": { - "version": "1.0.0-alpha.37", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", - "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", - "dev": true, - "dependencies": { - "mdn-data": "2.0.4", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@svgr/plugin-svgo/node_modules/css-what": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", - "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", - "dev": true, - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/@svgr/plugin-svgo/node_modules/dom-serializer": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", - "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", - "dev": true, - "dependencies": { - "domelementtype": "^2.0.1", - "entities": "^2.0.0" - } - }, - "node_modules/@svgr/plugin-svgo/node_modules/domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", - "dev": true, - "dependencies": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "node_modules/@svgr/plugin-svgo/node_modules/domutils/node_modules/domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", - "dev": true - }, - "node_modules/@svgr/plugin-svgo/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/@svgr/plugin-svgo/node_modules/mdn-data": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", - "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==", - "dev": true - }, - "node_modules/@svgr/plugin-svgo/node_modules/nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", - "dev": true, - "dependencies": { - "boolbase": "~1.0.0" - } - }, - "node_modules/@svgr/plugin-svgo/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@svgr/plugin-svgo/node_modules/svgo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", - "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", - "deprecated": "This SVGO version is no longer supported. Upgrade to v2.x.x.", - "dev": true, - "dependencies": { - "chalk": "^2.4.1", - "coa": "^2.0.2", - "css-select": "^2.0.0", - "css-select-base-adapter": "^0.1.1", - "css-tree": "1.0.0-alpha.37", - "csso": "^4.0.2", - "js-yaml": "^3.13.1", - "mkdirp": "~0.5.1", - "object.values": "^1.1.0", - "sax": "~1.2.4", - "stable": "^0.1.8", - "unquote": "~1.1.1", - "util.promisify": "~1.0.0" - }, - "bin": { - "svgo": "bin/svgo" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/@svgr/webpack": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-5.5.0.tgz", - "integrity": "sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g==", - "dev": true, - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/plugin-transform-react-constant-elements": "^7.12.1", - "@babel/preset-env": "^7.12.1", - "@babel/preset-react": "^7.12.5", - "@svgr/core": "^5.5.0", - "@svgr/plugin-jsx": "^5.5.0", - "@svgr/plugin-svgo": "^5.5.0", - "loader-utils": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@swc/helpers": { - "version": "0.5.11", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.11.tgz", - "integrity": "sha512-YNlnKRWF2sVojTpIyzwou9XoTNbzbzONwRhOoniEioF1AtaitTvVZblaQRrAzChWQ1bLYyYSWzM18y4WwgzJ+A==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@trysound/sax": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", - "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/@tweenjs/tween.js": { - "version": "18.6.4", - "resolved": "https://registry.npmjs.org/@tweenjs/tween.js/-/tween.js-18.6.4.tgz", - "integrity": "sha512-lB9lMjuqjtuJrx7/kOkqQBtllspPIN+96OvTCeJ2j5FEzinoAXTdAMFnDAQT1KVPRlnYfBrqxtqP66vDM40xxQ==" - }, "node_modules/@types/babel__core": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.0.tgz", - "integrity": "sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==", + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/parser": "^7.20.7", "@babel/types": "^7.20.7", @@ -4167,419 +1989,226 @@ } }, "node_modules/@types/babel__generator": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", - "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.0.0" } }, "node_modules/@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", "dev": true, + "license": "MIT", "dependencies": { "@babel/parser": "^7.1.0", "@babel/types": "^7.0.0" } }, "node_modules/@types/babel__traverse": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.3.tgz", - "integrity": "sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w==", + "version": "7.20.6", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", + "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.3.0" + "@babel/types": "^7.20.7" } }, - "node_modules/@types/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", - "dev": true, - "dependencies": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "node_modules/@types/bonjour": { - "version": "3.5.10", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", - "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/connect-history-api-fallback": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz", - "integrity": "sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==", - "dev": true, - "dependencies": { - "@types/express-serve-static-core": "*", - "@types/node": "*" - } - }, - "node_modules/@types/d3-array": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.0.4.tgz", - "integrity": "sha512-nwvEkG9vYOc0Ic7G7kwgviY4AQlTfYGIZ0fqB7CQHXGyYM6nO7kJh5EguSNA3jfh4rq7Sb7eMVq8isuvg2/miQ==" + "node_modules/@types/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==", + "license": "MIT" }, "node_modules/@types/d3-color": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.0.tgz", - "integrity": "sha512-HKuicPHJuvPgCD+np6Se9MQvS6OCbJmOjGvylzMJRlDwUXjKTTXs6Pwgk79O09Vj/ho3u1ofXnhFOaEWWPrlwA==" + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz", + "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==", + "license": "MIT" }, - "node_modules/@types/d3-ease": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.0.tgz", - "integrity": "sha512-aMo4eaAOijJjA6uU+GIeW018dvy9+oH5Y2VPPzjjfxevvGQ/oRDs+tfYC9b50Q4BygRR8yE2QCLsrT0WtAVseA==" + "node_modules/@types/d3-delaunay": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-delaunay/-/d3-delaunay-6.0.4.tgz", + "integrity": "sha512-ZMaSKu4THYCU6sV64Lhg6qjf1orxBthaC161plr5KuPHo3CNm8DTHiLw/5Eq2b6TsNP0W0iJrUOFscY6Q450Hw==", + "license": "MIT" + }, + "node_modules/@types/d3-drag": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@types/d3-drag/-/d3-drag-3.0.7.tgz", + "integrity": "sha512-HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ==", + "license": "MIT", + "dependencies": { + "@types/d3-selection": "*" + } + }, + "node_modules/@types/d3-hierarchy": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/@types/d3-hierarchy/-/d3-hierarchy-3.1.7.tgz", + "integrity": "sha512-tJFtNoYBtRtkNysX1Xq4sxtjK8YgoWUNpIiUee0/jHGRwqvzYxkq0hGVbbOGSz+JgFxxRu4K8nb3YpG3CMARtg==", + "dev": true, + "license": "MIT" }, "node_modules/@types/d3-interpolate": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.1.tgz", - "integrity": "sha512-jx5leotSeac3jr0RePOH1KdR9rISG91QIE4Q2PYTu4OymLTZfA3SrnURSLzKH48HmXVUru50b8nje4E79oQSQw==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz", + "integrity": "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==", + "license": "MIT", "dependencies": { "@types/d3-color": "*" } }, "node_modules/@types/d3-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.0.0.tgz", - "integrity": "sha512-0g/A+mZXgFkQxN3HniRDbXMN79K3CdTpLsevj+PXiTcb2hVyvkZUBg37StmgCQkaD84cUJ4uaDAWq7UJOQy2Tg==" + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.1.0.tgz", + "integrity": "sha512-P2dlU/q51fkOc/Gfl3Ul9kicV7l+ra934qBFXCFhrZMOL6du1TM0pm1ThYvENukyOn5h9v+yMJ9Fn5JK4QozrQ==", + "license": "MIT" }, "node_modules/@types/d3-scale": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.3.tgz", - "integrity": "sha512-PATBiMCpvHJSMtZAMEhc2WyL+hnzarKzI6wAHYjhsonjWJYGq5BXTzQjv4l8m2jO183/4wZ90rKvSeT7o72xNQ==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.8.tgz", + "integrity": "sha512-gkK1VVTr5iNiYJ7vWDI+yUFFlszhNMtVeneJ6lUTKPjprsvLLI9/tgEGiXJOnlINJA8FyA88gfnQsHbybVZrYQ==", + "license": "MIT", "dependencies": { "@types/d3-time": "*" } }, + "node_modules/@types/d3-selection": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/@types/d3-selection/-/d3-selection-3.0.11.tgz", + "integrity": "sha512-bhAXu23DJWsrI45xafYpkQ4NtcKMwWnAC/vKrd2l+nxMFuvOT3XMYTIj2opv8vq8AO5Yh7Qac/nSeP/3zjTK0w==", + "license": "MIT" + }, "node_modules/@types/d3-shape": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.1.tgz", - "integrity": "sha512-6Uh86YFF7LGg4PQkuO2oG6EMBRLuW9cbavUW46zkIO5kuS2PfTqo2o9SkgtQzguBHbLgNnU90UNsITpsX1My+A==", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.6.tgz", + "integrity": "sha512-5KKk5aKGu2I+O6SONMYSNflgiP0WfZIQvVUMan50wHsLG1G94JlxEVnCpQARfTtzytuY0p/9PXXZb3I7giofIA==", + "license": "MIT", "dependencies": { "@types/d3-path": "*" } }, "node_modules/@types/d3-time": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.0.tgz", - "integrity": "sha512-sZLCdHvBUcNby1cB6Fd3ZBrABbjz3v1Vm90nysCQ6Vt7vd6e/h9Lt7SiJUoEX0l4Dzc7P5llKyhqSi1ycSf1Hg==" + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.4.tgz", + "integrity": "sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==", + "license": "MIT" }, - "node_modules/@types/d3-timer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.0.tgz", - "integrity": "sha512-HNB/9GHqu7Fo8AQiugyJbv6ZxYz58wef0esl4Mv828w1ZKpAshw/uFWVDUcIB9KKFeFKoxS3cHY07FFgtTRZ1g==" - }, - "node_modules/@types/eslint": { - "version": "8.21.0", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.21.0.tgz", - "integrity": "sha512-35EhHNOXgxnUgh4XCJsGhE7zdlDhYDN/aMG6UbkByCFFNgQ7b3U+uVoqBpicFydR8JEfgdjCF7SJ7MiJfzuiTA==", - "dev": true, + "node_modules/@types/d3-transition": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@types/d3-transition/-/d3-transition-3.0.9.tgz", + "integrity": "sha512-uZS5shfxzO3rGlu0cC3bjmMFKsXv+SmZZcgp0KD22ts4uGXp5EVYGzu/0YdwZeKmddhcAccYtREJKkPfXkZuCg==", + "license": "MIT", "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" + "@types/d3-selection": "*" } }, - "node_modules/@types/eslint-scope": { - "version": "3.7.4", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", - "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", - "dev": true, + "node_modules/@types/d3-zoom": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@types/d3-zoom/-/d3-zoom-3.0.8.tgz", + "integrity": "sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw==", + "license": "MIT", "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" + "@types/d3-interpolate": "*", + "@types/d3-selection": "*" } }, "node_modules/@types/estree": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", - "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==", - "dev": true - }, - "node_modules/@types/express": { - "version": "4.17.16", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.16.tgz", - "integrity": "sha512-LkKpqRZ7zqXJuvoELakaFYuETHjZkSol8EV6cNnyishutDBCCdv6+dsKPbKkCcIk57qRphOLY5sEgClw1bO3gA==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", "dev": true, + "license": "MIT" + }, + "node_modules/@types/hoist-non-react-statics": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.6.tgz", + "integrity": "sha512-lPByRJUer/iN/xa4qpyL0qmL11DqNW81iU/IG1S3uvRUq4oKagz8VCxZjiWkumgt66YT3vOdDgZ0o32sGKtCEw==", + "license": "MIT", "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.31", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "node_modules/@types/express-serve-static-core": { - "version": "4.17.33", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.33.tgz", - "integrity": "sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA==", - "dev": true, - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*" - } - }, - "node_modules/@types/graceful-fs": { - "version": "4.1.6", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz", - "integrity": "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", - "dev": true - }, - "node_modules/@types/http-proxy": { - "version": "1.17.9", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.9.tgz", - "integrity": "sha512-QsbSjA/fSk7xB+UXlCT3wHBy5ai9wOcNDWwZAtud+jXhwOM3l+EYZh8Lng4+/6n8uar0J7xILzqftJdJ/Wdfkw==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", - "dev": true - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "*" - } - }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-report": "*" + "@types/react": "*", + "hoist-non-react-statics": "^3.3.0" } }, "node_modules/@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==" - }, - "node_modules/@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==" - }, - "node_modules/@types/mime": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", - "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==", - "dev": true - }, - "node_modules/@types/node": { - "version": "18.11.18", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz", - "integrity": "sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==", - "dev": true - }, - "node_modules/@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" - }, - "node_modules/@types/prettier": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.2.tgz", - "integrity": "sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==", - "dev": true - }, - "node_modules/@types/prop-types": { - "version": "15.7.12", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", - "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==", + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, "license": "MIT" }, - "node_modules/@types/q": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.5.tgz", - "integrity": "sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ==", - "dev": true + "node_modules/@types/parse-json": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", + "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", + "license": "MIT" }, - "node_modules/@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", - "dev": true - }, - "node_modules/@types/range-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", - "dev": true + "node_modules/@types/prop-types": { + "version": "15.7.13", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.13.tgz", + "integrity": "sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==", + "license": "MIT" }, "node_modules/@types/react": { - "version": "18.0.27", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.27.tgz", - "integrity": "sha512-3vtRKHgVxu3Jp9t718R9BuzoD4NcQ8YJ5XRzsSKxNDiDonD2MXIT1TmSkenxuCycZJoQT5d2vE8LwWJxBC1gmA==", + "version": "18.3.12", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.12.tgz", + "integrity": "sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw==", + "license": "MIT", "dependencies": { "@types/prop-types": "*", - "@types/scheduler": "*", "csstype": "^3.0.2" } }, - "node_modules/@types/react-transition-group": { - "version": "4.4.10", - "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.10.tgz", - "integrity": "sha512-hT/+s0VQs2ojCX823m60m5f0sL5idt9SO6Tj6Dg+rdphGPIeJbJ6CxvBYkgkGKrYeDjvIpKTR38UzmtHJOGW3Q==", + "node_modules/@types/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-qW1Mfv8taImTthu4KoXgDfLuk4bydU6Q/TkADnDWWHwi4NX4BR+LWfTp2sVmTqRrsHvyDDTelgelxJ+SsejKKQ==", + "dev": true, "license": "MIT", "dependencies": { "@types/react": "*" } }, - "node_modules/@types/resolve": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", - "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", - "dev": true, + "node_modules/@types/react-transition-group": { + "version": "4.4.11", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.11.tgz", + "integrity": "sha512-RM05tAniPZ5DZPzzNFP+DmrcOdD0efDUxMy3145oljWSl3x9ZV5vhme98gTxFrj2lhXvmGNnUiuDyJgY9IKkNA==", + "license": "MIT", "dependencies": { - "@types/node": "*" + "@types/react": "*" } }, - "node_modules/@types/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", - "dev": true - }, - "node_modules/@types/scheduler": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", - "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" - }, - "node_modules/@types/semver": { - "version": "7.3.13", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", - "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==" - }, - "node_modules/@types/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", - "dev": true, - "dependencies": { - "@types/express": "*" - } - }, - "node_modules/@types/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==", - "dev": true, - "dependencies": { - "@types/mime": "*", - "@types/node": "*" - } - }, - "node_modules/@types/sockjs": { - "version": "0.3.33", - "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", - "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/stack-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", - "dev": true - }, - "node_modules/@types/trusted-types": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.2.tgz", - "integrity": "sha512-F5DIZ36YVLE+PN+Zwws4kJogq47hNgX3Nx6WyDJ3kcplxyke3XIzB8uK5n/Lpm1HBsbGzd6nmGehL8cPekP+Tg==", - "dev": true - }, - "node_modules/@types/warning": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/warning/-/warning-3.0.3.tgz", - "integrity": "sha512-D1XC7WK8K+zZEveUPY+cf4+kgauk8N4eHr/XIHXGlGYkHLud6hK9lYfZk1ry1TNh798cZUCgb6MqGEG8DkJt6Q==", - "license": "MIT" - }, - "node_modules/@types/ws": { - "version": "8.5.4", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.4.tgz", - "integrity": "sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/yargs": { - "version": "16.0.5", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", - "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", - "dev": true - }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.50.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.50.0.tgz", - "integrity": "sha512-vwksQWSFZiUhgq3Kv7o1Jcj0DUNylwnIlGvKvLLYsq8pAWha6/WCnXUeaSoNNha/K7QSf2+jvmkxggC1u3pIwQ==", + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.15.0.tgz", + "integrity": "sha512-+zkm9AR1Ds9uLWN3fkoeXgFppaQ+uEVtfOV62dDmsy9QCNqlRHWNEck4yarvRNrvRcHQLGfqBNui3cimoz8XAg==", + "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "5.50.0", - "@typescript-eslint/type-utils": "5.50.0", - "@typescript-eslint/utils": "5.50.0", - "debug": "^4.3.4", - "grapheme-splitter": "^1.0.4", - "ignore": "^5.2.0", - "natural-compare-lite": "^1.4.0", - "regexpp": "^3.2.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.15.0", + "@typescript-eslint/type-utils": "8.15.0", + "@typescript-eslint/utils": "8.15.0", + "@typescript-eslint/visitor-keys": "8.15.0", + "graphemer": "^1.4.0", + "ignore": "^5.3.1", + "natural-compare": "^1.4.0", + "ts-api-utils": "^1.3.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", + "eslint": "^8.57.0 || ^9.0.0" }, "peerDependenciesMeta": { "typescript": { @@ -4587,73 +2216,28 @@ } } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/@typescript-eslint/experimental-utils": { - "version": "5.50.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.50.0.tgz", - "integrity": "sha512-gZIhzNRivy0RVqcxjKnQ+ipGc0qolilhBeNmvH+Dvu7Vymug+IfiYxTj2zM7mIlHsw6Q5aH7L7WmuTE3tZyzag==", - "dependencies": { - "@typescript-eslint/utils": "5.50.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, "node_modules/@typescript-eslint/parser": { - "version": "5.50.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.50.0.tgz", - "integrity": "sha512-KCcSyNaogUDftK2G9RXfQyOCt51uB5yqC6pkUYqhYh8Kgt+DwR5M0EwEAxGPy/+DH6hnmKeGsNhiZRQxjH71uQ==", + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.15.0.tgz", + "integrity": "sha512-7n59qFpghG4uazrF9qtGKBZXn7Oz4sOMm8dwNWDQY96Xlm2oX67eipqcblDj+oY1lLCbf1oltMZFpUso66Kl1A==", + "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/scope-manager": "5.50.0", - "@typescript-eslint/types": "5.50.0", - "@typescript-eslint/typescript-estree": "5.50.0", + "@typescript-eslint/scope-manager": "8.15.0", + "@typescript-eslint/types": "8.15.0", + "@typescript-eslint/typescript-estree": "8.15.0", + "@typescript-eslint/visitor-keys": "8.15.0", "debug": "^4.3.4" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "eslint": "^8.57.0 || ^9.0.0" }, "peerDependenciesMeta": { "typescript": { @@ -4662,15 +2246,17 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "5.50.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.50.0.tgz", - "integrity": "sha512-rt03kaX+iZrhssaT974BCmoUikYtZI24Vp/kwTSy841XhiYShlqoshRFDvN1FKKvU2S3gK+kcBW1EA7kNUrogg==", + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.15.0.tgz", + "integrity": "sha512-QRGy8ADi4J7ii95xz4UoiymmmMd/zuy9azCaamnZ3FM8T5fZcex8UfJcjkiEZjJSztKfEBe3dZ5T/5RHAmw2mA==", + "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "5.50.0", - "@typescript-eslint/visitor-keys": "5.50.0" + "@typescript-eslint/types": "8.15.0", + "@typescript-eslint/visitor-keys": "8.15.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", @@ -4678,24 +2264,26 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "5.50.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.50.0.tgz", - "integrity": "sha512-dcnXfZ6OGrNCO7E5UY/i0ktHb7Yx1fV6fnQGGrlnfDhilcs6n19eIRcvLBqx6OQkrPaFlDPk3OJ0WlzQfrV0bQ==", + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.15.0.tgz", + "integrity": "sha512-UU6uwXDoI3JGSXmcdnP5d8Fffa2KayOhUUqr/AiBnG1Gl7+7ut/oyagVeSkh7bxQ0zSXV9ptRh/4N15nkCqnpw==", + "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "5.50.0", - "@typescript-eslint/utils": "5.50.0", + "@typescript-eslint/typescript-estree": "8.15.0", + "@typescript-eslint/utils": "8.15.0", "debug": "^4.3.4", - "tsutils": "^3.21.0" + "ts-api-utils": "^1.3.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "*" + "eslint": "^8.57.0 || ^9.0.0" }, "peerDependenciesMeta": { "typescript": { @@ -4704,11 +2292,13 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "5.50.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.50.0.tgz", - "integrity": "sha512-atruOuJpir4OtyNdKahiHZobPKFvZnBnfDiyEaBf6d9vy9visE7gDjlmhl+y29uxZ2ZDgvXijcungGFjGGex7w==", + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.15.0.tgz", + "integrity": "sha512-n3Gt8Y/KyJNe0S3yDCD2RVKrHBC4gTUcLTebVBXacPy091E6tNspFLKRXlk3hwT4G55nfr1n2AdFqi/XMxzmPQ==", + "dev": true, + "license": "MIT", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", @@ -4716,20 +2306,23 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.50.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.50.0.tgz", - "integrity": "sha512-Gq4zapso+OtIZlv8YNAStFtT6d05zyVCK7Fx3h5inlLBx2hWuc/0465C2mg/EQDDU2LKe52+/jN4f0g9bd+kow==", + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.15.0.tgz", + "integrity": "sha512-1eMp2JgNec/niZsR7ioFBlsh/Fk0oJbhaqO0jRyQBMgkz7RrFfkqF9lYYmBoGBaSiLnu8TAPQTwoTUiSTUW9dg==", + "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/types": "5.50.0", - "@typescript-eslint/visitor-keys": "5.50.0", + "@typescript-eslint/types": "8.15.0", + "@typescript-eslint/visitor-keys": "8.15.0", "debug": "^4.3.4", - "globby": "^11.1.0", + "fast-glob": "^3.3.2", "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", @@ -4741,24 +2334,38 @@ } } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", "dependencies": { - "yallist": "^4.0.0" + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=10" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dependencies": { - "lru-cache": "^6.0.0" - }, + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -4766,327 +2373,145 @@ "node": ">=10" } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, "node_modules/@typescript-eslint/utils": { - "version": "5.50.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.50.0.tgz", - "integrity": "sha512-v/AnUFImmh8G4PH0NDkf6wA8hujNNcrwtecqW4vtQ1UOSNBaZl49zP1SHoZ/06e+UiwzHpgb5zP5+hwlYYWYAw==", + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.15.0.tgz", + "integrity": "sha512-k82RI9yGhr0QM3Dnq+egEpz9qB6Un+WLYhmoNcvl8ltMEededhh7otBVVIDDsEEttauwdY/hQoSsOv13lxrFzQ==", + "dev": true, + "license": "MIT", "dependencies": { - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.50.0", - "@typescript-eslint/types": "5.50.0", - "@typescript-eslint/typescript-estree": "5.50.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0", - "semver": "^7.3.7" + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "8.15.0", + "@typescript-eslint/types": "8.15.0", + "@typescript-eslint/typescript-estree": "8.15.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "eslint": "^8.57.0 || ^9.0.0" }, - "engines": { - "node": ">=8.0.0" + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@typescript-eslint/utils/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.50.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.50.0.tgz", - "integrity": "sha512-cdMeD9HGu6EXIeGOh2yVW6oGf9wq8asBgZx7nsR/D36gTfQ0odE5kcRYe5M81vjEFAcPeugXrHg78Imu55F6gg==", + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.15.0.tgz", + "integrity": "sha512-h8vYOulWec9LhpwfAdZf2bjr8xIp0KNKnpgqSz0qqYYKAW/QZKw3ktRndbiAtUz4acH4QLQavwZBYCc0wulA/Q==", + "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "5.50.0", - "eslint-visitor-keys": "^3.3.0" + "@typescript-eslint/types": "8.15.0", + "eslint-visitor-keys": "^4.2.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@ungap/custom-elements": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@ungap/custom-elements/-/custom-elements-1.1.1.tgz", - "integrity": "sha512-IQ8tbO+A1EdUCphlOtwF3TnpYL17bpXmwh+J6KFnuAzGPgjoL/twp6nkmTm80XREtgvfeO4s6/+z0AXQMrjcdw==" - }, - "node_modules/@webassemblyjs/ast": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", - "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", + "node_modules/@vitejs/plugin-react": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.3.3.tgz", + "integrity": "sha512-NooDe9GpHGqNns1i8XDERg0Vsg5SSYRhRxxyTGogUdkdNt47jal+fbuYi+Yfq6pzRCKXyoPcWisfxE6RIM3GKA==", "dev": true, + "license": "MIT", "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1" - } - }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", - "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", - "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", - "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", - "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", - "dev": true, - "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", - "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", - "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1" - } - }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", - "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", - "dev": true, - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", - "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", - "dev": true, - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", - "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", - "dev": true - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", - "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/helper-wasm-section": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-opt": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "@webassemblyjs/wast-printer": "1.11.1" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", - "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", - "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1" - } - }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", - "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", - "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true - }, - "node_modules/3d-force-graph": { - "version": "1.70.20", - "resolved": "https://registry.npmjs.org/3d-force-graph/-/3d-force-graph-1.70.20.tgz", - "integrity": "sha512-yu0b2+FEsBOsxJ8z0bGkFGHj0MlA+83MPZo9z0oGWgzPgnWpuwbYOHkNAX0x89cSOq9GQwDwEIjt7H2cUbclCQ==", - "dependencies": { - "accessor-fn": "1", - "kapsule": "^1.13", - "three": ">=0.118 <1", - "three-forcegraph": "^1.41", - "three-render-objects": "^1.27" - } - }, - "node_modules/3d-force-graph-ar": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/3d-force-graph-ar/-/3d-force-graph-ar-1.7.5.tgz", - "integrity": "sha512-4aZafpHHAqn04tbb54Qsi3weBnZJhpnZNfO3RWTNAG29O5VamXxWOGpEHzTtKFi8Svr9D8Ath0UeFAMsiXqL0Q==", - "dependencies": { - "aframe-forcegraph-component": "^3.0", - "kapsule": "^1.13" - } - }, - "node_modules/3d-force-graph-vr": { - "version": "2.0.16", - "resolved": "https://registry.npmjs.org/3d-force-graph-vr/-/3d-force-graph-vr-2.0.16.tgz", - "integrity": "sha512-AHrQbiC907F9+kLKwVFsrTYuUgPAROl4XU+oNFVBst7HeutkfaRMg4ME7QDaM3KzLP7Me3jx3D+S7eO6C5CuqQ==", - "dependencies": { - "accessor-fn": "1", - "aframe": "^1.3", - "aframe-extras": "^6.1", - "aframe-forcegraph-component": "^3.0", - "kapsule": "^1.13", - "polished": "^4.2.2" - } - }, - "node_modules/abab": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", - "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", - "dev": true - }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dev": true, - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" + "@babel/core": "^7.25.2", + "@babel/plugin-transform-react-jsx-self": "^7.24.7", + "@babel/plugin-transform-react-jsx-source": "^7.24.7", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.14.2" }, "engines": { - "node": ">= 0.6" + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0" } }, - "node_modules/accessor-fn": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/accessor-fn/-/accessor-fn-1.3.2.tgz", - "integrity": "sha512-W4/Lj/gry8AHy+IC7Havr7fNbphHDzVAiZd5h10g8LRRz6ZKla3A1/lkFqoV1jh13R0eJLGWjDBlRGK36fcWiw==" + "node_modules/@xyflow/react": { + "version": "12.3.5", + "resolved": "https://registry.npmjs.org/@xyflow/react/-/react-12.3.5.tgz", + "integrity": "sha512-wAYqpicdrVo1rxCu0X3M9s3YIF45Agqfabw0IBryTGqjWvr2NyfciI8gIP4MB+NKpWWN5kxZ9tiZ9u8lwC7iAg==", + "license": "MIT", + "dependencies": { + "@xyflow/system": "0.0.46", + "classcat": "^5.0.3", + "zustand": "^4.4.0" + }, + "peerDependencies": { + "react": ">=17", + "react-dom": ">=17" + } + }, + "node_modules/@xyflow/react/node_modules/use-sync-external-store": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.2.tgz", + "integrity": "sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@xyflow/react/node_modules/zustand": { + "version": "4.5.5", + "resolved": "https://registry.npmjs.org/zustand/-/zustand-4.5.5.tgz", + "integrity": "sha512-+0PALYNJNgK6hldkgDq2vLrw5f6g/jCInz52n9RTpropGgeAf/ioFUCdtsjCqu4gNhW9D01rUQBROoRjdzyn2Q==", + "license": "MIT", + "dependencies": { + "use-sync-external-store": "1.2.2" + }, + "engines": { + "node": ">=12.7.0" + }, + "peerDependencies": { + "@types/react": ">=16.8", + "immer": ">=9.0.6", + "react": ">=16.8" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "immer": { + "optional": true + }, + "react": { + "optional": true + } + } + }, + "node_modules/@xyflow/system": { + "version": "0.0.46", + "resolved": "https://registry.npmjs.org/@xyflow/system/-/system-0.0.46.tgz", + "integrity": "sha512-bmFXvboVdiydIFZmDCjrbBCYgB0d5pYdkcZPWbAxGmhMRUZ+kW3CksYgYxWabrw51rwpWitLEadvLrivG0mVfA==", + "license": "MIT", + "dependencies": { + "@types/d3-drag": "^3.0.7", + "@types/d3-selection": "^3.0.10", + "@types/d3-transition": "^3.0.8", + "@types/d3-zoom": "^3.0.8", + "d3-drag": "^3.0.0", + "d3-selection": "^3.0.0", + "d3-zoom": "^3.0.0" + } }, "node_modules/acorn": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", - "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", + "dev": true, + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -5094,164 +2519,22 @@ "node": ">=0.4.0" } }, - "node_modules/acorn-globals": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", - "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", - "dev": true, - "dependencies": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" - } - }, - "node_modules/acorn-globals/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-import-assertions": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", - "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", - "dev": true, - "peerDependencies": { - "acorn": "^8" - } - }, "node_modules/acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/acorn-node": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", - "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", - "dev": true, - "dependencies": { - "acorn": "^7.0.0", - "acorn-walk": "^7.0.0", - "xtend": "^4.0.2" - } - }, - "node_modules/acorn-node/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/address": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/address/-/address-1.2.2.tgz", - "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/adjust-sourcemap-loader": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", - "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", - "dev": true, - "dependencies": { - "loader-utils": "^2.0.0", - "regex-parser": "^2.2.11" - }, - "engines": { - "node": ">=8.9" - } - }, - "node_modules/aframe": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/aframe/-/aframe-1.4.1.tgz", - "integrity": "sha512-lMgjxEJkXCHf4aXI8O3Xoz4xcQwQjz2jZv61RUDhj+neMqBiTGuDW6mUV3S2aer7YXL/fykp1jadaM+nEPd8qA==", - "dependencies": { - "@ungap/custom-elements": "^1.1.0", - "buffer": "^6.0.3", - "custom-event-polyfill": "^1.0.6", - "debug": "github:ngokevin/debug#noTimestamp", - "deep-assign": "^2.0.0", - "load-bmfont": "^1.2.3", - "object-assign": "^4.0.1", - "present": "0.0.6", - "promise-polyfill": "^3.1.0", - "super-animejs": "^3.1.0", - "super-three": "^0.147.1", - "three-bmfont-text": "github:dmarcos/three-bmfont-text#21d017046216e318362c48abd1a48bddfb6e0733", - "webvr-polyfill": "^0.10.12" - }, - "engines": { - "node": ">= 4.6.0", - "npm": ">= 2.15.9" - } - }, - "node_modules/aframe-extras": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/aframe-extras/-/aframe-extras-6.1.1.tgz", - "integrity": "sha512-w3o3sKfQG+cwe1ZoKUxvMLehh0D/MlvFZeg2XuyIto+Nrs/kGLPcb/fsI5DXM4jociZ3wVQfqcA1BVF+0Nq45A==", - "dependencies": { - "three-pathfinding": "^0.7.0" - }, - "peerDependencies": { - "aframe": "*" - } - }, - "node_modules/aframe-forcegraph-component": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/aframe-forcegraph-component/-/aframe-forcegraph-component-3.0.6.tgz", - "integrity": "sha512-z1qhyahdWEazfaI8XBU4q7LyADAYvYjCoRbD2bQ5nm4h1YQvw2zz4vwl06E9MSXsgkD8cN3rlOMhFHXNe+abyQ==", - "dependencies": { - "accessor-fn": "1", - "three-forcegraph": "^1.39" - } - }, - "node_modules/aframe/node_modules/debug": { - "version": "2.2.0", - "resolved": "git+ssh://git@github.com/ngokevin/debug.git#ef5f8e66d49ce8bc64c6f282c15f8b7164409e3a", - "license": "MIT" - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, "node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -5263,366 +2546,12 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "dev": true, - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/ajv-formats/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/an-array": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/an-array/-/an-array-1.0.0.tgz", - "integrity": "sha512-M175GYI7RmsYu24Ok383yZQa3eveDfNnmhTe3OQ3bm70bEovz2gWenH+ST/n32M8lrwLWk74hcPds5CDRPe2wg==" - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-html-community": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", - "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", - "dev": true, - "engines": [ - "node >= 0.8.0" - ], - "bin": { - "ansi-html": "bin/ansi-html" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" - } - }, "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/arg": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", - "dev": true - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "node_modules/aria-query": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", - "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", - "dependencies": { - "deep-equal": "^2.0.5" - } - }, - "node_modules/array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", - "dev": true - }, - "node_modules/array-includes": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", - "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-shuffle": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-shuffle/-/array-shuffle-1.0.1.tgz", - "integrity": "sha512-PBqgo1Y2XWSksBzq3GFPEb798ZrW2snAcmr4drbVeF/6MT/5aBlkGJEvu5A/CzXHf4EjbHOj/ZowatjlIiVidA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/array.prototype.flat": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", - "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flatmap": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", - "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.reduce": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.5.tgz", - "integrity": "sha512-kDdugMl7id9COE8R7MHF5jWk7Dqt/fs4Pv+JXoICnYwqpjjjbUurz6w5fT5IG6brLdJhv6/VoHB0H7oyIBXd+Q==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-array-method-boxes-properly": "^1.0.0", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.tosorted": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz", - "integrity": "sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.1.3" - } - }, - "node_modules/as-number": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/as-number/-/as-number-1.0.0.tgz", - "integrity": "sha512-HkI/zLo2AbSRO4fqVkmyf3hms0bJDs3iboHqTrNuwTiCRvdYXM7HFhfhB6Dk51anV2LM/IMB83mtK9mHw4FlAg==" - }, - "node_modules/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "dev": true - }, - "node_modules/ast-types-flow": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", - "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==" - }, - "node_modules/async": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", - "dev": true - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true - }, - "node_modules/at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/autoprefixer": { - "version": "10.4.13", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.13.tgz", - "integrity": "sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" - } - ], - "dependencies": { - "browserslist": "^4.21.4", - "caniuse-lite": "^1.0.30001426", - "fraction.js": "^4.2.0", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", - "postcss-value-parser": "^4.2.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/axe-core": { - "version": "4.6.3", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.6.3.tgz", - "integrity": "sha512-/BQzOX780JhsxDnPpH4ZiyrJAzcd8AfzFPkv+89veFSr1rcMjuq2JDCwypKaPeB6ljHp9KjXhPpjgCvQlWYuqg==", - "engines": { - "node": ">=4" - } - }, - "node_modules/axobject-query": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.1.1.tgz", - "integrity": "sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg==", - "dependencies": { - "deep-equal": "^2.0.5" - } - }, - "node_modules/babel-jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz", - "integrity": "sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==", - "dev": true, - "dependencies": { - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^27.5.1", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.8.0" - } - }, - "node_modules/babel-jest/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -5633,133 +2562,18 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/babel-jest/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/babel-jest/node_modules/color-convert": { + "node_modules/argparse": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/babel-jest/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/babel-jest/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-jest/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-loader": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz", - "integrity": "sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==", - "dev": true, - "dependencies": { - "find-cache-dir": "^3.3.1", - "loader-utils": "^2.0.0", - "make-dir": "^3.1.0", - "schema-utils": "^2.6.5" - }, - "engines": { - "node": ">= 8.9" - }, - "peerDependencies": { - "@babel/core": "^7.0.0", - "webpack": ">=2" - } - }, - "node_modules/babel-loader/node_modules/schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 8.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-jest-hoist": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz", - "integrity": "sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==", - "dev": true, - "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.0.0", - "@types/babel__traverse": "^7.0.6" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } + "license": "Python-2.0" }, "node_modules/babel-plugin-macros": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", + "license": "MIT", "dependencies": { "@babel/runtime": "^7.12.5", "cosmiconfig": "^7.0.0", @@ -5770,346 +2584,42 @@ "npm": ">=6" } }, - "node_modules/babel-plugin-named-asset-import": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.8.tgz", - "integrity": "sha512-WXiAc++qo7XcJ1ZnTYGtLxmBCVbddAml3CEXgWaBzNzLNoxtQ8AiGEFDMOhot9XjTCQbvP5E77Fj9Gk924f00Q==", - "dev": true, - "peerDependencies": { - "@babel/core": "^7.1.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", - "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", - "dependencies": { - "@babel/compat-data": "^7.17.7", - "@babel/helper-define-polyfill-provider": "^0.3.3", - "semver": "^6.1.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", - "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.3", - "core-js-compat": "^3.25.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", - "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-styled-components": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/babel-plugin-styled-components/-/babel-plugin-styled-components-2.0.7.tgz", - "integrity": "sha512-i7YhvPgVqRKfoQ66toiZ06jPNA3p6ierpfUuEWxNF+fV27Uv5gxBkf8KZLHUCc1nFA9j6+80pYoIpqCeyW3/bA==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.0", - "@babel/helper-module-imports": "^7.16.0", - "babel-plugin-syntax-jsx": "^6.18.0", - "lodash": "^4.17.11", - "picomatch": "^2.3.0" - }, - "peerDependencies": { - "styled-components": ">= 2" - } - }, - "node_modules/babel-plugin-syntax-jsx": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz", - "integrity": "sha512-qrPaCSo9c8RHNRHIotaufGbuOBN8rtdC4QrrFFc43vyWCCz7Kl7GL1PGaXtMGQZUXrkCjNEgxDfmAuAabr/rlw==" - }, - "node_modules/babel-plugin-transform-react-remove-prop-types": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz", - "integrity": "sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==" - }, - "node_modules/babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", - "dev": true, - "dependencies": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/babel-preset-jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz", - "integrity": "sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==", - "dev": true, - "dependencies": { - "babel-plugin-jest-hoist": "^27.5.1", - "babel-preset-current-node-syntax": "^1.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/babel-preset-react-app": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-react-app/-/babel-preset-react-app-10.0.1.tgz", - "integrity": "sha512-b0D9IZ1WhhCWkrTXyFuIIgqGzSkRIH5D5AmB0bXbzYAB1OBAwHcUeyWW2LorutLWF5btNo/N7r/cIdmvvKJlYg==", - "dependencies": { - "@babel/core": "^7.16.0", - "@babel/plugin-proposal-class-properties": "^7.16.0", - "@babel/plugin-proposal-decorators": "^7.16.4", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.0", - "@babel/plugin-proposal-numeric-separator": "^7.16.0", - "@babel/plugin-proposal-optional-chaining": "^7.16.0", - "@babel/plugin-proposal-private-methods": "^7.16.0", - "@babel/plugin-transform-flow-strip-types": "^7.16.0", - "@babel/plugin-transform-react-display-name": "^7.16.0", - "@babel/plugin-transform-runtime": "^7.16.4", - "@babel/preset-env": "^7.16.4", - "@babel/preset-react": "^7.16.0", - "@babel/preset-typescript": "^7.16.0", - "@babel/runtime": "^7.16.3", - "babel-plugin-macros": "^3.1.0", - "babel-plugin-transform-react-remove-prop-types": "^0.4.24" - } - }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", - "dev": true - }, - "node_modules/batch-processor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/batch-processor/-/batch-processor-1.0.0.tgz", - "integrity": "sha512-xoLQD8gmmR32MeuBHgH0Tzd5PuSZx71ZsbhVxOCRbgktZEPe4SQy7s9Z50uPp0F/f7iw2XmkHN2xkgbMfckMDA==" - }, - "node_modules/bezier-js": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/bezier-js/-/bezier-js-6.1.0.tgz", - "integrity": "sha512-oc8fkHqG0R+dQuNiXVbPMB0cc8iDqkLAjbA2gq26QmV8tZqW9GGI7iNEX1ioRWlZperQS7v5BX03+9FLVWZbSw==", - "funding": { - "type": "individual", - "url": "https://github.com/Pomax/bezierjs/blob/master/FUNDING.md" - } - }, - "node_modules/bfj": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/bfj/-/bfj-7.0.2.tgz", - "integrity": "sha512-+e/UqUzwmzJamNF50tBV6tZPTORow7gQ96iFow+8b562OdMpEK0BcJEq2OSPEDmAbSMBQ7PKZ87ubFkgxpYWgw==", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true, - "dependencies": { - "bluebird": "^3.5.5", - "check-types": "^11.1.1", - "hoopy": "^0.1.4", - "tryer": "^1.0.1" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true - }, - "node_modules/body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", - "dev": true, - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/body-parser/node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/body-parser/node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/bonjour-service": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.1.0.tgz", - "integrity": "sha512-LVRinRB3k1/K0XzZ2p58COnWvkQknIY6sf0zF2rpErvcJXpMBttEPQSxK+HEXSS9VmpZlDoDnQWv8ftJT20B0Q==", - "dev": true, - "dependencies": { - "array-flatten": "^2.1.2", - "dns-equal": "^1.0.0", - "fast-deep-equal": "^3.1.3", - "multicast-dns": "^7.2.5" - } - }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" - }, - "node_modules/bootstrap": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.2.3.tgz", - "integrity": "sha512-cEKPM+fwb3cT8NzQZYEu4HilJ3anCrWqh3CHAok1p9jXqMPsPTBhU25fBckEJHJ/p+tTxTFTsFQGM+gaHpi3QQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/twbs" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/bootstrap" - } - ], - "peerDependencies": { - "@popperjs/core": "^2.11.6" - } + "license": "MIT" }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" } }, - "node_modules/browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", - "dev": true - }, "node_modules/browserslist": { - "version": "4.21.5", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", - "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", + "version": "4.24.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.2.tgz", + "integrity": "sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==", + "dev": true, "funding": [ { "type": "opencollective", @@ -6118,13 +2628,18 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001449", - "electron-to-chromium": "^1.4.284", - "node-releases": "^2.0.8", - "update-browserslist-db": "^1.0.10" + "caniuse-lite": "^1.0.30001669", + "electron-to-chromium": "^1.5.41", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.1" }, "bin": { "browserslist": "cli.js" @@ -6133,153 +2648,20 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "node_modules/bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, - "dependencies": { - "node-int64": "^0.4.0" - } - }, - "node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "node_modules/buffer-equal": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz", - "integrity": "sha512-RgSV6InVQ9ODPdLWJ5UAqBqJBOg370Nz6ZQtRzpt6nUjc8v0St97uJ4PYC6NztqIScrAXafKM3mZPMygSe1ggA==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "node_modules/buffer-to-arraybuffer": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz", - "integrity": "sha512-3dthu5CYiVB1DEJp61FtApNnNndTckcqe4pFcLdvHtrpG+kcyekCJKg4MRiDcFW7A6AODnXB9U4dwQiCW5kzJQ==" - }, - "node_modules/builtin-modules": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", - "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "license": "MIT", "engines": { "node": ">=6" } }, - "node_modules/camel-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", - "dev": true, - "dependencies": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" - } - }, - "node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/camelcase-css": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", - "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/camelize": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.1.tgz", - "integrity": "sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", - "dev": true, - "dependencies": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" - } - }, "node_modules/caniuse-lite": { - "version": "1.0.30001651", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001651.tgz", - "integrity": "sha512-9Cf+Xv1jJNe1xPZLGuUXLNkE1BoDkqRqYyFJ9TDYSqhduqA4hu4oR9HluGoWYQC/aj8WHjsGVV+bwkh0+tegRg==", + "version": "1.0.30001680", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001680.tgz", + "integrity": "sha512-rPQy70G6AGUMnbwS1z6Xg+RkHYPAi18ihs47GH0jcxIG7wArmPgY3XbS2sRdBbxJljp3thdT8BIqv9ccCypiPA==", + "dev": true, "funding": [ { "type": "opencollective", @@ -6296,174 +2678,28 @@ ], "license": "CC-BY-4.0" }, - "node_modules/canvas-color-tracker": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/canvas-color-tracker/-/canvas-color-tracker-1.1.6.tgz", - "integrity": "sha512-LpKiona7TwN0rpLgGcdvAw/HVV9HGCSSyOoSJkLyUP+VZmTX2uAnunGVoKrEHQ/7i+lyu6HfazdHV93vLrjK5Q==", - "dependencies": { - "tinycolor2": "^1.4.2" - } - }, - "node_modules/cardboard-vr-display": { - "version": "1.0.19", - "resolved": "https://registry.npmjs.org/cardboard-vr-display/-/cardboard-vr-display-1.0.19.tgz", - "integrity": "sha512-+MjcnWKAkb95p68elqZLDPzoiF/dGncQilLGvPBM5ZorABp/ao3lCs7nnRcYBckmuNkg1V/5rdGDKoUaCVsHzQ==", - "dependencies": { - "gl-preserve-state": "^1.0.0", - "nosleep.js": "^0.7.0", - "webvr-polyfill-dpdb": "^1.0.17" - } - }, - "node_modules/case-sensitive-paths-webpack-plugin": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz", - "integrity": "sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/chalk/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, "engines": { "node": ">=10" - } - }, - "node_modules/check-types": { - "version": "11.2.2", - "resolved": "https://registry.npmjs.org/check-types/-/check-types-11.2.2.tgz", - "integrity": "sha512-HBiYvXvn9Z70Z88XKjz3AEKd4HJhBXsa3j7xFnITAzoS8+q6eIGi8qDB8FKPBAjtuxjI/zFpwuiCb8oDtKOYrA==", - "dev": true - }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/chokidar/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "dev": true, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/ci-info": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.7.1.tgz", - "integrity": "sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "engines": { - "node": ">=8" - } - }, - "node_modules/cjs-module-lexer": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", - "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", - "dev": true - }, - "node_modules/classnames": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.2.tgz", - "integrity": "sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==" - }, - "node_modules/clean-css": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.2.tgz", - "integrity": "sha512-JVJbM+f3d3Q704rF4bqQ5UUyTtuJ0JRKNbTKVEeujCCBoMdkEi+V+e8oktO9qGQNSvHrFTM6JZRXrUvGR1czww==", - "dev": true, - "dependencies": { - "source-map": "~0.6.0" - }, - "engines": { - "node": ">= 10.0" - } - }, - "node_modules/clean-css/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } + "node_modules/classcat": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/classcat/-/classcat-5.0.5.tgz", + "integrity": "sha512-JhZUT7JFcQy/EzW605k/ktHtncoo9vnyW/2GspNYwFlN1C/WmjuV/xtS04e9SOkL2sTdw0VAZ2UGCcQ9lR6p6w==", + "license": "MIT" }, "node_modules/clsx": { "version": "2.1.1", @@ -6474,258 +2710,54 @@ "node": ">=6" } }, - "node_modules/co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", - "dev": true, - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" - } - }, - "node_modules/coa": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", - "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { - "@types/q": "^1.5.1", - "chalk": "^2.4.1", - "q": "^1.1.2" + "color-name": "~1.1.4" }, "engines": { - "node": ">= 4.0" - } - }, - "node_modules/collect-v8-coverage": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", - "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", - "dev": true - }, - "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" + "node": ">=7.0.0" } }, "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/colord": { - "version": "2.9.3", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", - "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", - "dev": true - }, - "node_modules/colorette": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", - "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", - "dev": true - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true, - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "dev": true, - "engines": { - "node": ">= 12" - } - }, - "node_modules/common-path-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", - "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", - "dev": true - }, - "node_modules/common-tags": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", - "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", - "dev": true, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", - "dev": true - }, - "node_modules/compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "dev": true, - "dependencies": { - "mime-db": ">= 1.43.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", - "dev": true, - "dependencies": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/compression/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/compression/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/compression/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true + "license": "MIT" }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "node_modules/confusing-browser-globals": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", - "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==" - }, - "node_modules/connect-history-api-fallback": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", - "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dev": true, - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "dev": true, - "engines": { - "node": ">= 0.6" - } + "license": "MIT" }, "node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" }, "node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", - "dev": true, + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.0.2.tgz", + "integrity": "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==", + "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">=18" } }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", - "dev": true - }, - "node_modules/core-js": { - "version": "3.27.2", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.27.2.tgz", - "integrity": "sha512-9ashVQskuh5AZEZ1JdQWp1GqSoC1e1G87MzRqg2gIfVAQ7Qn9K+uFj8EcniUFA4P2NLZfV+TOlX1SzoKfo+s7w==", - "dev": true, - "hasInstallScript": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-js-compat": { - "version": "3.27.2", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.27.2.tgz", - "integrity": "sha512-welaYuF7ZtbYKGrIy7y3eb40d37rG1FvzEOfe7hSLd2iD6duMDqUhRfSvCGyC46HhR6Y8JXXdZ2lnRUMkPBpvg==", - "dependencies": { - "browserslist": "^4.21.4" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-js-pure": { - "version": "3.27.2", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.27.2.tgz", - "integrity": "sha512-Cf2jqAbXgWH3VVzjyaaFkY1EBazxugUepGymDoeteyYr9ByX51kD2jdHZlsEF/xnJMyN3Prua7mQuzwMg6Zc9A==", - "dev": true, - "hasInstallScript": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, "node_modules/cosmiconfig": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "license": "MIT", "dependencies": { "@types/parse-json": "^4.0.0", "import-fresh": "^3.2.1", @@ -6738,9 +2770,11 @@ } }, "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -6750,465 +2784,17 @@ "node": ">= 8" } }, - "node_modules/crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/css-blank-pseudo": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-3.0.3.tgz", - "integrity": "sha512-VS90XWtsHGqoM0t4KpH053c4ehxZ2E6HtGI7x68YFV0pTo/QmkV/YFA+NnlvK8guxZVNWGQhVNJGC39Q8XF4OQ==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.9" - }, - "bin": { - "css-blank-pseudo": "dist/cli.cjs" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/css-color-keywords": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz", - "integrity": "sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==", - "engines": { - "node": ">=4" - } - }, - "node_modules/css-declaration-sorter": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.3.1.tgz", - "integrity": "sha512-fBffmak0bPAnyqc/HO8C3n2sHrp9wcqQz6ES9koRF2/mLOVAx9zIQ3Y7R29sYCteTPqMCwns4WYQoCX91Xl3+w==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.0.9" - } - }, - "node_modules/css-has-pseudo": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-3.0.4.tgz", - "integrity": "sha512-Vse0xpR1K9MNlp2j5w1pgWIJtm1a8qS0JwS9goFYcImjlHEmywP9VUF05aGBXzGpDJF86QXk4L0ypBmwPhGArw==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.9" - }, - "bin": { - "css-has-pseudo": "dist/cli.cjs" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/css-loader": { - "version": "6.7.3", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.7.3.tgz", - "integrity": "sha512-qhOH1KlBMnZP8FzRO6YCH9UHXQhVMcEGLyNdb7Hv2cpcmJbW0YrddO+tG1ab5nT41KpHIYGsbeHqxB9xPu1pKQ==", - "dev": true, - "dependencies": { - "icss-utils": "^5.1.0", - "postcss": "^8.4.19", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.0", - "postcss-modules-scope": "^3.0.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.2.0", - "semver": "^7.3.8" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/css-loader/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/css-loader/node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/css-loader/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/css-minimizer-webpack-plugin": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.4.1.tgz", - "integrity": "sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q==", - "dev": true, - "dependencies": { - "cssnano": "^5.0.6", - "jest-worker": "^27.0.2", - "postcss": "^8.3.5", - "schema-utils": "^4.0.0", - "serialize-javascript": "^6.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "@parcel/css": { - "optional": true - }, - "clean-css": { - "optional": true - }, - "csso": { - "optional": true - }, - "esbuild": { - "optional": true - } - } - }, - "node_modules/css-minimizer-webpack-plugin/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/css-minimizer-webpack-plugin/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/css-minimizer-webpack-plugin/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/css-minimizer-webpack-plugin/node_modules/schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/css-minimizer-webpack-plugin/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/css-prefers-color-scheme": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-6.0.3.tgz", - "integrity": "sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==", - "dev": true, - "bin": { - "css-prefers-color-scheme": "dist/cli.cjs" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", - "dev": true, - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css-select-base-adapter": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", - "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==", - "dev": true - }, - "node_modules/css-to-react-native": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.1.0.tgz", - "integrity": "sha512-AryfkFA29b4I3vG7N4kxFboq15DxwSXzhXM37XNEjwJMgjYIc8BcqfiprpAqX0zadI5PMByEIwAMzXxk5Vcc4g==", - "dependencies": { - "camelize": "^1.0.0", - "css-color-keywords": "^1.0.0", - "postcss-value-parser": "^4.0.2" - } - }, - "node_modules/css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/cssdb": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-7.4.1.tgz", - "integrity": "sha512-0Q8NOMpXJ3iTDDbUv9grcmQAfdDx4qz+fN/+Md2FGbevT+6+bJNQ2LjB2YIUlLbpBTM32idU1Sb+tb/uGt6/XQ==", - "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true, - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cssnano": { - "version": "5.1.14", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.14.tgz", - "integrity": "sha512-Oou7ihiTocbKqi0J1bB+TRJIQX5RMR3JghA8hcWSw9mjBLQ5Y3RWqEDoYG3sRNlAbCIXpqMoZGbq5KDR3vdzgw==", - "dev": true, - "dependencies": { - "cssnano-preset-default": "^5.2.13", - "lilconfig": "^2.0.3", - "yaml": "^1.10.2" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/cssnano" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/cssnano-preset-default": { - "version": "5.2.13", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.13.tgz", - "integrity": "sha512-PX7sQ4Pb+UtOWuz8A1d+Rbi+WimBIxJTRyBdgGp1J75VU0r/HFQeLnMYgHiCAp6AR4rqrc7Y4R+1Rjk3KJz6DQ==", - "dev": true, - "dependencies": { - "css-declaration-sorter": "^6.3.1", - "cssnano-utils": "^3.1.0", - "postcss-calc": "^8.2.3", - "postcss-colormin": "^5.3.0", - "postcss-convert-values": "^5.1.3", - "postcss-discard-comments": "^5.1.2", - "postcss-discard-duplicates": "^5.1.0", - "postcss-discard-empty": "^5.1.1", - "postcss-discard-overridden": "^5.1.0", - "postcss-merge-longhand": "^5.1.7", - "postcss-merge-rules": "^5.1.3", - "postcss-minify-font-values": "^5.1.0", - "postcss-minify-gradients": "^5.1.1", - "postcss-minify-params": "^5.1.4", - "postcss-minify-selectors": "^5.2.1", - "postcss-normalize-charset": "^5.1.0", - "postcss-normalize-display-values": "^5.1.0", - "postcss-normalize-positions": "^5.1.1", - "postcss-normalize-repeat-style": "^5.1.1", - "postcss-normalize-string": "^5.1.0", - "postcss-normalize-timing-functions": "^5.1.0", - "postcss-normalize-unicode": "^5.1.1", - "postcss-normalize-url": "^5.1.0", - "postcss-normalize-whitespace": "^5.1.1", - "postcss-ordered-values": "^5.1.3", - "postcss-reduce-initial": "^5.1.1", - "postcss-reduce-transforms": "^5.1.0", - "postcss-svgo": "^5.1.0", - "postcss-unique-selectors": "^5.1.1" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/cssnano-utils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", - "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/csso": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", - "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", - "dev": true, - "dependencies": { - "css-tree": "^1.1.2" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/csso/node_modules/css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "dev": true, - "dependencies": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/csso/node_modules/mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", - "dev": true - }, - "node_modules/csso/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cssom": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", - "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", - "dev": true - }, - "node_modules/cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", - "dev": true, - "dependencies": { - "cssom": "~0.3.6" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cssstyle/node_modules/cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true - }, "node_modules/csstype": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", "license": "MIT" }, - "node_modules/custom-event-polyfill": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/custom-event-polyfill/-/custom-event-polyfill-1.0.7.tgz", - "integrity": "sha512-TDDkd5DkaZxZFM8p+1I3yAlvM3rSr1wbrOliG4yJiwinMZN8z/iGL7BTlDkrJcYTmgUSb4ywVCc3ZaUtOtC76w==" - }, "node_modules/d3-array": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.2.tgz", - "integrity": "sha512-yEEyEAbDrF8C6Ob2myOBLjwBLck1Z89jMGFee0oPsn95GqjerpaOA4ch+vc2l0FNFFwMD5N7OCSEN5eAlsUbgQ==", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "license": "ISC", "dependencies": { "internmap": "1 - 2" }, @@ -7216,15 +2802,23 @@ "node": ">=12" } }, - "node_modules/d3-binarytree": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/d3-binarytree/-/d3-binarytree-0.2.2.tgz", - "integrity": "sha512-TmgSEKWO4lSjX26Rk77hbTdiF3TQ1v5LqL+cmSz6/5RiSxmq6+e6qHE6X/KwrsIESekhEReH63X5yM8dvXaT7A==" - }, "node_modules/d3-color": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-delaunay": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.4.tgz", + "integrity": "sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==", + "license": "ISC", + "dependencies": { + "delaunator": "5" + }, "engines": { "node": ">=12" } @@ -7233,6 +2827,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==", + "license": "ISC", "engines": { "node": ">=12" } @@ -7241,6 +2836,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", + "license": "ISC", "dependencies": { "d3-dispatch": "1 - 3", "d3-selection": "3" @@ -7253,21 +2849,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-force-3d": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/d3-force-3d/-/d3-force-3d-3.0.3.tgz", - "integrity": "sha512-8HGTbw6y35UYManGCPU4+b9/PGgnyjzRq80DRsp7zFsRl0leVz2pzwx18dwkPe4rDxTOEpM4BuWQ2krbVaGQQA==", - "dependencies": { - "d3-binarytree": "^0.2.0", - "d3-dispatch": "1 - 3", - "d3-octree": "^0.2.0", - "d3-quadtree": "1 - 3", - "d3-timer": "1 - 3" - }, + "license": "BSD-3-Clause", "engines": { "node": ">=12" } @@ -7276,6 +2858,16 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-hierarchy": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz", + "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==", + "license": "ISC", "engines": { "node": ">=12" } @@ -7284,6 +2876,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", + "license": "ISC", "dependencies": { "d3-color": "1 - 3" }, @@ -7291,23 +2884,11 @@ "node": ">=12" } }, - "node_modules/d3-octree": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/d3-octree/-/d3-octree-0.2.2.tgz", - "integrity": "sha512-ysk9uSPAhZVb0Gq4GXzghl/Yqxu80dHrq55I53qaIMdGB65+0UfO84sr4Fci2JHumcgh6H4WE0r8LwxPagkE+g==" - }, "node_modules/d3-path": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-quadtree": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz", - "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==", + "license": "ISC", "engines": { "node": ">=12" } @@ -7316,6 +2897,7 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", + "license": "ISC", "dependencies": { "d3-array": "2.10.0 - 3", "d3-format": "1 - 3", @@ -7327,22 +2909,11 @@ "node": ">=12" } }, - "node_modules/d3-scale-chromatic": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz", - "integrity": "sha512-Lx9thtxAKrO2Pq6OO2Ua474opeziKr279P/TKZsMAhYyNDD3EnCffdbgeSYN5O7m2ByQsxtuP2CSDczNUIZ22g==", - "dependencies": { - "d3-color": "1 - 3", - "d3-interpolate": "1 - 3" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/d3-selection": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", + "license": "ISC", "engines": { "node": ">=12" } @@ -7351,6 +2922,7 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", + "license": "ISC", "dependencies": { "d3-path": "^3.1.0" }, @@ -7362,6 +2934,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", + "license": "ISC", "dependencies": { "d3-array": "2 - 3" }, @@ -7373,6 +2946,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", + "license": "ISC", "dependencies": { "d3-time": "1 - 3" }, @@ -7384,6 +2958,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", + "license": "ISC", "engines": { "node": ">=12" } @@ -7392,6 +2967,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", + "license": "ISC", "dependencies": { "d3-color": "1 - 3", "d3-dispatch": "1 - 3", @@ -7410,6 +2986,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz", "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==", + "license": "ISC", "dependencies": { "d3-dispatch": "1 - 3", "d3-drag": "2 - 3", @@ -7421,53 +2998,23 @@ "node": ">=12" } }, - "node_modules/dagre": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/dagre/-/dagre-0.8.5.tgz", - "integrity": "sha512-/aTqmnRta7x7MCCpExk7HQL2O4owCT2h8NT//9I1OQ9vt29Pa0BzSAkR5lwFUcQ7491yVi/3CXU9jQ5o0Mn2Sw==", - "dependencies": { - "graphlib": "^2.1.8", - "lodash": "^4.17.15" + "node_modules/date-fns": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz", + "integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/kossnocorp" } }, - "node_modules/damerau-levenshtein": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", - "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==" - }, - "node_modules/data-joint": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/data-joint/-/data-joint-1.2.6.tgz", - "integrity": "sha512-xuKyhQcD7vlO451VwKoK0RS8owh+iAZoQM2Up0ooTxrpLXh6XMUNPQW9vEOqv1+BT3c185FCLyWjUcCsEXC0/Q==", - "dependencies": { - "index-array-by": "^1.3.3" - } - }, - "node_modules/data-urls": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", - "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", - "dev": true, - "dependencies": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/debounce": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", - "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==" - }, "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -7478,677 +3025,111 @@ } } }, - "node_modules/decimal.js": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", - "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==", - "dev": true - }, - "node_modules/decimal.js-light": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/decimal.js-light/-/decimal.js-light-2.5.1.tgz", - "integrity": "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==" - }, - "node_modules/decode-uri-component": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", - "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", - "dependencies": { - "mimic-response": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", - "dev": true - }, - "node_modules/deep-assign": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/deep-assign/-/deep-assign-2.0.0.tgz", - "integrity": "sha512-2QhG3Kxulu4XIF3WL5C5x0sc/S17JLgm1SfvDfIRsR/5m7ZGmcejII7fZ2RyWhN0UWIJm0TNM/eKow6LAn3evQ==", - "dependencies": { - "is-obj": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/deep-equal": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.0.tgz", - "integrity": "sha512-RdpzE0Hv4lhowpIUKKMJfeH6C1pXdtT1/it80ubgWqwI3qpuxUBpC1S4hnHg+zjnuOoDkzUtUCEEkG+XG5l3Mw==", - "dependencies": { - "call-bind": "^1.0.2", - "es-get-iterator": "^1.1.2", - "get-intrinsic": "^1.1.3", - "is-arguments": "^1.1.1", - "is-array-buffer": "^3.0.1", - "is-date-object": "^1.0.5", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "isarray": "^2.0.5", - "object-is": "^1.1.5", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", - "side-channel": "^1.0.4", - "which-boxed-primitive": "^1.0.2", - "which-collection": "^1.0.1", - "which-typed-array": "^1.1.9" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" }, "node_modules/deepmerge": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.0.tgz", - "integrity": "sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-2.2.1.tgz", + "integrity": "sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA==", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/default-gateway": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", - "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", - "dev": true, + "node_modules/delaunator": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.1.tgz", + "integrity": "sha512-8nvh+XBe96aCESrGOqMp/84b13H9cdKbG5P2ejQCh4d4sK9RL4371qou9drQjMhvnPmhWl5hnmqbEE0fXr9Xnw==", + "license": "ISC", "dependencies": { - "execa": "^5.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "dependencies": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/defined": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz", - "integrity": "sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/dequal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "dev": true, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", - "dev": true - }, - "node_modules/detect-port-alt": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", - "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", - "dev": true, - "dependencies": { - "address": "^1.0.1", - "debug": "^2.6.0" - }, - "bin": { - "detect": "bin/detect-port", - "detect-port": "bin/detect-port" - }, - "engines": { - "node": ">= 4.2.1" - } - }, - "node_modules/detect-port-alt/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/detect-port-alt/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/detective": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz", - "integrity": "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==", - "dev": true, - "dependencies": { - "acorn-node": "^1.8.2", - "defined": "^1.0.0", - "minimist": "^1.2.6" - }, - "bin": { - "detective": "bin/detective.js" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/didyoumean": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", - "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", - "dev": true - }, - "node_modules/diff-sequences": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", - "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", - "dev": true, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dlv": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", - "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", - "dev": true - }, - "node_modules/dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==", - "dev": true - }, - "node_modules/dns-packet": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.4.0.tgz", - "integrity": "sha512-EgqGeaBB8hLiHLZtp/IbaDQTL8pZ0+IvwzSHA6d7VyMDM+B9hgddEMa9xjK5oYnw0ci0JQ6g2XCD7/f6cafU6g==", - "dev": true, - "dependencies": { - "@leichtgewicht/ip-codec": "^2.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/dom-converter": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", - "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", - "dev": true, - "dependencies": { - "utila": "~0.4" + "robust-predicates": "^3.0.2" } }, "node_modules/dom-helpers": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "license": "MIT", "dependencies": { "@babel/runtime": "^7.8.7", "csstype": "^3.0.2" } }, - "node_modules/dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "dev": true, - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/dom-walk": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", - "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==" - }, - "node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ] - }, - "node_modules/domexception": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", - "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", - "dev": true, - "dependencies": { - "webidl-conversions": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/domexception/node_modules/webidl-conversions": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", - "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "dev": true, - "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "dev": true, - "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", - "dev": true, - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/dotenv": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", - "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/dotenv-expand": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", - "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", - "dev": true - }, - "node_modules/dtype": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dtype/-/dtype-2.0.0.tgz", - "integrity": "sha512-s2YVcLKdFGS0hpFqJaTwscsyt0E8nNFdmo73Ocd81xNPj4URI4rj6D60A+vFMIw7BXWlb4yRkEwfBqcZzPGiZg==", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", - "dev": true - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "dev": true - }, - "node_modules/ejs": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.8.tgz", - "integrity": "sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==", - "dev": true, - "dependencies": { - "jake": "^10.8.5" - }, - "bin": { - "ejs": "bin/cli.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/electron-to-chromium": { - "version": "1.4.284", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", - "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==" - }, - "node_modules/element-resize-detector": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/element-resize-detector/-/element-resize-detector-1.2.4.tgz", - "integrity": "sha512-Fl5Ftk6WwXE0wqCgNoseKWndjzZlDCwuPTcoVZfCP9R3EHQF8qUtr3YUPNETegRBOKqQKPW3n4kiIWngGi8tKg==", - "dependencies": { - "batch-processor": "1.0.0" - } - }, - "node_modules/emittery": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", - "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", + "version": "1.5.63", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.63.tgz", + "integrity": "sha512-ddeXKuY9BHo/mw145axlyWjlJ1UBt4WK3AlvkT7W2AbqfRQoacVoRUCF6wL3uIx/8wT9oLKXzI+rFqHHscByaA==", "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } - }, - "node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" - }, - "node_modules/emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/enhanced-resolve": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz", - "integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "dev": true, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } + "license": "ISC" }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "license": "MIT", "dependencies": { "is-arrayish": "^0.2.1" } }, - "node_modules/error-stack-parser": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", - "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", + "node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", "dev": true, - "dependencies": { - "stackframe": "^1.3.4" - } - }, - "node_modules/es-abstract": { - "version": "1.21.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.1.tgz", - "integrity": "sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg==", - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-set-tostringtag": "^2.0.1", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.3", - "get-symbol-description": "^1.0.0", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.4", - "is-array-buffer": "^3.0.1", - "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.10", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.2", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", - "safe-regex-test": "^1.0.0", - "string.prototype.trimend": "^1.0.6", - "string.prototype.trimstart": "^1.0.6", - "typed-array-length": "^1.0.4", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.9" + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" }, "engines": { - "node": ">= 0.4" + "node": ">=12" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-array-method-boxes-properly": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", - "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", - "dev": true - }, - "node_modules/es-get-iterator": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", - "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "has-symbols": "^1.0.3", - "is-arguments": "^1.1.1", - "is-map": "^2.0.2", - "is-set": "^2.0.2", - "is-string": "^1.0.7", - "isarray": "^2.0.5", - "stop-iteration-iterator": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-module-lexer": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", - "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", - "dev": true - }, - "node_modules/es-set-tostringtag": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", - "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", - "dependencies": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-shim-unscopables": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", - "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", - "dependencies": { - "has": "^1.0.3" - } - }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" } }, "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "dev": true - }, "node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "license": "MIT", "engines": { "node": ">=10" }, @@ -8156,692 +3137,143 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/escodegen": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", - "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", - "dev": true, - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=6.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "node_modules/escodegen/node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", - "dev": true, - "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/escodegen/node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", - "dev": true, - "dependencies": { - "prelude-ls": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, "node_modules/eslint": { - "version": "8.33.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.33.0.tgz", - "integrity": "sha512-WjOpFQgKK8VrCnAtl8We0SUOy/oVZ5NHykyMiagV1M9r8IFpIJX7DduK6n1mpfhlG7T1NLWm2SuD8QB7KFySaA==", + "version": "9.15.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.15.0.tgz", + "integrity": "sha512-7CrWySmIibCgT1Os28lUU6upBshZ+GxybLOrmRzi08kS8MBuO8QA7pXEgYgY5W8vK3e74xv0lpjo9DbaGU9Rkw==", + "dev": true, + "license": "MIT", "dependencies": { - "@eslint/eslintrc": "^1.4.1", - "@humanwhocodes/config-array": "^0.11.8", + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.19.0", + "@eslint/core": "^0.9.0", + "@eslint/eslintrc": "^3.2.0", + "@eslint/js": "9.15.0", + "@eslint/plugin-kit": "^0.2.3", + "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.10.0", + "@humanwhocodes/retry": "^0.4.1", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", + "ajv": "^6.12.4", "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", + "cross-spawn": "^7.0.5", "debug": "^4.3.2", - "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.4.0", - "esquery": "^1.4.0", + "eslint-scope": "^8.2.0", + "eslint-visitor-keys": "^4.2.0", + "espree": "^10.3.0", + "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", + "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "grapheme-splitter": "^1.0.4", "ignore": "^5.2.0", - "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-sdsl": "^4.1.4", - "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "regexpp": "^3.2.0", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0" + "optionator": "^0.9.3" }, "bin": { "eslint": "bin/eslint.js" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-config-react-app": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-7.0.1.tgz", - "integrity": "sha512-K6rNzvkIeHaTd8m/QEh1Zko0KI7BACWkkneSs6s9cKZC/J27X3eZR6Upt1jkmZ/4FK+XUOPPxMEN7+lbUXfSlA==", - "dependencies": { - "@babel/core": "^7.16.0", - "@babel/eslint-parser": "^7.16.3", - "@rushstack/eslint-patch": "^1.1.0", - "@typescript-eslint/eslint-plugin": "^5.5.0", - "@typescript-eslint/parser": "^5.5.0", - "babel-preset-react-app": "^10.0.1", - "confusing-browser-globals": "^1.0.11", - "eslint-plugin-flowtype": "^8.0.3", - "eslint-plugin-import": "^2.25.3", - "eslint-plugin-jest": "^25.3.0", - "eslint-plugin-jsx-a11y": "^6.5.1", - "eslint-plugin-react": "^7.27.1", - "eslint-plugin-react-hooks": "^4.3.0", - "eslint-plugin-testing-library": "^5.0.1" - }, - "engines": { - "node": ">=14.0.0" + "url": "https://eslint.org/donate" }, "peerDependencies": { - "eslint": "^8.0.0" - } - }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.7", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz", - "integrity": "sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==", - "dependencies": { - "debug": "^3.2.7", - "is-core-module": "^2.11.0", - "resolve": "^1.22.1" - } - }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-module-utils": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz", - "integrity": "sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==", - "dependencies": { - "debug": "^3.2.7" - }, - "engines": { - "node": ">=4" + "jiti": "*" }, "peerDependenciesMeta": { - "eslint": { + "jiti": { "optional": true } } }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-flowtype": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-8.0.3.tgz", - "integrity": "sha512-dX8l6qUL6O+fYPtpNRideCFSpmWOUVx5QcaGLVqe/vlDiBSe4vYljDWDETwnyFzpl7By/WVIu6rcrniCgH9BqQ==", - "dependencies": { - "lodash": "^4.17.21", - "string-natural-compare": "^3.0.1" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "@babel/plugin-syntax-flow": "^7.14.5", - "@babel/plugin-transform-react-jsx": "^7.14.9", - "eslint": "^8.1.0" - } - }, - "node_modules/eslint-plugin-import": { - "version": "2.27.5", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz", - "integrity": "sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==", - "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flat": "^1.3.1", - "array.prototype.flatmap": "^1.3.1", - "debug": "^3.2.7", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.7", - "eslint-module-utils": "^2.7.4", - "has": "^1.0.3", - "is-core-module": "^2.11.0", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.values": "^1.1.6", - "resolve": "^1.22.1", - "semver": "^6.3.0", - "tsconfig-paths": "^3.14.1" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" - } - }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-jest": { - "version": "25.7.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-25.7.0.tgz", - "integrity": "sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ==", - "dependencies": { - "@typescript-eslint/experimental-utils": "^5.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - }, - "peerDependencies": { - "@typescript-eslint/eslint-plugin": "^4.0.0 || ^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "@typescript-eslint/eslint-plugin": { - "optional": true - }, - "jest": { - "optional": true - } - } - }, - "node_modules/eslint-plugin-jsx-a11y": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz", - "integrity": "sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==", - "dependencies": { - "@babel/runtime": "^7.20.7", - "aria-query": "^5.1.3", - "array-includes": "^3.1.6", - "array.prototype.flatmap": "^1.3.1", - "ast-types-flow": "^0.0.7", - "axe-core": "^4.6.2", - "axobject-query": "^3.1.1", - "damerau-levenshtein": "^1.0.8", - "emoji-regex": "^9.2.2", - "has": "^1.0.3", - "jsx-ast-utils": "^3.3.3", - "language-tags": "=1.0.5", - "minimatch": "^3.1.2", - "object.entries": "^1.1.6", - "object.fromentries": "^2.0.6", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=4.0" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" - } - }, - "node_modules/eslint-plugin-react": { - "version": "7.32.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.32.2.tgz", - "integrity": "sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==", - "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flatmap": "^1.3.1", - "array.prototype.tosorted": "^1.1.1", - "doctrine": "^2.1.0", - "estraverse": "^5.3.0", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.6", - "object.fromentries": "^2.0.6", - "object.hasown": "^1.1.2", - "object.values": "^1.1.6", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.4", - "semver": "^6.3.0", - "string.prototype.matchall": "^4.0.8" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" - } - }, "node_modules/eslint-plugin-react-hooks": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", - "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.0.0.tgz", + "integrity": "sha512-hIOwI+5hYGpJEc4uPRmz2ulCjAGD/N13Lukkh8cLV0i2IRk/bdZDYjgLVHj+U9Z704kLIdIO6iueGvxNur0sgw==", + "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" } }, - "node_modules/eslint-plugin-react/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.4", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", - "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", - "dependencies": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/eslint-plugin-testing-library": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.10.0.tgz", - "integrity": "sha512-aTOsCAEI9trrX3TLOnsskfhe57DmsjP/yMKLPqg4ftdRvfR4qut2PGWUa8TwP7whZbwMzJjh98tgAPcE8vdHow==", - "dependencies": { - "@typescript-eslint/utils": "^5.43.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0", - "npm": ">=6" - }, + "node_modules/eslint-plugin-react-refresh": { + "version": "0.4.14", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.14.tgz", + "integrity": "sha512-aXvzCTK7ZBv1e7fahFuR3Z/fyQQSIQ711yPgYRj+Oj64tyTgO4iQIDmYXDBqvSWQ/FA4OSCsXOStlF+noU0/NA==", + "dev": true, + "license": "MIT", "peerDependencies": { - "eslint": "^7.5.0 || ^8.0.0" + "eslint": ">=7" } }, "node_modules/eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.2.0.tgz", + "integrity": "sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==", + "dev": true, + "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dependencies": { - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5" - } - }, - "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/eslint-webpack-plugin": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-3.2.0.tgz", - "integrity": "sha512-avrKcGncpPbPSUHX6B3stNGzkKFto3eL+DKM4+VyMrVnhPc3vRczVlCq3uhuFOdRvDHTVXuzwk1ZKUrqDQHQ9w==", - "dev": true, - "dependencies": { - "@types/eslint": "^7.29.0 || ^8.4.1", - "jest-worker": "^28.0.2", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0", - "webpack": "^5.0.0" - } - }, - "node_modules/eslint-webpack-plugin/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/eslint-webpack-plugin/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/eslint-webpack-plugin/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint-webpack-plugin/node_modules/jest-worker": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz", - "integrity": "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==", - "dev": true, - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/eslint-webpack-plugin/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/eslint-webpack-plugin/node_modules/schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/eslint-webpack-plugin/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/eslint/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/eslint/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/eslint/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/eslint/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/eslint/node_modules/globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/espree": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", - "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", - "dependencies": { - "acorn": "^8.8.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", + "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.14.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.0" }, "engines": { - "node": ">=4" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "license": "BSD-3-Clause", "dependencies": { "estraverse": "^5.1.0" }, @@ -8853,6 +3285,8 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", "dependencies": { "estraverse": "^5.2.0" }, @@ -8864,175 +3298,35 @@ "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } }, - "node_modules/estree-walker": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", - "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", - "dev": true - }, "node_modules/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=0.10.0" } }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true, - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/expect": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", - "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", - "dev": true, - "dependencies": { - "@jest/types": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", - "dev": true, - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.1", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/express/node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "dev": true - }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "node_modules/fast-equals": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-5.0.1.tgz", - "integrity": "sha512-WF1Wi8PwwSY7/6Kx0vKXtw8RwuSGoM1bvDaJbu7MxDlR1vovZjIAKrnzyrThgAjm6JDTu0fVgWXDlMGspodfoQ==", - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" }, "node_modules/fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -9048,6 +3342,8 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", "dependencies": { "is-glob": "^4.0.1" }, @@ -9058,116 +3354,46 @@ "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" }, "node_modules/fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" }, "node_modules/fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, + "license": "ISC", "dependencies": { "reusify": "^1.0.4" } }, - "node_modules/faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "dev": true, - "dependencies": { - "websocket-driver": ">=0.5.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/fb-watchman": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", - "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", - "dev": true, - "dependencies": { - "bser": "2.1.1" - } - }, "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "license": "MIT", "dependencies": { - "flat-cache": "^3.0.4" + "flat-cache": "^4.0.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/file-loader": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", - "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", - "dev": true, - "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/filelist": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", - "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", - "dev": true, - "dependencies": { - "minimatch": "^5.0.1" - } - }, - "node_modules/filelist/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/filelist/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/filesize": { - "version": "8.0.7", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-8.0.7.tgz", - "integrity": "sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==", - "dev": true, - "engines": { - "node": ">= 0.4.0" + "node": ">=16.0.0" } }, "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -9175,65 +3401,18 @@ "node": ">=8" } }, - "node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "dev": true, - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "dev": true, - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/avajs/find-cache-dir?sponsor=1" - } - }, "node_modules/find-root": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", - "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", + "license": "MIT" }, "node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -9246,377 +3425,58 @@ } }, "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "license": "MIT", "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" + "flatted": "^3.2.9", + "keyv": "^4.5.4" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=16" } }, "node_modules/flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==" - }, - "node_modules/flatten-vertex-data": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/flatten-vertex-data/-/flatten-vertex-data-1.0.2.tgz", - "integrity": "sha512-BvCBFK2NZqerFTdMDgqfHBwxYWnxeCkwONsw6PvBMcUXqo8U/KDWwmXhqx1x2kLIg7DqIsJfOaJFOmlua3Lxuw==", - "dependencies": { - "dtype": "^2.0.0" - } - }, - "node_modules/follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.2.tgz", + "integrity": "sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==", "dev": true, + "license": "ISC" + }, + "node_modules/formik": { + "version": "2.4.6", + "resolved": "https://registry.npmjs.org/formik/-/formik-2.4.6.tgz", + "integrity": "sha512-A+2EI7U7aG296q2TLGvNapDNTZp1khVt5Vk0Q/fyfSROss0V/V6+txt2aJnwEos44IxTCW/LYAi/zgWzlevj+g==", "funding": [ { "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" + "url": "https://opencollective.com/formik" } ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "license": "Apache-2.0", "dependencies": { - "is-callable": "^1.1.3" - } - }, - "node_modules/force-graph": { - "version": "1.43.0", - "resolved": "https://registry.npmjs.org/force-graph/-/force-graph-1.43.0.tgz", - "integrity": "sha512-nOG818GgID0Boi5OJyjlHuhV5EO4cEaxpXCN+eXqBiG2Mc+8TtqRZrA347grWmeliMdtfldMqYAb/ZKs26qf+w==", - "dependencies": { - "@tweenjs/tween.js": "18", - "accessor-fn": "1", - "bezier-js": "3 - 6", - "canvas-color-tracker": "1", - "d3-array": "1 - 3", - "d3-drag": "2 - 3", - "d3-force-3d": "2 - 3", - "d3-scale": "1 - 4", - "d3-scale-chromatic": "1 - 3", - "d3-selection": "2 - 3", - "d3-zoom": "2 - 3", - "index-array-by": "1", - "kapsule": "^1.13", - "lodash.throttle": "4" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/fork-ts-checker-webpack-plugin": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.2.tgz", - "integrity": "sha512-m5cUmF30xkZ7h4tWUgTAcEaKmUW7tfyUyTqNNOz7OxWJ0v1VWKTcOvH8FWHUwSjlW/356Ijc9vi3XfcPstpQKA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.8.3", - "@types/json-schema": "^7.0.5", - "chalk": "^4.1.0", - "chokidar": "^3.4.2", - "cosmiconfig": "^6.0.0", - "deepmerge": "^4.2.2", - "fs-extra": "^9.0.0", - "glob": "^7.1.6", - "memfs": "^3.1.2", - "minimatch": "^3.0.4", - "schema-utils": "2.7.0", - "semver": "^7.3.2", - "tapable": "^1.0.0" - }, - "engines": { - "node": ">=10", - "yarn": ">=1.0.0" + "@types/hoist-non-react-statics": "^3.3.1", + "deepmerge": "^2.1.1", + "hoist-non-react-statics": "^3.3.0", + "lodash": "^4.17.21", + "lodash-es": "^4.17.21", + "react-fast-compare": "^2.0.1", + "tiny-warning": "^1.0.2", + "tslib": "^2.0.0" }, "peerDependencies": { - "eslint": ">= 6", - "typescript": ">= 2.7", - "vue-template-compiler": "*", - "webpack": ">= 4" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - }, - "vue-template-compiler": { - "optional": true - } + "react": ">=16.8.0" } }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/cosmiconfig": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", - "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", - "dev": true, - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.7.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/schema-utils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", - "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.4", - "ajv": "^6.12.2", - "ajv-keywords": "^3.4.1" - }, - "engines": { - "node": ">= 8.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fraction.js": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", - "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", - "dev": true, - "engines": { - "node": "*" - }, - "funding": { - "type": "patreon", - "url": "https://www.patreon.com/infusion" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fromentries": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", - "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/fs-monkey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", - "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==", - "dev": true - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, "hasInstallScript": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -9626,31 +3486,10 @@ } }, "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "node_modules/function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -9659,102 +3498,18 @@ "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", - "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-own-enumerable-property-symbols": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", - "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", - "dev": true - }, - "node_modules/get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gl-preserve-state": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gl-preserve-state/-/gl-preserve-state-1.0.0.tgz", - "integrity": "sha512-zQZ25l3haD4hvgJZ6C9+s0ebdkW9y+7U2qxvGu1uWOJh8a4RU+jURIKEQhf8elIlFpMH6CrAY2tH0mYrRjet3Q==" - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/glob-parent": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", "dependencies": { "is-glob": "^4.0.3" }, @@ -9762,244 +3517,63 @@ "node": ">=10.13.0" } }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true - }, - "node_modules/global": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", - "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", - "dependencies": { - "min-document": "^2.19.0", - "process": "^0.11.10" - } - }, - "node_modules/global-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", - "dev": true, - "dependencies": { - "global-prefix": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", - "dev": true, - "dependencies": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/global-prefix/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", - "dependencies": { - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true - }, - "node_modules/grapheme-splitter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==" - }, - "node_modules/graphlib": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/graphlib/-/graphlib-2.1.8.tgz", - "integrity": "sha512-jcLLfkpoVGmH7/InMC/1hIvOPSUh38oJtGhvrOFGzioE1DZ+0YW16RgmOJhHiuWTvGiJQ9Z1Ik43JvkRPRvE+A==", - "dependencies": { - "lodash": "^4.17.15" - } - }, - "node_modules/gzip-size": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", - "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", + "version": "15.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.12.0.tgz", + "integrity": "sha512-1+gLErljJFhbOVyaetcwJiJ4+eLe45S2E7P5UiZ9xGfeq3ATQf5DOv9G7MH3gGbKQLkzmNh2DxfZwLdw+j6oTQ==", "dev": true, - "dependencies": { - "duplexer": "^0.1.2" - }, + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", - "dev": true - }, - "node_modules/harmony-reflect": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.6.2.tgz", - "integrity": "sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==", - "dev": true - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true, + "license": "MIT" }, "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dependencies": { - "get-intrinsic": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "bin": { - "he": "bin/he" + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/highlight-words": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/highlight-words/-/highlight-words-2.0.0.tgz", + "integrity": "sha512-If5n+IhSBRXTScE7wl16VPmd+44Vy7kof24EdqhjsZsDuHikpv1OCagVcJFpB4fS4UPUniedlWqrjIO8vWOsIQ==", + "license": "MIT", + "engines": { + "node": ">= 20", + "npm": ">= 9" } }, "node_modules/hoist-non-react-statics": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "license": "BSD-3-Clause", "dependencies": { "react-is": "^16.7.0" } @@ -10007,342 +3581,24 @@ "node_modules/hoist-non-react-statics/node_modules/react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, - "node_modules/hoopy": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz", - "integrity": "sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==", - "dev": true, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - } - }, - "node_modules/hpack.js/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/hpack.js/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/hpack.js/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/hpack.js/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/html-encoding-sniffer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", - "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", - "dev": true, - "dependencies": { - "whatwg-encoding": "^1.0.5" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/html-entities": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", - "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==", - "dev": true - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "node_modules/html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", - "dev": true, - "dependencies": { - "camel-case": "^4.1.2", - "clean-css": "^5.2.2", - "commander": "^8.3.0", - "he": "^1.2.0", - "param-case": "^3.0.4", - "relateurl": "^0.2.7", - "terser": "^5.10.0" - }, - "bin": { - "html-minifier-terser": "cli.js" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/html-webpack-plugin": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz", - "integrity": "sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==", - "dev": true, - "dependencies": { - "@types/html-minifier-terser": "^6.0.0", - "html-minifier-terser": "^6.0.2", - "lodash": "^4.17.21", - "pretty-error": "^4.0.0", - "tapable": "^2.0.0" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/html-webpack-plugin" - }, - "peerDependencies": { - "webpack": "^5.20.0" - } - }, - "node_modules/htmlparser2": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", - "dev": true, - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" - } - }, - "node_modules/http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", - "dev": true - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dev": true, - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-parser-js": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", - "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", - "dev": true - }, - "node_modules/http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "dev": true, - "dependencies": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", - "dev": true, - "dependencies": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/http-proxy-middleware": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", - "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", - "dev": true, - "dependencies": { - "@types/http-proxy": "^1.17.8", - "http-proxy": "^1.18.1", - "is-glob": "^4.0.1", - "is-plain-obj": "^3.0.0", - "micromatch": "^4.0.2" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "@types/express": "^4.17.13" - }, - "peerDependenciesMeta": { - "@types/express": { - "optional": true - } - } - }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/humanize-duration": { - "version": "3.28.0", - "resolved": "https://registry.npmjs.org/humanize-duration/-/humanize-duration-3.28.0.tgz", - "integrity": "sha512-jMAxraOOmHuPbffLVDKkEKi/NeG8dMqP8lGRd6Tbf7JgAeG33jjgPWDbXXU7ypCI0o+oNKJFgbSB9FKVdWNI2A==" - }, - "node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/idb": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/idb/-/idb-7.1.1.tgz", - "integrity": "sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==", - "dev": true - }, - "node_modules/identity-obj-proxy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz", - "integrity": "sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA==", - "dev": true, - "dependencies": { - "harmony-reflect": "^1.4.6" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "license": "MIT" }, "node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", "engines": { "node": ">= 4" } }, - "node_modules/immer": { - "version": "9.0.19", - "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.19.tgz", - "integrity": "sha512-eY+Y0qcsB4TZKwgQzLaE/lqYMlKhv5J9dyd2RhhtGhNo2njPXDqU9XPfcNfa3MIDsdtZt5KlkIsirlo4dHsWdQ==", - "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/immer" - } - }, "node_modules/import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "license": "MIT", "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -10354,200 +3610,38 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", - "dev": true, - "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.19" } }, - "node_modules/index-array-by": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/index-array-by/-/index-array-by-1.3.3.tgz", - "integrity": "sha512-dpqV1sX+hx4s0RqAT97ypk9xzcAXJ0XK27p3bTgPy8bjbJAX6Kf7RU3pPXgmg9hhO7f5/WxO354v2f/A0/fz3Q==" - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true - }, - "node_modules/internal-slot": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.4.tgz", - "integrity": "sha512-tA8URYccNzMo94s5MQZgH8NB/XTa6HsOo0MLfXTKKEnHVVdegzaQoFZ7Jp44bdvLvY2waT5dc+j5ICEswhi7UQ==", - "dependencies": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/internmap": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", + "license": "ISC", "engines": { "node": ">=12" } }, - "node_modules/invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "dependencies": { - "loose-envify": "^1.0.0" - } - }, - "node_modules/ipaddr.js": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", - "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-array-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.1.tgz", - "integrity": "sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ==", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-typed-array": "^1.1.10" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" - }, - "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dependencies": { - "has-bigints": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "license": "MIT" }, "node_modules/is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", + "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", + "license": "MIT", "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dependencies": { - "has-tostringtag": "^1.0.0" + "hasown": "^2.0.2" }, "engines": { "node": ">= 0.4" @@ -10556,56 +3650,22 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true, - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-function": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", - "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==" - }, - "node_modules/is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" }, @@ -10613,2516 +3673,35 @@ "node": ">=0.10.0" } }, - "node_modules/is-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", - "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", - "dev": true - }, - "node_modules/is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", "engines": { "node": ">=0.12.0" } }, - "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-plain-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", - "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-potential-custom-element-name": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", - "dev": true - }, - "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-root": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", - "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/is-set": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", - "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typed-array": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", - "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "dev": true - }, - "node_modules/is-weakmap": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", - "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakset": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", - "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" - }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", - "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", - "dev": true, - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", - "dev": true, - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-source-maps/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/istanbul-reports": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", - "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", - "dev": true, - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jake": { - "version": "10.8.5", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz", - "integrity": "sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==", - "dev": true, - "dependencies": { - "async": "^3.2.3", - "chalk": "^4.0.2", - "filelist": "^1.0.1", - "minimatch": "^3.0.4" - }, - "bin": { - "jake": "bin/cli.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jake/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jake/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jake/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jake/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jake/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jake/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jerrypick": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/jerrypick/-/jerrypick-1.0.5.tgz", - "integrity": "sha512-95dIyL2QXqevDDJ70rmiqKLsTi+riZftLQo708tSFR/O5pQOf6VscDhjnN8mkNQwqnQmGhw+6dfZ5d4bmH/yww==" - }, - "node_modules/jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz", - "integrity": "sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==", - "dev": true, - "dependencies": { - "@jest/core": "^27.5.1", - "import-local": "^3.0.2", - "jest-cli": "^27.5.1" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-changed-files": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.1.tgz", - "integrity": "sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==", - "dev": true, - "dependencies": { - "@jest/types": "^27.5.1", - "execa": "^5.0.0", - "throat": "^6.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-circus": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.1.tgz", - "integrity": "sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==", - "dev": true, - "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^0.7.0", - "expect": "^27.5.1", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3", - "throat": "^6.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-circus/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-circus/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-circus/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-circus/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-circus/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-circus/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-cli": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.1.tgz", - "integrity": "sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==", - "dev": true, - "dependencies": { - "@jest/core": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "import-local": "^3.0.2", - "jest-config": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "prompts": "^2.0.1", - "yargs": "^16.2.0" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-cli/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-cli/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-cli/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-cli/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-cli/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-cli/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-config": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.5.1.tgz", - "integrity": "sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==", - "dev": true, - "dependencies": { - "@babel/core": "^7.8.0", - "@jest/test-sequencer": "^27.5.1", - "@jest/types": "^27.5.1", - "babel-jest": "^27.5.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.1", - "graceful-fs": "^4.2.9", - "jest-circus": "^27.5.1", - "jest-environment-jsdom": "^27.5.1", - "jest-environment-node": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-jasmine2": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-runner": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "peerDependencies": { - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "ts-node": { - "optional": true - } - } - }, - "node_modules/jest-config/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-config/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-config/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-config/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-config/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-config/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-diff": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", - "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-diff/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-diff/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-diff/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-diff/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-diff/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-diff/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-docblock": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.1.tgz", - "integrity": "sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==", - "dev": true, - "dependencies": { - "detect-newline": "^3.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-each": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz", - "integrity": "sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==", - "dev": true, - "dependencies": { - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "jest-get-type": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-each/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-each/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-each/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-each/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-each/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-each/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-environment-jsdom": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz", - "integrity": "sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==", - "dev": true, - "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1", - "jsdom": "^16.6.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-environment-node": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.1.tgz", - "integrity": "sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==", - "dev": true, - "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-get-type": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", - "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", - "dev": true, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-haste-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", - "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", - "dev": true, - "dependencies": { - "@jest/types": "^27.5.1", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^27.5.1", - "jest-serializer": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "micromatch": "^4.0.4", - "walker": "^1.0.7" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" - } - }, - "node_modules/jest-jasmine2": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz", - "integrity": "sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==", - "dev": true, - "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/source-map": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "expect": "^27.5.1", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1", - "throat": "^6.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-jasmine2/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-jasmine2/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-jasmine2/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-jasmine2/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-jasmine2/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-jasmine2/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-leak-detector": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz", - "integrity": "sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==", - "dev": true, - "dependencies": { - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-matcher-utils": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", - "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-matcher-utils/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-matcher-utils/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-matcher-utils/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-matcher-utils/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-matcher-utils/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-matcher-utils/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-message-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", - "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.5.1", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-message-util/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-message-util/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-message-util/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-message-util/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-message-util/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-message-util/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-mock": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", - "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", - "dev": true, - "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-pnp-resolver": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", - "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", - "dev": true, - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "jest-resolve": "*" - }, - "peerDependenciesMeta": { - "jest-resolve": { - "optional": true - } - } - }, - "node_modules/jest-regex-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", - "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", - "dev": true, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-resolve": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.1.tgz", - "integrity": "sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==", - "dev": true, - "dependencies": { - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "resolve": "^1.20.0", - "resolve.exports": "^1.1.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-resolve-dependencies": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz", - "integrity": "sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==", - "dev": true, - "dependencies": { - "@jest/types": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-snapshot": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-resolve/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-resolve/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-resolve/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-resolve/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-resolve/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-resolve/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runner": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.1.tgz", - "integrity": "sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==", - "dev": true, - "dependencies": { - "@jest/console": "^27.5.1", - "@jest/environment": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.8.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^27.5.1", - "jest-environment-jsdom": "^27.5.1", - "jest-environment-node": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-leak-detector": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "source-map-support": "^0.5.6", - "throat": "^6.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-runner/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-runner/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-runner/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-runner/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-runner/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runner/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runtime": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz", - "integrity": "sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==", - "dev": true, - "dependencies": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/globals": "^27.5.1", - "@jest/source-map": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "execa": "^5.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-mock": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-runtime/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-runtime/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-runtime/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-runtime/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-runtime/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-runtime/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-serializer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", - "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", - "dev": true, - "dependencies": { - "@types/node": "*", - "graceful-fs": "^4.2.9" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-snapshot": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz", - "integrity": "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==", - "dev": true, - "dependencies": { - "@babel/core": "^7.7.2", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/traverse": "^7.7.2", - "@babel/types": "^7.0.0", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/babel__traverse": "^7.0.4", - "@types/prettier": "^2.1.5", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^27.5.1", - "graceful-fs": "^4.2.9", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-util": "^27.5.1", - "natural-compare": "^1.4.0", - "pretty-format": "^27.5.1", - "semver": "^7.3.2" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-snapshot/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-snapshot/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-snapshot/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-snapshot/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jest-snapshot/node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jest-snapshot/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-snapshot/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dev": true, - "dependencies": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-util/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-util/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-util/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-util/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-util/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-util/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-validate": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.1.tgz", - "integrity": "sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==", - "dev": true, - "dependencies": { - "@jest/types": "^27.5.1", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^27.5.1", - "leven": "^3.1.0", - "pretty-format": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-validate/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-validate/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-validate/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-validate/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-validate/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-validate/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-watch-typeahead": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-1.1.0.tgz", - "integrity": "sha512-Va5nLSJTN7YFtC2jd+7wsoe1pNe5K4ShLux/E5iHEwlB9AxaxmggY7to9KUqKojhaJw3aXqt5WAb4jGPOolpEw==", - "dev": true, - "dependencies": { - "ansi-escapes": "^4.3.1", - "chalk": "^4.0.0", - "jest-regex-util": "^28.0.0", - "jest-watcher": "^28.0.0", - "slash": "^4.0.0", - "string-length": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "jest": "^27.0.0 || ^28.0.0" - } - }, - "node_modules/jest-watch-typeahead/node_modules/@jest/console": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-28.1.3.tgz", - "integrity": "sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw==", - "dev": true, - "dependencies": { - "@jest/types": "^28.1.3", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^28.1.3", - "jest-util": "^28.1.3", - "slash": "^3.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-watch-typeahead/node_modules/@jest/console/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-watch-typeahead/node_modules/@jest/test-result": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-28.1.3.tgz", - "integrity": "sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg==", - "dev": true, - "dependencies": { - "@jest/console": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-watch-typeahead/node_modules/@jest/types": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", - "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", - "dev": true, - "dependencies": { - "@jest/schemas": "^28.1.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-watch-typeahead/node_modules/@types/yargs": { - "version": "17.0.22", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz", - "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-watch-typeahead/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-watch-typeahead/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-watch-typeahead/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-watch-typeahead/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-watch-typeahead/node_modules/emittery": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz", - "integrity": "sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } - }, - "node_modules/jest-watch-typeahead/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-watch-typeahead/node_modules/jest-message-util": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz", - "integrity": "sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^28.1.3", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^28.1.3", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-watch-typeahead/node_modules/jest-message-util/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-watch-typeahead/node_modules/jest-regex-util": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", - "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", - "dev": true, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-watch-typeahead/node_modules/jest-util": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", - "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", - "dev": true, - "dependencies": { - "@jest/types": "^28.1.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-watch-typeahead/node_modules/jest-watcher": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.3.tgz", - "integrity": "sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g==", - "dev": true, - "dependencies": { - "@jest/test-result": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.10.2", - "jest-util": "^28.1.3", - "string-length": "^4.0.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-watch-typeahead/node_modules/jest-watcher/node_modules/string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dev": true, - "dependencies": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jest-watch-typeahead/node_modules/jest-watcher/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-watch-typeahead/node_modules/pretty-format": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", - "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", - "dev": true, - "dependencies": { - "@jest/schemas": "^28.1.3", - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-watch-typeahead/node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-watch-typeahead/node_modules/slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-watch-typeahead/node_modules/string-length": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-5.0.1.tgz", - "integrity": "sha512-9Ep08KAMUn0OadnVaBuRdE2l615CQ508kr0XMadjClfYpdCyvrbFp6Taebo8yyxokQ4viUd/xPPUA4FGgUa0ow==", - "dev": true, - "dependencies": { - "char-regex": "^2.0.0", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-watch-typeahead/node_modules/string-length/node_modules/char-regex": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-2.0.1.tgz", - "integrity": "sha512-oSvEeo6ZUD7NepqAat3RqoucZ5SeqLJgOvVIwkafu6IP3V0pO38s/ypdVUmDDK6qIIHNlYHJAKX9E7R7HoKElw==", - "dev": true, - "engines": { - "node": ">=12.20" - } - }, - "node_modules/jest-watch-typeahead/node_modules/strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", - "dev": true, - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/jest-watch-typeahead/node_modules/strip-ansi/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/jest-watch-typeahead/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-watcher": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.5.1.tgz", - "integrity": "sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==", - "dev": true, - "dependencies": { - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "jest-util": "^27.5.1", - "string-length": "^4.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-watcher/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-watcher/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jest-watcher/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/jest-watcher/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/jest-watcher/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-watcher/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "dev": true, - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/jest-worker/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/js-sdsl": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.3.0.tgz", - "integrity": "sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/js-sdsl" - } + "license": "ISC" }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" }, "node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -13130,88 +3709,51 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/jsdom": { - "version": "16.7.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", - "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", - "dev": true, - "dependencies": { - "abab": "^2.0.5", - "acorn": "^8.2.4", - "acorn-globals": "^6.0.0", - "cssom": "^0.4.4", - "cssstyle": "^2.3.0", - "data-urls": "^2.0.0", - "decimal.js": "^10.2.1", - "domexception": "^2.0.1", - "escodegen": "^2.0.0", - "form-data": "^3.0.0", - "html-encoding-sniffer": "^2.0.1", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.0", - "parse5": "6.0.1", - "saxes": "^5.0.1", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.0.0", - "w3c-hr-time": "^1.0.2", - "w3c-xmlserializer": "^2.0.0", - "webidl-conversions": "^6.1.0", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.5.0", - "ws": "^7.4.6", - "xml-name-validator": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "canvas": "^2.5.0" - }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } - } - }, "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", + "license": "MIT", "bin": { "jsesc": "bin/jsesc" }, "engines": { - "node": ">=4" + "node": ">=6" } }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" - }, - "node_modules/json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", - "dev": true + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "license": "MIT" }, "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" }, "node_modules/json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", "bin": { "json5": "lib/cli.js" }, @@ -13219,110 +3761,22 @@ "node": ">=6" } }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, + "license": "MIT", "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jsonpointer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", - "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jsx-ast-utils": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz", - "integrity": "sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==", - "dependencies": { - "array-includes": "^3.1.5", - "object.assign": "^4.1.3" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/kapsule": { - "version": "1.13.8", - "resolved": "https://registry.npmjs.org/kapsule/-/kapsule-1.13.8.tgz", - "integrity": "sha512-Y1lLt1htHNofIM5kxS5OdEqDm7WFqHF4hm6DrrvNEKIJugfQrxDBycV41QI5FpnBGHqyBD99VpTB5ARnlufP6w==", - "dependencies": { - "debounce": "^1.2.1" - } - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/klona": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", - "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/language-subtag-registry": { - "version": "0.3.22", - "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", - "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==" - }, - "node_modules/language-tags": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", - "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==", - "dependencies": { - "language-subtag-registry": "~0.3.2" - } - }, - "node_modules/layout-bmfont-text": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/layout-bmfont-text/-/layout-bmfont-text-1.3.4.tgz", - "integrity": "sha512-mceomHZ8W7pSKQhTdLvOe1Im4n37u8xa5Gr0J3KPCHRMO/9o7+goWIOzZcUUd+Xgzy3+22bvoIQ0OaN3LRtgaw==", - "dependencies": { - "as-number": "^1.0.0", - "word-wrapper": "^1.0.7", - "xtend": "^4.0.0" - } - }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true, - "engines": { - "node": ">=6" + "json-buffer": "3.0.1" } }, "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -13331,62 +3785,18 @@ "node": ">= 0.8.0" } }, - "node_modules/lilconfig": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz", - "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==", - "dev": true, - "engines": { - "node": ">=10" - } - }, "node_modules/lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" - }, - "node_modules/load-bmfont": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/load-bmfont/-/load-bmfont-1.4.1.tgz", - "integrity": "sha512-8UyQoYmdRDy81Brz6aLAUhfZLwr5zV0L3taTQ4hju7m6biuwiWiJXjPhBJxbUQJA8PrkvJ/7Enqmwk2sM14soA==", - "dependencies": { - "buffer-equal": "0.0.1", - "mime": "^1.3.4", - "parse-bmfont-ascii": "^1.0.3", - "parse-bmfont-binary": "^1.0.5", - "parse-bmfont-xml": "^1.1.4", - "phin": "^2.9.1", - "xhr": "^2.0.1", - "xtend": "^4.0.0" - } - }, - "node_modules/loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", - "dev": true, - "engines": { - "node": ">=6.11.5" - } - }, - "node_modules/loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "license": "MIT" }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^5.0.0" }, @@ -13400,45 +3810,27 @@ "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "license": "MIT" }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" - }, - "node_modules/lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", - "dev": true + "node_modules/lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==", + "license": "MIT" }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" - }, - "node_modules/lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==", - "dev": true - }, - "node_modules/lodash.throttle": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", - "integrity": "sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==" - }, - "node_modules/lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", - "dev": true + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" }, "node_modules/loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" }, @@ -13446,273 +3838,74 @@ "loose-envify": "cli.js" } }, - "node_modules/lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "dev": true, - "dependencies": { - "tslib": "^2.0.3" - } - }, "node_modules/lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", "dependencies": { "yallist": "^3.0.2" } }, - "node_modules/magic-string": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", - "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", - "dev": true, - "dependencies": { - "sourcemap-codec": "^1.4.8" - } - }, - "node_modules/make-dir": { + "node_modules/material-react-table": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, + "resolved": "https://registry.npmjs.org/material-react-table/-/material-react-table-3.1.0.tgz", + "integrity": "sha512-/zPn38QhxQE7mkwLex4CojX3UP2+/+/u7NVq7CHS5d6P8LdTteJPVYXVzym/uhaXzAzFB1ojsbP7zI/y6iUdtQ==", + "license": "MIT", "dependencies": { - "semver": "^6.0.0" + "@tanstack/match-sorter-utils": "8.19.4", + "@tanstack/react-table": "8.20.6", + "@tanstack/react-virtual": "3.11.2", + "highlight-words": "2.0.0" }, "engines": { - "node": ">=8" + "node": ">=16" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "dev": true, - "dependencies": { - "tmpl": "1.0.5" - } - }, - "node_modules/map-limit": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/map-limit/-/map-limit-0.0.1.tgz", - "integrity": "sha512-pJpcfLPnIF/Sk3taPW21G/RQsEEirGaFpCW3oXRwH9dnFHPHNGjNyvh++rdmC2fNqEaTw2MhYJraoJWAHx8kEg==", - "dependencies": { - "once": "~1.3.0" - } - }, - "node_modules/map-limit/node_modules/once": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", - "integrity": "sha512-6vaNInhu+CHxtONf3zw3vq4SP2DOQhjBvIa3rNcG0+P7eKWlYH6Peu7rHizSloRU2EwMz6GraLieis9Ac9+p1w==", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/memfs": { - "version": "3.4.13", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.13.tgz", - "integrity": "sha512-omTM41g3Skpvx5dSYeZIbXKcXoAVc/AoMNwn9TKx++L/gaen/+4TTttmu8ZSch5vfVJ8uJvGbroTsIlslRg6lg==", - "dev": true, - "dependencies": { - "fs-monkey": "^1.0.3" + "type": "github", + "url": "https://github.com/sponsors/kevinvandy" }, - "engines": { - "node": ">= 4.0.0" + "peerDependencies": { + "@emotion/react": ">=11.13", + "@emotion/styled": ">=11.13", + "@mui/icons-material": ">=6", + "@mui/material": ">=6", + "@mui/x-date-pickers": ">=7.15", + "react": ">=18.0", + "react-dom": ">=18.0" } }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", - "dev": true - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", "engines": { "node": ">= 8" } }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", "dependencies": { - "braces": "^3.0.2", + "braces": "^3.0.3", "picomatch": "^2.3.1" }, "engines": { "node": ">=8.6" } }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/min-document": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", - "integrity": "sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==", - "dependencies": { - "dom-walk": "^0.1.0" - } - }, - "node_modules/mini-css-extract-plugin": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.2.tgz", - "integrity": "sha512-EdlUizq13o0Pd+uCp+WO/JpkLvHRVGt97RqfeGhXqAcorYo1ypJSpkV+WDT0vY/kmh/p7wRdJNJtuyK540PXDw==", - "dev": true, - "dependencies": { - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/mini-css-extract-plugin/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/mini-css-extract-plugin/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/mini-css-extract-plugin/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/mini-css-extract-plugin/node_modules/schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true - }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -13720,57 +3913,35 @@ "node": "*" } }, - "node_modules/minimist": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, "node_modules/moment": { - "version": "2.29.4", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", - "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", + "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", + "license": "MIT", + "optional": true, + "peer": true, "engines": { "node": "*" } }, "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/multicast-dns": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", - "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", - "dev": true, - "dependencies": { - "dns-packet": "^5.2.2", - "thunky": "^1.0.2" - }, - "bin": { - "multicast-dns": "cli.js" - } + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" }, "node_modules/nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", + "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -13781,392 +3952,39 @@ "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" - }, - "node_modules/natural-compare-lite": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==" - }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true - }, - "node_modules/new-array": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/new-array/-/new-array-1.0.0.tgz", - "integrity": "sha512-K5AyFYbuHZ4e/ti52y7k18q8UHsS78FlRd85w2Fmsd6AkuLipDihPflKC0p3PN5i8II7+uHxo+CtkLiJDfmS5A==" - }, - "node_modules/ngraph.events": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/ngraph.events/-/ngraph.events-1.2.2.tgz", - "integrity": "sha512-JsUbEOzANskax+WSYiAPETemLWYXmixuPAlmZmhIbIj6FH/WDgEGCGnRwUQBK0GjOnVm8Ui+e5IJ+5VZ4e32eQ==" - }, - "node_modules/ngraph.forcelayout": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/ngraph.forcelayout/-/ngraph.forcelayout-3.3.1.tgz", - "integrity": "sha512-MKBuEh1wujyQHFTW57y5vd/uuEOK0XfXYxm3lC7kktjJLRdt/KEKEknyOlc6tjXflqBKEuYBBcu7Ax5VY+S6aw==", - "dependencies": { - "ngraph.events": "^1.0.0", - "ngraph.merge": "^1.0.0", - "ngraph.random": "^1.0.0" - } - }, - "node_modules/ngraph.graph": { - "version": "20.0.1", - "resolved": "https://registry.npmjs.org/ngraph.graph/-/ngraph.graph-20.0.1.tgz", - "integrity": "sha512-VFsQ+EMkT+7lcJO1QP8Ik3w64WbHJl27Q53EO9hiFU9CRyxJ8HfcXtfWz/U8okuoYKDctbciL6pX3vG5dt1rYA==", - "dependencies": { - "ngraph.events": "^1.2.1" - } - }, - "node_modules/ngraph.merge": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/ngraph.merge/-/ngraph.merge-1.0.0.tgz", - "integrity": "sha512-5J8YjGITUJeapsomtTALYsw7rFveYkM+lBj3QiYZ79EymQcuri65Nw3knQtFxQBU1r5iOaVRXrSwMENUPK62Vg==" - }, - "node_modules/ngraph.random": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ngraph.random/-/ngraph.random-1.1.0.tgz", - "integrity": "sha512-h25UdUN/g8U7y29TzQtRm/GvGr70lK37yQPvPKXXuVfs7gCm82WipYFZcksQfeKumtOemAzBIcT7lzzyK/edLw==" - }, - "node_modules/nice-color-palettes": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/nice-color-palettes/-/nice-color-palettes-1.0.1.tgz", - "integrity": "sha512-aHEFYKuGiaga8LqMi0Ttarqzn4tKS7BaIE2MeD9SDjv6yVc7DMIu/Eax4RvUgwR7vS0hXAUEIUx9P0/54O1W0g==", - "dependencies": { - "map-limit": "0.0.1", - "minimist": "^1.2.0", - "new-array": "^1.0.0", - "xhr-request": "^1.0.1" - }, - "bin": { - "nice-color-palettes": "bin/index.js" - } - }, - "node_modules/no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", - "dev": true, - "dependencies": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - } - }, - "node_modules/node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", - "dev": true, - "engines": { - "node": ">= 6.13.0" - } - }, - "node_modules/node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true + "license": "MIT" }, "node_modules/node-releases": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.9.tgz", - "integrity": "sha512-2xfmOrRkGogbTK9R6Leda0DGiXeY3p2NJpy4+gNCffdUvV6mdEJnaDEic1i3Ec2djAo8jWYoJMR5PB0MSMpxUA==" - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/nosleep.js": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/nosleep.js/-/nosleep.js-0.7.0.tgz", - "integrity": "sha512-Z4B1HgvzR+en62ghwZf6BwAR6x4/pjezsiMcbF9KMLh7xoscpoYhaSXfY3lLkqC68AtW+/qLJ1lzvBIj0FGaTA==" - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/nwsapi": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.2.tgz", - "integrity": "sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw==", - "dev": true + "license": "MIT" }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/object-hash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", - "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.entries": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz", - "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.fromentries": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz", - "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.getownpropertydescriptors": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.5.tgz", - "integrity": "sha512-yDNzckpM6ntyQiGTik1fKV1DcVDRS+w8bvpWNCBanvH5LfRX9O8WTHqQzG4RZwRAM4I0oU7TV11Lj5v0g20ibw==", - "dev": true, - "dependencies": { - "array.prototype.reduce": "^1.0.5", - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "engines": { - "node": ">= 0.8" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.hasown": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz", - "integrity": "sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==", - "dependencies": { - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.values": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", - "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", - "dev": true - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dev": true, - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/open": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", - "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", - "dev": true, - "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", "type-check": "^0.4.0", - "word-wrap": "^1.2.3" + "word-wrap": "^1.2.5" }, "engines": { "node": ">= 0.8.0" @@ -14176,6 +3994,8 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" }, @@ -14190,6 +4010,8 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^3.0.2" }, @@ -14200,42 +4022,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/p-retry": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", - "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", - "dev": true, - "dependencies": { - "@types/retry": "0.12.0", - "retry": "^0.13.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/param-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", - "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", - "dev": true, - "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "license": "MIT", "dependencies": { "callsites": "^3.0.0" }, @@ -14243,34 +4034,11 @@ "node": ">=6" } }, - "node_modules/parse-bmfont-ascii": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/parse-bmfont-ascii/-/parse-bmfont-ascii-1.0.6.tgz", - "integrity": "sha512-U4RrVsUFCleIOBsIGYOMKjn9PavsGOXxbvYGtMOEfnId0SVNsgehXh1DxUdVPLoxd5mvcEtvmKs2Mmf0Mpa1ZA==" - }, - "node_modules/parse-bmfont-binary": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/parse-bmfont-binary/-/parse-bmfont-binary-1.0.6.tgz", - "integrity": "sha512-GxmsRea0wdGdYthjuUeWTMWPqm2+FAd4GI8vCvhgJsFnoGhTrLhXDDupwTo7rXVAgaLIGoVHDZS9p/5XbSqeWA==" - }, - "node_modules/parse-bmfont-xml": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/parse-bmfont-xml/-/parse-bmfont-xml-1.1.4.tgz", - "integrity": "sha512-bjnliEOmGv3y1aMEfREMBJ9tfL3WR0i0CKPj61DnSLaoxWR3nLrsQrEbCId/8rF4NyRF0cCqisSVXyQYWM+mCQ==", - "dependencies": { - "xml-parse-from-string": "^1.0.0", - "xml2js": "^0.4.5" - } - }, - "node_modules/parse-headers": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.5.tgz", - "integrity": "sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==" - }, "node_modules/parse-json": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -14284,51 +4052,22 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/pascal-case": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", - "dev": true, - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -14336,42 +4075,30 @@ "node_modules/path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, - "node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", - "dev": true + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "license": "MIT" }, "node_modules/path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", - "dev": true - }, - "node_modules/phin": { - "version": "2.9.3", - "resolved": "https://registry.npmjs.org/phin/-/phin-2.9.3.tgz", - "integrity": "sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA==" - }, "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" }, "node_modules/picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", "engines": { "node": ">=8.6" }, @@ -14379,176 +4106,10 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pirates": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", - "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-dir/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-up": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", - "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", - "dev": true, - "dependencies": { - "find-up": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-up/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-up/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/polished": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/polished/-/polished-4.2.2.tgz", - "integrity": "sha512-Sz2Lkdxz6F2Pgnpi9U5Ng/WdWAUZxmHrNPoVlm3aAemxoy2Qy7LGjQg4uf8qKelDAUW94F4np3iH2YPf2qefcQ==", - "dependencies": { - "@babel/runtime": "^7.17.8" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/postcss": { - "version": "8.4.21", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz", - "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==", + "version": "8.4.49", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz", + "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==", "dev": true, "funding": [ { @@ -14558,1502 +4119,70 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "nanoid": "^3.3.4", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "nanoid": "^3.3.7", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" }, "engines": { "node": "^10 || ^12 || >=14" } }, - "node_modules/postcss-attribute-case-insensitive": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-5.0.2.tgz", - "integrity": "sha512-XIidXV8fDr0kKt28vqki84fRK8VW8eTuIa4PChv2MqKuT6C9UjmSKzen6KaWhWEoYvwxFCa7n/tC1SZ3tyq4SQ==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.10" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-browser-comments": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-browser-comments/-/postcss-browser-comments-4.0.0.tgz", - "integrity": "sha512-X9X9/WN3KIvY9+hNERUqX9gncsgBA25XaeR+jshHz2j8+sYyHktHw1JdKuMjeLpGktXidqDhA7b/qm1mrBDmgg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "peerDependencies": { - "browserslist": ">=4", - "postcss": ">=8" - } - }, - "node_modules/postcss-calc": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", - "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.9", - "postcss-value-parser": "^4.2.0" - }, - "peerDependencies": { - "postcss": "^8.2.2" - } - }, - "node_modules/postcss-clamp": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-clamp/-/postcss-clamp-4.1.0.tgz", - "integrity": "sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": ">=7.6.0" - }, - "peerDependencies": { - "postcss": "^8.4.6" - } - }, - "node_modules/postcss-color-functional-notation": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-4.2.4.tgz", - "integrity": "sha512-2yrTAUZUab9s6CpxkxC4rVgFEVaR6/2Pipvi6qcgvnYiVqZcbDHEoBDhrXzyb7Efh2CCfHQNtcqWcIruDTIUeg==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-color-hex-alpha": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-8.0.4.tgz", - "integrity": "sha512-nLo2DCRC9eE4w2JmuKgVA3fGL3d01kGq752pVALF68qpGLmx2Qrk91QTKkdUqqp45T1K1XV8IhQpcu1hoAQflQ==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-color-rebeccapurple": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-7.1.1.tgz", - "integrity": "sha512-pGxkuVEInwLHgkNxUc4sdg4g3py7zUeCQ9sMfwyHAT+Ezk8a4OaaVZ8lIY5+oNqA/BXXgLyXv0+5wHP68R79hg==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-colormin": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.0.tgz", - "integrity": "sha512-WdDO4gOFG2Z8n4P8TWBpshnL3JpmNmJwdnfP2gbk2qBA8PWwOYcmjmI/t3CmMeL72a7Hkd+x/Mg9O2/0rD54Pg==", - "dev": true, - "dependencies": { - "browserslist": "^4.16.6", - "caniuse-api": "^3.0.0", - "colord": "^2.9.1", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-convert-values": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", - "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", - "dev": true, - "dependencies": { - "browserslist": "^4.21.4", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-custom-media": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-8.0.2.tgz", - "integrity": "sha512-7yi25vDAoHAkbhAzX9dHx2yc6ntS4jQvejrNcC+csQJAXjj15e7VcWfMgLqBNAbOvqi5uIa9huOVwdHbf+sKqg==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.3" - } - }, - "node_modules/postcss-custom-properties": { - "version": "12.1.11", - "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-12.1.11.tgz", - "integrity": "sha512-0IDJYhgU8xDv1KY6+VgUwuQkVtmYzRwu+dMjnmdMafXYv86SWqfxkc7qdDvWS38vsjaEtv8e0vGOUQrAiMBLpQ==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-custom-selectors": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-6.0.3.tgz", - "integrity": "sha512-fgVkmyiWDwmD3JbpCmB45SvvlCD6z9CG6Ie6Iere22W5aHea6oWa7EM2bpnv2Fj3I94L3VbtvX9KqwSi5aFzSg==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.4" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.3" - } - }, - "node_modules/postcss-dir-pseudo-class": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-6.0.5.tgz", - "integrity": "sha512-eqn4m70P031PF7ZQIvSgy9RSJ5uI2171O/OO/zcRNYpJbvaeKFUlar1aJ7rmgiQtbm0FSPsRewjpdS0Oew7MPA==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.10" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-discard-comments": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", - "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-duplicates": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", - "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-empty": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", - "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-overridden": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", - "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-double-position-gradients": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-3.1.2.tgz", - "integrity": "sha512-GX+FuE/uBR6eskOK+4vkXgT6pDkexLokPaz/AbJna9s5Kzp/yl488pKPjhy0obB475ovfT1Wv8ho7U/cHNaRgQ==", - "dev": true, - "dependencies": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-env-function": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-4.0.6.tgz", - "integrity": "sha512-kpA6FsLra+NqcFnL81TnsU+Z7orGtDTxcOhl6pwXeEq1yFPpRMkCDpHhrz8CFQDr/Wfm0jLiNQ1OsGGPjlqPwA==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-flexbugs-fixes": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-5.0.2.tgz", - "integrity": "sha512-18f9voByak7bTktR2QgDveglpn9DTbBWPUzSOe9g0N4WR/2eSt6Vrcbf0hmspvMI6YWGywz6B9f7jzpFNJJgnQ==", - "dev": true, - "peerDependencies": { - "postcss": "^8.1.4" - } - }, - "node_modules/postcss-focus-visible": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-6.0.4.tgz", - "integrity": "sha512-QcKuUU/dgNsstIK6HELFRT5Y3lbrMLEOwG+A4s5cA+fx3A3y/JTq3X9LaOj3OC3ALH0XqyrgQIgey/MIZ8Wczw==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.9" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-focus-within": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-5.0.4.tgz", - "integrity": "sha512-vvjDN++C0mu8jz4af5d52CB184ogg/sSxAFS+oUJQq2SuCe7T5U2iIsVJtsCp2d6R4j0jr5+q3rPkBVZkXD9fQ==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.9" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-font-variant": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz", - "integrity": "sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==", - "dev": true, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-gap-properties": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-3.0.5.tgz", - "integrity": "sha512-IuE6gKSdoUNcvkGIqdtjtcMtZIFyXZhmFd5RUlg97iVEvp1BZKV5ngsAjCjrVy+14uhGBQl9tzmi1Qwq4kqVOg==", - "dev": true, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-image-set-function": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-4.0.7.tgz", - "integrity": "sha512-9T2r9rsvYzm5ndsBE8WgtrMlIT7VbtTfE7b3BQnudUqnBcBo7L758oc+o+pdj/dUV0l5wjwSdjeOH2DZtfv8qw==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-import": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz", - "integrity": "sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.0.0", - "read-cache": "^1.0.0", - "resolve": "^1.1.7" - }, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "postcss": "^8.0.0" - } - }, - "node_modules/postcss-initial": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-4.0.1.tgz", - "integrity": "sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==", - "dev": true, - "peerDependencies": { - "postcss": "^8.0.0" - } - }, - "node_modules/postcss-js": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz", - "integrity": "sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==", - "dev": true, - "dependencies": { - "camelcase-css": "^2.0.1" - }, - "engines": { - "node": "^12 || ^14 || >= 16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": "^8.3.3" - } - }, - "node_modules/postcss-lab-function": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-4.2.1.tgz", - "integrity": "sha512-xuXll4isR03CrQsmxyz92LJB2xX9n+pZJ5jE9JgcnmsCammLyKdlzrBin+25dy6wIjfhJpKBAN80gsTlCgRk2w==", - "dev": true, - "dependencies": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-load-config": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", - "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", - "dev": true, - "dependencies": { - "lilconfig": "^2.0.5", - "yaml": "^1.10.2" - }, - "engines": { - "node": ">= 10" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": ">=8.0.9", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "postcss": { - "optional": true - }, - "ts-node": { - "optional": true - } - } - }, - "node_modules/postcss-loader": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.1.tgz", - "integrity": "sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==", - "dev": true, - "dependencies": { - "cosmiconfig": "^7.0.0", - "klona": "^2.0.5", - "semver": "^7.3.5" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "postcss": "^7.0.0 || ^8.0.1", - "webpack": "^5.0.0" - } - }, - "node_modules/postcss-loader/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/postcss-loader/node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/postcss-loader/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/postcss-logical": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-5.0.4.tgz", - "integrity": "sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==", - "dev": true, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "node_modules/postcss-media-minmax": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-5.0.0.tgz", - "integrity": "sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==", - "dev": true, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-merge-longhand": { - "version": "5.1.7", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", - "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0", - "stylehacks": "^5.1.1" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-merge-rules": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.3.tgz", - "integrity": "sha512-LbLd7uFC00vpOuMvyZop8+vvhnfRGpp2S+IMQKeuOZZapPRY4SMq5ErjQeHbHsjCUgJkRNrlU+LmxsKIqPKQlA==", - "dev": true, - "dependencies": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0", - "cssnano-utils": "^3.1.0", - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-font-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", - "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-gradients": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", - "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", - "dev": true, - "dependencies": { - "colord": "^2.9.1", - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-params": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", - "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", - "dev": true, - "dependencies": { - "browserslist": "^4.21.4", - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-selectors": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", - "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-modules-extract-imports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-local-by-default": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", - "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", - "dev": true, - "dependencies": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-scope": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", - "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.4" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", - "dev": true, - "dependencies": { - "icss-utils": "^5.0.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-nested": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.0.tgz", - "integrity": "sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.10" - }, - "engines": { - "node": ">=12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": "^8.2.14" - } - }, - "node_modules/postcss-nesting": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-10.2.0.tgz", - "integrity": "sha512-EwMkYchxiDiKUhlJGzWsD9b2zvq/r2SSubcRrgP+jujMXFzqvANLt16lJANC+5uZ6hjI7lpRmI6O8JIl+8l1KA==", - "dev": true, - "dependencies": { - "@csstools/selector-specificity": "^2.0.0", - "postcss-selector-parser": "^6.0.10" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-normalize": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize/-/postcss-normalize-10.0.1.tgz", - "integrity": "sha512-+5w18/rDev5mqERcG3W5GZNMJa1eoYYNGo8gB7tEwaos0ajk3ZXAI4mHGcNT47NE+ZnZD1pEpUOFLvltIwmeJA==", - "dev": true, - "dependencies": { - "@csstools/normalize.css": "*", - "postcss-browser-comments": "^4", - "sanitize.css": "*" - }, - "engines": { - "node": ">= 12" - }, - "peerDependencies": { - "browserslist": ">= 4", - "postcss": ">= 8" - } - }, - "node_modules/postcss-normalize-charset": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", - "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-display-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", - "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-positions": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", - "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-repeat-style": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", - "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-string": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", - "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-timing-functions": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", - "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-unicode": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", - "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", - "dev": true, - "dependencies": { - "browserslist": "^4.21.4", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", - "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", - "dev": true, - "dependencies": { - "normalize-url": "^6.0.1", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-whitespace": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", - "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-opacity-percentage": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/postcss-opacity-percentage/-/postcss-opacity-percentage-1.1.3.tgz", - "integrity": "sha512-An6Ba4pHBiDtyVpSLymUUERMo2cU7s+Obz6BTrS+gxkbnSBNKSuD0AVUc+CpBMrpVPKKfoVz0WQCX+Tnst0i4A==", - "dev": true, - "funding": [ - { - "type": "kofi", - "url": "https://ko-fi.com/mrcgrtz" - }, - { - "type": "liberapay", - "url": "https://liberapay.com/mrcgrtz" - } - ], - "engines": { - "node": "^12 || ^14 || >=16" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-ordered-values": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", - "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", - "dev": true, - "dependencies": { - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-overflow-shorthand": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-3.0.4.tgz", - "integrity": "sha512-otYl/ylHK8Y9bcBnPLo3foYFLL6a6Ak+3EQBPOTR7luMYCOsiVTUk1iLvNf6tVPNGXcoL9Hoz37kpfriRIFb4A==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-page-break": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-3.0.4.tgz", - "integrity": "sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==", - "dev": true, - "peerDependencies": { - "postcss": "^8" - } - }, - "node_modules/postcss-place": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-7.0.5.tgz", - "integrity": "sha512-wR8igaZROA6Z4pv0d+bvVrvGY4GVHihBCBQieXFY3kuSuMyOmEnnfFzHl/tQuqHZkfkIVBEbDvYcFfHmpSet9g==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-preset-env": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-7.8.3.tgz", - "integrity": "sha512-T1LgRm5uEVFSEF83vHZJV2z19lHg4yJuZ6gXZZkqVsqv63nlr6zabMH3l4Pc01FQCyfWVrh2GaUeCVy9Po+Aag==", - "dev": true, - "dependencies": { - "@csstools/postcss-cascade-layers": "^1.1.1", - "@csstools/postcss-color-function": "^1.1.1", - "@csstools/postcss-font-format-keywords": "^1.0.1", - "@csstools/postcss-hwb-function": "^1.0.2", - "@csstools/postcss-ic-unit": "^1.0.1", - "@csstools/postcss-is-pseudo-class": "^2.0.7", - "@csstools/postcss-nested-calc": "^1.0.0", - "@csstools/postcss-normalize-display-values": "^1.0.1", - "@csstools/postcss-oklab-function": "^1.1.1", - "@csstools/postcss-progressive-custom-properties": "^1.3.0", - "@csstools/postcss-stepped-value-functions": "^1.0.1", - "@csstools/postcss-text-decoration-shorthand": "^1.0.0", - "@csstools/postcss-trigonometric-functions": "^1.0.2", - "@csstools/postcss-unset-value": "^1.0.2", - "autoprefixer": "^10.4.13", - "browserslist": "^4.21.4", - "css-blank-pseudo": "^3.0.3", - "css-has-pseudo": "^3.0.4", - "css-prefers-color-scheme": "^6.0.3", - "cssdb": "^7.1.0", - "postcss-attribute-case-insensitive": "^5.0.2", - "postcss-clamp": "^4.1.0", - "postcss-color-functional-notation": "^4.2.4", - "postcss-color-hex-alpha": "^8.0.4", - "postcss-color-rebeccapurple": "^7.1.1", - "postcss-custom-media": "^8.0.2", - "postcss-custom-properties": "^12.1.10", - "postcss-custom-selectors": "^6.0.3", - "postcss-dir-pseudo-class": "^6.0.5", - "postcss-double-position-gradients": "^3.1.2", - "postcss-env-function": "^4.0.6", - "postcss-focus-visible": "^6.0.4", - "postcss-focus-within": "^5.0.4", - "postcss-font-variant": "^5.0.0", - "postcss-gap-properties": "^3.0.5", - "postcss-image-set-function": "^4.0.7", - "postcss-initial": "^4.0.1", - "postcss-lab-function": "^4.2.1", - "postcss-logical": "^5.0.4", - "postcss-media-minmax": "^5.0.0", - "postcss-nesting": "^10.2.0", - "postcss-opacity-percentage": "^1.1.2", - "postcss-overflow-shorthand": "^3.0.4", - "postcss-page-break": "^3.0.4", - "postcss-place": "^7.0.5", - "postcss-pseudo-class-any-link": "^7.1.6", - "postcss-replace-overflow-wrap": "^4.0.0", - "postcss-selector-not": "^6.0.1", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-pseudo-class-any-link": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-7.1.6.tgz", - "integrity": "sha512-9sCtZkO6f/5ML9WcTLcIyV1yz9D1rf0tWc+ulKcvV30s0iZKS/ONyETvoWsr6vnrmW+X+KmuK3gV/w5EWnT37w==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.10" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-reduce-initial": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.1.tgz", - "integrity": "sha512-//jeDqWcHPuXGZLoolFrUXBDyuEGbr9S2rMo19bkTIjBQ4PqkaO+oI8wua5BOUxpfi97i3PCoInsiFIEBfkm9w==", - "dev": true, - "dependencies": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-reduce-transforms": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", - "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-replace-overflow-wrap": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz", - "integrity": "sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==", - "dev": true, - "peerDependencies": { - "postcss": "^8.0.3" - } - }, - "node_modules/postcss-selector-not": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-6.0.1.tgz", - "integrity": "sha512-1i9affjAe9xu/y9uqWH+tD4r6/hDaXJruk8xn2x1vzxC2U3J3LKO3zJW4CyxlNhA56pADJ/djpEwpH1RClI2rQ==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.10" - }, - "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, - "peerDependencies": { - "postcss": "^8.2" - } - }, - "node_modules/postcss-selector-parser": { - "version": "6.0.11", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz", - "integrity": "sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==", - "dev": true, - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-svgo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", - "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0", - "svgo": "^2.7.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-svgo/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/postcss-svgo/node_modules/css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "dev": true, - "dependencies": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/postcss-svgo/node_modules/mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", - "dev": true - }, - "node_modules/postcss-svgo/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss-svgo/node_modules/svgo": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", - "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", - "dev": true, - "dependencies": { - "@trysound/sax": "0.2.0", - "commander": "^7.2.0", - "css-select": "^4.1.3", - "css-tree": "^1.1.3", - "csso": "^4.2.0", - "picocolors": "^1.0.0", - "stable": "^0.1.8" - }, - "bin": { - "svgo": "bin/svgo" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/postcss-unique-selectors": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", - "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" - }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8.0" } }, - "node_modules/present": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/present/-/present-0.0.6.tgz", - "integrity": "sha512-8HGGcsH0xefDkhtWzXhigzieKtervWPQgyX8RtQD3cKr4wU307j8XANVSaZLxbR0+1EBonCJNOdUrQ7hbk3Kiw==" - }, - "node_modules/pretty-bytes": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", - "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pretty-error": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", - "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", - "dev": true, - "dependencies": { - "lodash": "^4.17.20", - "renderkid": "^3.0.0" - } - }, - "node_modules/pretty-format": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", - "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/pretty-format/node_modules/react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true - }, - "node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "node_modules/promise": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", - "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", - "dev": true, - "dependencies": { - "asap": "~2.0.6" - } - }, - "node_modules/promise-polyfill": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-3.1.0.tgz", - "integrity": "sha512-t20OwHJ4ZOUj5fV+qms67oczphAVkRC6Rrjcrne+V1FJkQMym7n69xJmYyXHulm9OUQ0Ie5KSzg0QhOYgaxy+w==" - }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/prop-types": { "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "license": "MIT", "dependencies": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", "react-is": "^16.13.1" } }, - "node_modules/prop-types-extra": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/prop-types-extra/-/prop-types-extra-1.1.1.tgz", - "integrity": "sha512-59+AHNnHYCdiC+vMwY52WmvP5dM3QLeoumYuEyceQDi9aEhtwN9zIQ2ZNo25sMyXnbh32h+P1ezDsUpUH3JAew==", - "dependencies": { - "react-is": "^16.3.2", - "warning": "^4.0.0" - }, - "peerDependencies": { - "react": ">=0.14.0" - } - }, - "node_modules/prop-types-extra/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, "node_modules/prop-types/node_modules/react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "license": "MIT" }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dev": true, - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/proxy-addr/node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", - "dev": true + "node_modules/property-expr": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/property-expr/-/property-expr-2.0.6.tgz", + "integrity": "sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA==", + "license": "MIT" }, "node_modules/punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, - "node_modules/q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", - "dev": true, - "engines": { - "node": ">=0.6.0", - "teleport": ">=0.2.0" - } - }, - "node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dev": true, - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/quad-indices": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/quad-indices/-/quad-indices-2.0.1.tgz", - "integrity": "sha512-6jtmCsEbGAh5npThXrBaubbTjPcF0rMbn57XCJVI7LkW8PUT56V+uIrRCCWCn85PSgJC9v8Pm5tnJDwmOBewvA==", - "dependencies": { - "an-array": "^1.0.0", - "dtype": "^2.0.0", - "is-buffer": "^1.0.2" - } - }, - "node_modules/query-string": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", - "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", - "dependencies": { - "decode-uri-component": "^0.2.0", - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", - "dev": true - }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, "funding": [ { "type": "github", @@ -16067,82 +4196,8 @@ "type": "consulting", "url": "https://feross.org/support" } - ] - }, - "node_modules/quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/raf": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", - "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", - "dev": true, - "dependencies": { - "performance-now": "^2.1.0" - } - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "dev": true, - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/raw-body/node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/raw-body/node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } + ], + "license": "MIT" }, "node_modules/react": { "version": "18.3.1", @@ -16156,179 +4211,6 @@ "node": ">=0.10.0" } }, - "node_modules/react-app-polyfill": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/react-app-polyfill/-/react-app-polyfill-3.0.0.tgz", - "integrity": "sha512-sZ41cxiU5llIB003yxxQBYrARBqe0repqPTTYBTmMqTz9szeBbE37BehCE891NZsmdZqqP+xWKdT3eo3vOzN8w==", - "dev": true, - "dependencies": { - "core-js": "^3.19.2", - "object-assign": "^4.1.1", - "promise": "^8.1.0", - "raf": "^3.4.1", - "regenerator-runtime": "^0.13.9", - "whatwg-fetch": "^3.6.2" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/react-bootstrap": { - "version": "2.10.2", - "resolved": "https://registry.npmjs.org/react-bootstrap/-/react-bootstrap-2.10.2.tgz", - "integrity": "sha512-UvB7mRqQjivdZNxJNEA2yOQRB7L9N43nBnKc33K47+cH90/ujmnMwatTCwQLu83gLhrzAl8fsa6Lqig/KLghaA==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.22.5", - "@restart/hooks": "^0.4.9", - "@restart/ui": "^1.6.8", - "@types/react-transition-group": "^4.4.6", - "classnames": "^2.3.2", - "dom-helpers": "^5.2.1", - "invariant": "^2.2.4", - "prop-types": "^15.8.1", - "prop-types-extra": "^1.1.0", - "react-transition-group": "^4.4.5", - "uncontrollable": "^7.2.1", - "warning": "^4.0.3" - }, - "peerDependencies": { - "@types/react": ">=16.14.8", - "react": ">=16.14.0", - "react-dom": ">=16.14.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/react-data-table-component": { - "version": "7.5.3", - "resolved": "https://registry.npmjs.org/react-data-table-component/-/react-data-table-component-7.5.3.tgz", - "integrity": "sha512-JhatRTgThAAa1HobPaPmkNPsjLT6+fnMIdtcXRCy+0bSYN7XJnTgob9Qyi4bjHh/8tMPTHtxZCV/TKiPwRvFMA==", - "dependencies": { - "deepmerge": "^4.2.2" - }, - "peerDependencies": { - "react": ">= 16.8.3", - "styled-components": ">= 4" - } - }, - "node_modules/react-dev-utils": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz", - "integrity": "sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.16.0", - "address": "^1.1.2", - "browserslist": "^4.18.1", - "chalk": "^4.1.2", - "cross-spawn": "^7.0.3", - "detect-port-alt": "^1.1.6", - "escape-string-regexp": "^4.0.0", - "filesize": "^8.0.6", - "find-up": "^5.0.0", - "fork-ts-checker-webpack-plugin": "^6.5.0", - "global-modules": "^2.0.0", - "globby": "^11.0.4", - "gzip-size": "^6.0.0", - "immer": "^9.0.7", - "is-root": "^2.1.0", - "loader-utils": "^3.2.0", - "open": "^8.4.0", - "pkg-up": "^3.1.0", - "prompts": "^2.4.2", - "react-error-overlay": "^6.0.11", - "recursive-readdir": "^2.2.2", - "shell-quote": "^1.7.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/react-dev-utils/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/react-dev-utils/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/react-dev-utils/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/react-dev-utils/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/react-dev-utils/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/react-dev-utils/node_modules/loader-utils": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", - "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==", - "dev": true, - "engines": { - "node": ">= 12.13.0" - } - }, - "node_modules/react-dev-utils/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/react-dom": { "version": "18.3.1", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", @@ -16342,230 +4224,57 @@ "react": "^18.3.1" } }, - "node_modules/react-error-overlay": { - "version": "6.0.11", - "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz", - "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==", - "dev": true - }, - "node_modules/react-force-graph": { - "version": "1.43.0", - "resolved": "https://registry.npmjs.org/react-force-graph/-/react-force-graph-1.43.0.tgz", - "integrity": "sha512-g59ZWGrR6hkokY8RMO6FQHbltaIZ3+AGf9mrQs+s1+J26Sc2Wc6aro4cLW8PTHMIHgX/zml44yp60gRbzdFSMw==", - "dependencies": { - "3d-force-graph": "1", - "3d-force-graph-ar": "1", - "3d-force-graph-vr": "2", - "force-graph": "1", - "prop-types": "15", - "react-kapsule": "2" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "react": "*" - } + "node_modules/react-fast-compare": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-2.0.4.tgz", + "integrity": "sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw==", + "license": "MIT" }, "node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" - }, - "node_modules/react-kapsule": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/react-kapsule/-/react-kapsule-2.2.6.tgz", - "integrity": "sha512-OUfvKeXSwpwVcGhyUWK6XaStEAA/KWFvlRAo/maS+GWhp7X0mSMbuZ/5jBACXhTFNGqWHf5yyt+LURiWA77HfA==", - "dependencies": { - "fromentries": "^1.3.2", - "jerrypick": "^1.0.5" - }, - "peerDependencies": { - "react": ">=16.13.1" - } - }, - "node_modules/react-lifecycles-compat": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", - "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "license": "MIT" }, "node_modules/react-refresh": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.11.0.tgz", - "integrity": "sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==", + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz", + "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/react-router": { - "version": "6.23.1", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.23.1.tgz", - "integrity": "sha512-fzcOaRF69uvqbbM7OhvQyBTFDVrrGlsFdS3AL+1KfIBtGETibHzi3FkoTRyiDJnWNc2VxrfvR+657ROHjaNjqQ==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.0.1.tgz", + "integrity": "sha512-WVAhv9oWCNsja5AkK6KLpXJDSJCQizOIyOd4vvB/+eHGbYx5vkhcmcmwWjQ9yqkRClogi+xjEg9fNEOd5EX/tw==", "license": "MIT", "dependencies": { - "@remix-run/router": "1.16.1" + "@types/cookie": "^0.6.0", + "cookie": "^1.0.1", + "set-cookie-parser": "^2.6.0", + "turbo-stream": "2.4.0" }, "engines": { - "node": ">=14.0.0" + "node": ">=20.0.0" }, "peerDependencies": { - "react": ">=16.8" - } - }, - "node_modules/react-router-dom": { - "version": "6.23.1", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.23.1.tgz", - "integrity": "sha512-utP+K+aSTtEdbWpC+4gxhdlPFwuEfDKq8ZrPFU65bbRJY+l706qjR7yaidBpo3MSeA/fzwbXWbKBI6ftOnP3OQ==", - "license": "MIT", - "dependencies": { - "@remix-run/router": "1.16.1", - "react-router": "6.23.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "react": ">=16.8", - "react-dom": ">=16.8" - } - }, - "node_modules/react-scripts": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-5.0.1.tgz", - "integrity": "sha512-8VAmEm/ZAwQzJ+GOMLbBsTdDKOpuZh7RPs0UymvBR2vRk4iZWCskjbFnxqjrzoIvlNNRZ3QJFx6/qDSi6zSnaQ==", - "dev": true, - "dependencies": { - "@babel/core": "^7.16.0", - "@pmmmwh/react-refresh-webpack-plugin": "^0.5.3", - "@svgr/webpack": "^5.5.0", - "babel-jest": "^27.4.2", - "babel-loader": "^8.2.3", - "babel-plugin-named-asset-import": "^0.3.8", - "babel-preset-react-app": "^10.0.1", - "bfj": "^7.0.2", - "browserslist": "^4.18.1", - "camelcase": "^6.2.1", - "case-sensitive-paths-webpack-plugin": "^2.4.0", - "css-loader": "^6.5.1", - "css-minimizer-webpack-plugin": "^3.2.0", - "dotenv": "^10.0.0", - "dotenv-expand": "^5.1.0", - "eslint": "^8.3.0", - "eslint-config-react-app": "^7.0.1", - "eslint-webpack-plugin": "^3.1.1", - "file-loader": "^6.2.0", - "fs-extra": "^10.0.0", - "html-webpack-plugin": "^5.5.0", - "identity-obj-proxy": "^3.0.0", - "jest": "^27.4.3", - "jest-resolve": "^27.4.2", - "jest-watch-typeahead": "^1.0.0", - "mini-css-extract-plugin": "^2.4.5", - "postcss": "^8.4.4", - "postcss-flexbugs-fixes": "^5.0.2", - "postcss-loader": "^6.2.1", - "postcss-normalize": "^10.0.1", - "postcss-preset-env": "^7.0.1", - "prompts": "^2.4.2", - "react-app-polyfill": "^3.0.0", - "react-dev-utils": "^12.0.1", - "react-refresh": "^0.11.0", - "resolve": "^1.20.0", - "resolve-url-loader": "^4.0.0", - "sass-loader": "^12.3.0", - "semver": "^7.3.5", - "source-map-loader": "^3.0.0", - "style-loader": "^3.3.1", - "tailwindcss": "^3.0.2", - "terser-webpack-plugin": "^5.2.5", - "webpack": "^5.64.4", - "webpack-dev-server": "^4.6.0", - "webpack-manifest-plugin": "^4.0.2", - "workbox-webpack-plugin": "^6.4.1" - }, - "bin": { - "react-scripts": "bin/react-scripts.js" - }, - "engines": { - "node": ">=14.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" - }, - "peerDependencies": { - "react": ">= 16", - "typescript": "^3.2.1 || ^4" + "react": ">=18", + "react-dom": ">=18" }, "peerDependenciesMeta": { - "typescript": { + "react-dom": { "optional": true } } }, - "node_modules/react-scripts/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/react-scripts/node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/react-scripts/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/react-sizeme": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/react-sizeme/-/react-sizeme-3.0.2.tgz", - "integrity": "sha512-xOIAOqqSSmKlKFJLO3inBQBdymzDuXx4iuwkNcJmC96jeiOg5ojByvL+g3MW9LPEsojLbC6pf68zOfobK8IPlw==", - "dependencies": { - "element-resize-detector": "^1.2.2", - "invariant": "^2.2.4", - "shallowequal": "^1.1.0", - "throttle-debounce": "^3.0.1" - } - }, - "node_modules/react-smooth": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/react-smooth/-/react-smooth-4.0.1.tgz", - "integrity": "sha512-OE4hm7XqR0jNOq3Qmk9mFLyd6p2+j6bvbPJ7qlB7+oo0eNcL2l7WQzG6MBnT3EXY6xzkLMUBec3AfewJdA0J8w==", - "license": "MIT", - "dependencies": { - "fast-equals": "^5.0.1", - "prop-types": "^15.8.1", - "react-transition-group": "^4.4.5" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, "node_modules/react-transition-group": { "version": "4.4.5", "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", + "license": "BSD-3-Clause", "dependencies": { "@babel/runtime": "^7.5.5", "dom-helpers": "^5.0.1", @@ -16577,253 +4286,25 @@ "react-dom": ">=16.6.0" } }, - "node_modules/read-cache": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", - "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", - "dev": true, - "dependencies": { - "pify": "^2.3.0" - } - }, - "node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/recharts": { - "version": "2.12.7", - "resolved": "https://registry.npmjs.org/recharts/-/recharts-2.12.7.tgz", - "integrity": "sha512-hlLJMhPQfv4/3NBSAyq3gzGg4h2v69RJh6KU7b3pXYNNAELs9kEoXOjbkxdXpALqKBoVmVptGfLpxdaVYqjmXQ==", - "license": "MIT", - "dependencies": { - "clsx": "^2.0.0", - "eventemitter3": "^4.0.1", - "lodash": "^4.17.21", - "react-is": "^16.10.2", - "react-smooth": "^4.0.0", - "recharts-scale": "^0.4.4", - "tiny-invariant": "^1.3.1", - "victory-vendor": "^36.6.8" - }, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "react": "^16.0.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/recharts-scale": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/recharts-scale/-/recharts-scale-0.4.5.tgz", - "integrity": "sha512-kivNFO+0OcUNu7jQquLXAxz1FIwZj8nrj+YkOKc5694NbjCvcT6aSZiIzNzd2Kul4o4rTto8QVR9lMNtxD4G1w==", - "dependencies": { - "decimal.js-light": "^2.4.1" - } - }, - "node_modules/recharts/node_modules/clsx": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", - "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/recharts/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, - "node_modules/recursive-readdir": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", - "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", - "dev": true, - "dependencies": { - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" - }, - "node_modules/regenerate-unicode-properties": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", - "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", - "dependencies": { - "regenerate": "^1.4.2" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", - "dev": true + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "license": "MIT" }, - "node_modules/regenerator-transform": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", - "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, - "node_modules/regex-parser": { - "version": "2.2.11", - "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz", - "integrity": "sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==", - "dev": true - }, - "node_modules/regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/regexpu-core": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.2.tgz", - "integrity": "sha512-T0+1Zp2wjF/juXMrMxHxidqGYn8U4R+zleSJhX9tQ1PUsS8a9UtYfbsF9LdiVgNX3kiX8RNaKM42nfSgvFJjmw==", - "dependencies": { - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsgen": "^0.7.1", - "regjsparser": "^0.9.1", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regjsgen": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.7.1.tgz", - "integrity": "sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==" - }, - "node_modules/regjsparser": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", - "dependencies": { - "jsesc": "~0.5.0" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/regjsparser/node_modules/jsesc": { + "node_modules/remove-accents": { "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/renderkid": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", - "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", - "dev": true, - "dependencies": { - "css-select": "^4.1.3", - "dom-converter": "^0.2.0", - "htmlparser2": "^6.1.0", - "lodash": "^4.17.21", - "strip-ansi": "^6.0.1" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "dev": true + "resolved": "https://registry.npmjs.org/remove-accents/-/remove-accents-0.5.0.tgz", + "integrity": "sha512-8g3/Otx1eJaVD12e31UbJj1YzdtVvzH85HV7t+9MJYk/u3XmkOUJ5Ys9wQrf9PCPK8+xn4ymzqYCiZl6QWKn+A==", + "license": "MIT" }, "node_modules/resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "license": "MIT", "dependencies": { - "is-core-module": "^2.9.0", + "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -16834,215 +4315,75 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-cwd/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "license": "MIT", "engines": { "node": ">=4" } }, - "node_modules/resolve-url-loader": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-4.0.0.tgz", - "integrity": "sha512-05VEMczVREcbtT7Bz+C+96eUO5HDNvdthIiMB34t7FcF8ehcu4wC0sSgPUubs3XW2Q3CNLJk/BJrCU9wVRymiA==", - "dev": true, - "dependencies": { - "adjust-sourcemap-loader": "^4.0.0", - "convert-source-map": "^1.7.0", - "loader-utils": "^2.0.0", - "postcss": "^7.0.35", - "source-map": "0.6.1" - }, - "engines": { - "node": ">=8.9" - }, - "peerDependencies": { - "rework": "1.0.1", - "rework-visit": "1.0.0" - }, - "peerDependenciesMeta": { - "rework": { - "optional": true - }, - "rework-visit": { - "optional": true - } - } - }, - "node_modules/resolve-url-loader/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/resolve-url-loader/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/resolve-url-loader/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve.exports": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.1.tgz", - "integrity": "sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, "node_modules/reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "license": "MIT", "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" } }, - "node_modules/rimraf": { + "node_modules/robust-predicates": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } + "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz", + "integrity": "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==", + "license": "Unlicense" }, "node_modules/rollup": { - "version": "2.79.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", - "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", + "version": "4.27.3", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.27.3.tgz", + "integrity": "sha512-SLsCOnlmGt9VoZ9Ek8yBK8tAdmPHeppkw+Xa7yDlCEhDTvwYei03JlWo1fdc7YTfLZ4tD8riJCUyAgTbszk1fQ==", "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.6" + }, "bin": { "rollup": "dist/bin/rollup" }, "engines": { - "node": ">=10.0.0" + "node": ">=18.0.0", + "npm": ">=8.0.0" }, "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.27.3", + "@rollup/rollup-android-arm64": "4.27.3", + "@rollup/rollup-darwin-arm64": "4.27.3", + "@rollup/rollup-darwin-x64": "4.27.3", + "@rollup/rollup-freebsd-arm64": "4.27.3", + "@rollup/rollup-freebsd-x64": "4.27.3", + "@rollup/rollup-linux-arm-gnueabihf": "4.27.3", + "@rollup/rollup-linux-arm-musleabihf": "4.27.3", + "@rollup/rollup-linux-arm64-gnu": "4.27.3", + "@rollup/rollup-linux-arm64-musl": "4.27.3", + "@rollup/rollup-linux-powerpc64le-gnu": "4.27.3", + "@rollup/rollup-linux-riscv64-gnu": "4.27.3", + "@rollup/rollup-linux-s390x-gnu": "4.27.3", + "@rollup/rollup-linux-x64-gnu": "4.27.3", + "@rollup/rollup-linux-x64-musl": "4.27.3", + "@rollup/rollup-win32-arm64-msvc": "4.27.3", + "@rollup/rollup-win32-ia32-msvc": "4.27.3", + "@rollup/rollup-win32-x64-msvc": "4.27.3", "fsevents": "~2.3.2" } }, - "node_modules/rollup-plugin-terser": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", - "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", - "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.10.4", - "jest-worker": "^26.2.1", - "serialize-javascript": "^4.0.0", - "terser": "^5.0.0" - }, - "peerDependencies": { - "rollup": "^2.0.0" - } - }, - "node_modules/rollup-plugin-terser/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/rollup-plugin-terser/node_modules/jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", - "dev": true, - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/rollup-plugin-terser/node_modules/serialize-javascript": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", - "dev": true, - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/rollup-plugin-terser/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, "funding": [ { "type": "github", @@ -17057,110 +4398,11 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "queue-microtask": "^1.2.2" } }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/safe-regex-test": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-regex": "^1.1.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "node_modules/sanitize.css": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/sanitize.css/-/sanitize.css-13.0.0.tgz", - "integrity": "sha512-ZRwKbh/eQ6w9vmTjkuG0Ioi3HBwPFce0O+v//ve+aOq1oeCy7jMV2qzzAlpsNuqpqCBjjriM1lbtZbF/Q8jVyA==", - "dev": true - }, - "node_modules/sass-loader": { - "version": "12.6.0", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-12.6.0.tgz", - "integrity": "sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA==", - "dev": true, - "dependencies": { - "klona": "^2.0.4", - "neo-async": "^2.6.2" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "fibers": ">= 3.1.0", - "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0", - "sass": "^1.3.0", - "sass-embedded": "*", - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "fibers": { - "optional": true - }, - "node-sass": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - } - } - }, - "node_modules/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" - }, - "node_modules/saxes": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", - "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", - "dev": true, - "dependencies": { - "xmlchars": "^2.2.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/scheduler": { "version": "0.23.2", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", @@ -17170,212 +4412,28 @@ "loose-envify": "^1.1.0" } }, - "node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", - "dev": true - }, - "node_modules/selfsigned": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", - "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", - "dev": true, - "dependencies": { - "node-forge": "^1" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } }, - "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "dev": true, - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "node_modules/serialize-javascript": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", - "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", - "dev": true, - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", - "dev": true, - "dependencies": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/serve-index/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/serve-index/node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", - "dev": true, - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "dev": true - }, - "node_modules/serve-index/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/serve-index/node_modules/setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "dev": true - }, - "node_modules/serve-index/node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "dev": true, - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true - }, - "node_modules/shallowequal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", - "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" + "node_modules/set-cookie-parser": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz", + "integrity": "sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==", + "license": "MIT" }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" }, @@ -17387,406 +4445,37 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/shell-quote": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.0.tgz", - "integrity": "sha512-QHsz8GgQIGKlRi24yFc6a6lN69Idnx634w49ay6+jA5yFh7a1UY+4Rp6HPx/L/1zcEDPEij8cIsiqR6bQsE5VQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "node_modules/simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/simple-get": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.2.tgz", - "integrity": "sha512-Ijd/rV5o+mSBBs4F/x9oDPtTx9Zb6X9brmnXvMW4J7IR15ngi9q5xxqWBKU744jTZiaXtxaPL7uHG6vtN8kUkw==", - "dependencies": { - "decompress-response": "^3.3.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/sockjs": { - "version": "0.3.24", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", - "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", - "dev": true, - "dependencies": { - "faye-websocket": "^0.11.3", - "uuid": "^8.3.2", - "websocket-driver": "^0.7.4" - } - }, - "node_modules/source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", - "dev": true - }, "node_modules/source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, - "node_modules/source-map-loader": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-3.0.2.tgz", - "integrity": "sha512-BokxPoLjyl3iOrgkWaakaxqnelAJSS+0V+De0kKIq6lyWrXuiPgYTGp6z3iHmqljKAaLXwZa+ctD8GccRJeVvg==", - "dev": true, - "dependencies": { - "abab": "^2.0.5", - "iconv-lite": "^0.6.3", - "source-map-js": "^1.0.1" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/source-map-support/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", - "deprecated": "Please use @jridgewell/sourcemap-codec instead", - "dev": true - }, - "node_modules/spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", - "dev": true, - "dependencies": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", - "dev": true, - "dependencies": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true - }, - "node_modules/stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", - "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility", - "dev": true - }, - "node_modules/stack-utils": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", - "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/stack-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/stackframe": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", - "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==", - "dev": true - }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/stop-iteration-iterator": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", - "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", - "dependencies": { - "internal-slot": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/strict-uri-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", - "integrity": "sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dev": true, - "dependencies": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/string-natural-compare": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/string-natural-compare/-/string-natural-compare-3.0.1.tgz", - "integrity": "sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw==" - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/string.prototype.matchall": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", - "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.4.3", - "side-channel": "^1.0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", - "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", - "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/stringify-object": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", - "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", - "dev": true, - "dependencies": { - "get-own-enumerable-property-symbols": "^3.0.0", - "is-obj": "^1.0.1", - "is-regexp": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-2.0.1.tgz", - "integrity": "sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -17794,126 +4483,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/style-loader": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.1.tgz", - "integrity": "sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ==", - "dev": true, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/styled-components": { - "version": "5.3.6", - "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-5.3.6.tgz", - "integrity": "sha512-hGTZquGAaTqhGWldX7hhfzjnIYBZ0IXQXkCYdvF1Sq3DsUaLx6+NTHC5Jj1ooM2F68sBiVz3lvhfwQs/S3l6qg==", - "hasInstallScript": true, - "dependencies": { - "@babel/helper-module-imports": "^7.0.0", - "@babel/traverse": "^7.4.5", - "@emotion/is-prop-valid": "^1.1.0", - "@emotion/stylis": "^0.8.4", - "@emotion/unitless": "^0.7.4", - "babel-plugin-styled-components": ">= 1.12.0", - "css-to-react-native": "^3.0.0", - "hoist-non-react-statics": "^3.0.0", - "shallowequal": "^1.1.0", - "supports-color": "^5.5.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/styled-components" - }, - "peerDependencies": { - "react": ">= 16.8.0", - "react-dom": ">= 16.8.0", - "react-is": ">= 16.8.0" - } - }, - "node_modules/styled-components/node_modules/@emotion/unitless": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz", - "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==" - }, - "node_modules/stylehacks": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", - "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", - "dev": true, - "dependencies": { - "browserslist": "^4.21.4", - "postcss-selector-parser": "^6.0.4" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, "node_modules/stylis": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.1.3.tgz", - "integrity": "sha512-GP6WDNWf+o403jrEp9c5jibKavrtLW+/qYGhFxFrG8maXhwTBI7gLLhiBb0o7uFccWN+EOS9aMO6cGHWAO07OA==" - }, - "node_modules/super-animejs": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/super-animejs/-/super-animejs-3.1.0.tgz", - "integrity": "sha512-6MFAFJDRuvwkovxQZPruuyHinTa4rgj4hNLOndjcYYhZLckoXtVRY9rJPuq8p6c/tgZJrFYEAYAfJ2/hhNtUCA==" - }, - "node_modules/super-three": { - "version": "0.147.1", - "resolved": "https://registry.npmjs.org/super-three/-/super-three-0.147.1.tgz", - "integrity": "sha512-H8yhlXqjscWpqYLhPQ/h3EfElNBxe3Ktp1tGVp13vBjIxF5sMVkAo2NpIDXkY8+MVhuTrA0ZN42IMNPdOKwKLg==" + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", + "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==", + "license": "MIT" }, "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/supports-hyperlinks": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", - "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-hyperlinks/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-hyperlinks/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -17925,6 +4506,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -17932,461 +4514,24 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/svg-parser": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", - "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==", - "dev": true - }, - "node_modules/svgo": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.0.2.tgz", - "integrity": "sha512-Z706C1U2pb1+JGP48fbazf3KxHrWOsLme6Rv7imFBn5EnuanDW1GPaA/P1/dvObE670JDePC3mnj0k0B7P0jjQ==", - "dependencies": { - "@trysound/sax": "0.2.0", - "commander": "^7.2.0", - "css-select": "^5.1.0", - "css-tree": "^2.2.1", - "csso": "^5.0.5", - "picocolors": "^1.0.0" - }, - "bin": { - "svgo": "bin/svgo" - }, - "engines": { - "node": ">=14.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/svgo" - } - }, - "node_modules/svgo/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "engines": { - "node": ">= 10" - } - }, - "node_modules/svgo/node_modules/css-select": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", - "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/svgo/node_modules/css-tree": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", - "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", - "dependencies": { - "mdn-data": "2.0.28", - "source-map-js": "^1.0.1" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/svgo/node_modules/csso": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", - "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", - "dependencies": { - "css-tree": "~2.2.0" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/svgo/node_modules/dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/svgo/node_modules/domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "dependencies": { - "domelementtype": "^2.3.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/svgo/node_modules/domutils": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.0.1.tgz", - "integrity": "sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==", - "dependencies": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.1" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/svgo/node_modules/entities": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz", - "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/svgo/node_modules/mdn-data": { - "version": "2.0.28", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", - "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==" - }, - "node_modules/symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "dev": true - }, - "node_modules/tailwindcss": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.2.4.tgz", - "integrity": "sha512-AhwtHCKMtR71JgeYDaswmZXhPcW9iuI9Sp2LvZPo9upDZ7231ZJ7eA9RaURbhpXGVlrjX4cFNlB4ieTetEb7hQ==", - "dev": true, - "dependencies": { - "arg": "^5.0.2", - "chokidar": "^3.5.3", - "color-name": "^1.1.4", - "detective": "^5.2.1", - "didyoumean": "^1.2.2", - "dlv": "^1.1.3", - "fast-glob": "^3.2.12", - "glob-parent": "^6.0.2", - "is-glob": "^4.0.3", - "lilconfig": "^2.0.6", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "object-hash": "^3.0.0", - "picocolors": "^1.0.0", - "postcss": "^8.4.18", - "postcss-import": "^14.1.0", - "postcss-js": "^4.0.0", - "postcss-load-config": "^3.1.4", - "postcss-nested": "6.0.0", - "postcss-selector-parser": "^6.0.10", - "postcss-value-parser": "^4.2.0", - "quick-lru": "^5.1.1", - "resolve": "^1.22.1" - }, - "bin": { - "tailwind": "lib/cli.js", - "tailwindcss": "lib/cli.js" - }, - "engines": { - "node": ">=12.13.0" - }, - "peerDependencies": { - "postcss": "^8.0.9" - } - }, - "node_modules/tailwindcss/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/temp-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", - "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/tempy": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.6.0.tgz", - "integrity": "sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==", - "dev": true, - "dependencies": { - "is-stream": "^2.0.0", - "temp-dir": "^2.0.0", - "type-fest": "^0.16.0", - "unique-string": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/tempy/node_modules/type-fest": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", - "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/terminal-link": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", - "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", - "dev": true, - "dependencies": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/terser": { - "version": "5.16.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.2.tgz", - "integrity": "sha512-JKuM+KvvWVqT7muHVyrwv7FVRPnmHDwF6XwoIxdbF5Witi0vu99RYpxDexpJndXt3jbZZmmWr2/mQa6HvSNdSg==", - "dev": true, - "dependencies": { - "@jridgewell/source-map": "^0.3.2", - "acorn": "^8.5.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser-webpack-plugin": { - "version": "5.3.6", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz", - "integrity": "sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.14", - "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.0", - "terser": "^5.14.1" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "uglify-js": { - "optional": true - } - } - }, - "node_modules/terser/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" - }, - "node_modules/three": { - "version": "0.152.2", - "resolved": "https://registry.npmjs.org/three/-/three-0.152.2.tgz", - "integrity": "sha512-Ff9zIpSfkkqcBcpdiFo2f35vA9ZucO+N8TNacJOqaEE6DrB0eufItVMib8bK8Pcju/ZNT6a7blE1GhTpkdsILw==" - }, - "node_modules/three-bmfont-text": { - "version": "2.4.0", - "resolved": "git+ssh://git@github.com/dmarcos/three-bmfont-text.git#21d017046216e318362c48abd1a48bddfb6e0733", - "integrity": "sha512-lIMa1n+QKNU1f/LZgtS1oUGpoop3MuVXrUr5ybZOUR3+Jk//zjqScnQpHml6MWyvZzL8A5/1Hd8Tsqd3M1kudA==", - "license": "MIT", - "dependencies": { - "array-shuffle": "^1.0.1", - "inherits": "^2.0.1", - "layout-bmfont-text": "^1.2.0", - "nice-color-palettes": "^1.0.1", - "object-assign": "^4.0.1", - "quad-indices": "^2.0.1", - "three-buffer-vertex-data": "dmarcos/three-buffer-vertex-data#69378fc58daf27d3b1d930df9f233473e4a4818c" - } - }, - "node_modules/three-buffer-vertex-data": { - "version": "1.1.0", - "resolved": "git+ssh://git@github.com/dmarcos/three-buffer-vertex-data.git#69378fc58daf27d3b1d930df9f233473e4a4818c", - "integrity": "sha512-ZPCCbGfueRzd2/YwH136UnVN+N11Mvxu7uPaEzIdtuk0m5HPs1LGXOM5hOkpxamjvqSC6MDJ3nd11grGi7sMKw==", - "license": "MIT", - "dependencies": { - "flatten-vertex-data": "^1.0.0" - } - }, - "node_modules/three-forcegraph": { - "version": "1.41.1", - "resolved": "https://registry.npmjs.org/three-forcegraph/-/three-forcegraph-1.41.1.tgz", - "integrity": "sha512-piGaogBmZBLV4dENYdFA5l6KwDjoiJfzVvKU+kAQe7/TYreSwYONwSnRFemwje5nilOkdJmdw1qjriJbhDsOmw==", - "dependencies": { - "accessor-fn": "1", - "d3-array": "1 - 3", - "d3-force-3d": "2 - 3", - "d3-scale": "1 - 4", - "d3-scale-chromatic": "1 - 3", - "data-joint": "^1.2", - "kapsule": "^1.13", - "ngraph.forcelayout": "^3.3", - "ngraph.graph": "^20.0", - "tinycolor2": "^1.5" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "three": ">=0.118.3" - } - }, - "node_modules/three-pathfinding": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/three-pathfinding/-/three-pathfinding-0.7.0.tgz", - "integrity": "sha512-UwWvzgio1UFe81n5jKHNzB4B+AG3wfZ54OKp7bTb1MHuC3cy6RTtr0dbbiPQQoqxzr+DRArR2DUwQSEknw5+nw==" - }, - "node_modules/three-render-objects": { - "version": "1.27.8", - "resolved": "https://registry.npmjs.org/three-render-objects/-/three-render-objects-1.27.8.tgz", - "integrity": "sha512-ufnSu2AT1bPcg1NX91SS3hz6OxJcpNUGOjNtarCmzNmRkVlhc/PZJHcF4aPU6cy8X7R3bQfGRgUdh75kpAyTgg==", - "dependencies": { - "@tweenjs/tween.js": "18", - "accessor-fn": "1", - "kapsule": "^1.13", - "polished": "4" - }, - "peerDependencies": { - "three": "*" - } - }, - "node_modules/throat": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.2.tgz", - "integrity": "sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ==", - "dev": true - }, - "node_modules/throttle-debounce": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-3.0.1.tgz", - "integrity": "sha512-dTEWWNu6JmeVXY0ZYoPuH5cRIwc0MeGbJwah9KUNYSJwommQpCzTySTpEe8Gs1J23aeWEuAobe4Ag7EHVt/LOg==", - "engines": { - "node": ">=10" - } - }, - "node_modules/thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", - "dev": true - }, - "node_modules/timed-out": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/tiny-invariant": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", - "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==", + "node_modules/tiny-case": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-case/-/tiny-case-1.0.3.tgz", + "integrity": "sha512-Eet/eeMhkO6TX8mnUteS9zgPbUMQa4I6Kkp5ORiBD5476/m+PIRiumP5tmh5ioJpH7k51Kehawy2UDfsnxxY8Q==", "license": "MIT" }, - "node_modules/tinycolor2": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.5.2.tgz", - "integrity": "sha512-h80m9GPFGbcLzZByXlNSEhp1gf8Dy+VX/2JCGUZsWLo7lV1mnE/XlxGYgRBoMLJh1lIDXP0EMC4RPTjlRaV+Bg==" - }, - "node_modules/tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "engines": { - "node": ">=4" - } + "node_modules/tiny-warning": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", + "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==", + "license": "MIT" }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", "dependencies": { "is-number": "^7.0.0" }, @@ -18394,115 +4539,43 @@ "node": ">=8.0" } }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "dev": true, - "engines": { - "node": ">=0.6" - } + "node_modules/toposort": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/toposort/-/toposort-2.0.2.tgz", + "integrity": "sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg==", + "license": "MIT" }, - "node_modules/tough-cookie": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.2.tgz", - "integrity": "sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==", + "node_modules/ts-api-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.0.tgz", + "integrity": "sha512-032cPxaEKwM+GT3vA5JXNzIaizx388rhsSW79vGRNGXfRRAdEAn2mvk36PvK5HnOchyWZ7afLEXqYCvPCrzuzQ==", "dev": true, - "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" + "license": "MIT", + "engines": { + "node": ">=16" }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tough-cookie/node_modules/universalify": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/tr46": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", - "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", - "dev": true, - "dependencies": { - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tryer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz", - "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==", - "dev": true - }, - "node_modules/tsconfig-paths": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", - "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", - "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.1", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - } - }, - "node_modules/tsconfig-paths/node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/tsconfig-paths/node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "engines": { - "node": ">=4" + "peerDependencies": { + "typescript": ">=4.2.0" } }, "node_modules/tslib": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", - "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, - "node_modules/tsutils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + "node_modules/turbo-stream": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/turbo-stream/-/turbo-stream-2.4.0.tgz", + "integrity": "sha512-FHncC10WpBd2eOmGwpmQsWLDoK4cqsA/UT/GqNoaKOQnT8uzhtCbg3EoUDMvqpOSAI0S26mr0rkjzbOO6S3v1g==", + "license": "ISC" }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1" }, @@ -18510,190 +4583,65 @@ "node": ">= 0.8.0" } }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">=10" + "node": ">=12.20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dev": true, - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typed-array-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", - "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", - "dependencies": { - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, "node_modules/typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "version": "5.6.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz", + "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==", + "dev": true, + "license": "Apache-2.0", "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" }, "engines": { - "node": ">=4.2.0" + "node": ">=14.17" } }, - "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dependencies": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/uncontrollable": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/uncontrollable/-/uncontrollable-7.2.1.tgz", - "integrity": "sha512-svtcfoTADIB0nT9nltgjujTi7BzVmwjZClOmskKu/E8FW9BXzg9os8OLr4f8Dlnk0rYWJIWr4wv9eKUXiQvQwQ==", + "node_modules/typescript-eslint": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.15.0.tgz", + "integrity": "sha512-wY4FRGl0ZI+ZU4Jo/yjdBu0lVTSML58pu6PgGtJmCufvzfV565pUF6iACQt092uFOd49iLOTX/sEVmHtbSrS+w==", + "dev": true, "license": "MIT", "dependencies": { - "@babel/runtime": "^7.6.3", - "@types/react": ">=16.9.11", - "invariant": "^2.2.4", - "react-lifecycles-compat": "^3.0.4" + "@typescript-eslint/eslint-plugin": "8.15.0", + "@typescript-eslint/parser": "8.15.0", + "@typescript-eslint/utils": "8.15.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "react": ">=15.0.0" - } - }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" + "eslint": "^8.57.0 || ^9.0.0" }, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", - "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", - "engines": { - "node": ">=4" - } - }, - "node_modules/unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", - "dev": true, - "dependencies": { - "crypto-random-string": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/unquote": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", - "integrity": "sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==", - "dev": true - }, - "node_modules/upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "dev": true, - "engines": { - "node": ">=4", - "yarn": "*" + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, "node_modules/update-browserslist-db": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", - "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", + "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==", + "dev": true, "funding": [ { "type": "opencollective", @@ -18702,14 +4650,19 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" + "escalade": "^3.2.0", + "picocolors": "^1.1.0" }, "bin": { - "browserslist-lint": "cli.js" + "update-browserslist-db": "cli.js" }, "peerDependencies": { "browserslist": ">= 4.21.0" @@ -18719,607 +4672,78 @@ "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", "dependencies": { "punycode": "^2.1.0" } }, - "node_modules/url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "node_modules/vite": { + "version": "5.4.14", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.14.tgz", + "integrity": "sha512-EK5cY7Q1D8JNhSaPKVK4pwBFvaTmZxEnoKXLG/U9gmdDcihQGNzFlgIvaxezFR4glP1LsuiedwMBqCXH3wZccA==", "dev": true, + "license": "MIT", "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, - "node_modules/url-set-query": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-set-query/-/url-set-query-1.0.0.tgz", - "integrity": "sha512-3AChu4NiXquPfeckE5R5cGdiHCMWJx1dwCWOmWIL4KHAziJNOFIYJlpGFeKDvwLPHovZRCxK3cYlwzqI9Vp+Gg==" - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true - }, - "node_modules/util.promisify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", - "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", - "dev": true, - "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.2", - "has-symbols": "^1.0.1", - "object.getownpropertydescriptors": "^2.1.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/utila": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==", - "dev": true - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "dev": true, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/v8-to-istanbul": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", - "integrity": "sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0", - "source-map": "^0.7.3" - }, - "engines": { - "node": ">=10.12.0" - } - }, - "node_modules/v8-to-istanbul/node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/victory-vendor": { - "version": "36.6.10", - "resolved": "https://registry.npmjs.org/victory-vendor/-/victory-vendor-36.6.10.tgz", - "integrity": "sha512-7YqYGtsA4mByokBhCjk+ewwPhUfzhR1I3Da6/ZsZUv/31ceT77RKoaqrxRq5Ki+9we4uzf7+A+7aG2sfYhm7nA==", - "dependencies": { - "@types/d3-array": "^3.0.3", - "@types/d3-ease": "^3.0.0", - "@types/d3-interpolate": "^3.0.1", - "@types/d3-scale": "^4.0.2", - "@types/d3-shape": "^3.1.0", - "@types/d3-time": "^3.0.0", - "@types/d3-timer": "^3.0.0", - "d3-array": "^3.1.6", - "d3-ease": "^3.0.1", - "d3-interpolate": "^3.0.1", - "d3-scale": "^4.0.2", - "d3-shape": "^3.1.0", - "d3-time": "^3.0.0", - "d3-timer": "^3.0.1" - } - }, - "node_modules/w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "deprecated": "Use your platform's native performance.now() and performance.timeOrigin.", - "dev": true, - "dependencies": { - "browser-process-hrtime": "^1.0.0" - } - }, - "node_modules/w3c-xmlserializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", - "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", - "dev": true, - "dependencies": { - "xml-name-validator": "^3.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "dev": true, - "dependencies": { - "makeerror": "1.0.12" - } - }, - "node_modules/warning": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", - "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", - "dependencies": { - "loose-envify": "^1.0.0" - } - }, - "node_modules/watchpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", - "dev": true, - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "dev": true, - "dependencies": { - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", - "dev": true, - "engines": { - "node": ">=10.4" - } - }, - "node_modules/webpack": { - "version": "5.75.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.75.0.tgz", - "integrity": "sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==", - "dev": true, - "dependencies": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^0.0.51", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "acorn": "^8.7.1", - "acorn-import-assertions": "^1.7.6", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.10.0", - "es-module-lexer": "^0.9.0", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.1.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.4.0", - "webpack-sources": "^3.2.3" + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" }, "bin": { - "webpack": "bin/webpack.js" + "vite": "bin/vite.js" }, "engines": { - "node": ">=10.13.0" + "node": "^18.0.0 || >=20.0.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" }, "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-dev-middleware": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", - "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", - "dev": true, - "dependencies": { - "colorette": "^2.0.10", - "memfs": "^3.4.3", - "mime-types": "^2.1.31", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/webpack-dev-middleware/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/webpack-dev-middleware/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/webpack-dev-middleware/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/webpack-dev-middleware/node_modules/schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/webpack-dev-server": { - "version": "4.11.1", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.11.1.tgz", - "integrity": "sha512-lILVz9tAUy1zGFwieuaQtYiadImb5M3d+H+L1zDYalYoDl0cksAB1UNyuE5MMWJrG6zR1tXkCP2fitl7yoUJiw==", - "dev": true, - "dependencies": { - "@types/bonjour": "^3.5.9", - "@types/connect-history-api-fallback": "^1.3.5", - "@types/express": "^4.17.13", - "@types/serve-index": "^1.9.1", - "@types/serve-static": "^1.13.10", - "@types/sockjs": "^0.3.33", - "@types/ws": "^8.5.1", - "ansi-html-community": "^0.0.8", - "bonjour-service": "^1.0.11", - "chokidar": "^3.5.3", - "colorette": "^2.0.10", - "compression": "^1.7.4", - "connect-history-api-fallback": "^2.0.0", - "default-gateway": "^6.0.3", - "express": "^4.17.3", - "graceful-fs": "^4.2.6", - "html-entities": "^2.3.2", - "http-proxy-middleware": "^2.0.3", - "ipaddr.js": "^2.0.1", - "open": "^8.0.9", - "p-retry": "^4.5.0", - "rimraf": "^3.0.2", - "schema-utils": "^4.0.0", - "selfsigned": "^2.1.1", - "serve-index": "^1.9.1", - "sockjs": "^0.3.24", - "spdy": "^4.0.2", - "webpack-dev-middleware": "^5.3.1", - "ws": "^8.4.2" - }, - "bin": { - "webpack-dev-server": "bin/webpack-dev-server.js" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.37.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-dev-server/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/webpack-dev-server/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/webpack-dev-server/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/webpack-dev-server/node_modules/schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/webpack-dev-server/node_modules/ws": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.12.0.tgz", - "integrity": "sha512-kU62emKIdKVeEIOIKVegvqpXMSTAMLJozpHZaJNDYqBjzlSYXQGviYwN1osDLJ9av68qHd4a2oSjd7yD4pacig==", - "dev": true, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { + "@types/node": { "optional": true }, - "utf-8-validate": { + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { "optional": true } } }, - "node_modules/webpack-manifest-plugin": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/webpack-manifest-plugin/-/webpack-manifest-plugin-4.1.1.tgz", - "integrity": "sha512-YXUAwxtfKIJIKkhg03MKuiFAD72PlrqCiwdwO4VEXdRO5V0ORCNwaOwAZawPZalCbmH9kBDmXnNeQOw+BIEiow==", - "dev": true, - "dependencies": { - "tapable": "^2.0.0", - "webpack-sources": "^2.2.0" - }, - "engines": { - "node": ">=12.22.0" - }, - "peerDependencies": { - "webpack": "^4.44.2 || ^5.47.0" - } - }, - "node_modules/webpack-manifest-plugin/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/webpack-manifest-plugin/node_modules/webpack-sources": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.3.1.tgz", - "integrity": "sha512-y9EI9AO42JjEcrTJFOYmVywVZdKVUfOvDUPsJea5GIr1JOEGFVqwlY2K098fFoIjOkDzHn2AjRvM8dsBZu+gCA==", - "dev": true, - "dependencies": { - "source-list-map": "^2.0.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", - "dev": true, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpack/node_modules/@types/estree": { - "version": "0.0.51", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", - "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", - "dev": true - }, - "node_modules/webpack/node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/webpack/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", - "dev": true, - "dependencies": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/websocket-extensions": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/webvr-polyfill": { - "version": "0.10.12", - "resolved": "https://registry.npmjs.org/webvr-polyfill/-/webvr-polyfill-0.10.12.tgz", - "integrity": "sha512-trDJEVUQnRIVAnmImjEQ0BlL1NfuWl8+eaEdu+bs4g59c7OtETi/5tFkgEFDRaWEYwHntXs/uFF3OXZuutNGGA==", - "dependencies": { - "cardboard-vr-display": "^1.0.19" - } - }, - "node_modules/webvr-polyfill-dpdb": { - "version": "1.0.18", - "resolved": "https://registry.npmjs.org/webvr-polyfill-dpdb/-/webvr-polyfill-dpdb-1.0.18.tgz", - "integrity": "sha512-O0S1ZGEWyPvyZEkS2VbyV7mtir/NM9MNK3EuhbHPoJ8EHTky2pTXehjIl+IiDPr+Lldgx129QGt3NGly7rwRPw==" - }, - "node_modules/whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", - "dev": true, - "dependencies": { - "iconv-lite": "0.4.24" - } - }, - "node_modules/whatwg-encoding/node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/whatwg-fetch": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz", - "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==", - "dev": true - }, - "node_modules/whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", - "dev": true - }, - "node_modules/whatwg-url": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", - "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", - "dev": true, - "dependencies": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -19330,15086 +4754,85 @@ "node": ">= 8" } }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-collection": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", - "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", - "dependencies": { - "is-map": "^2.0.1", - "is-set": "^2.0.1", - "is-weakmap": "^2.0.1", - "is-weakset": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-typed-array": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", - "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.10" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/word-wrapper": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/word-wrapper/-/word-wrapper-1.0.7.tgz", - "integrity": "sha512-VOPBFCm9b6FyYKQYfn9AVn2dQvdR/YOVFV6IBRA1TBMJWKffvhEX1af6FMGrttILs2Q9ikCRhLqkbY2weW6dOQ==" - }, - "node_modules/workbox-background-sync": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-6.5.4.tgz", - "integrity": "sha512-0r4INQZMyPky/lj4Ou98qxcThrETucOde+7mRGJl13MPJugQNKeZQOdIJe/1AchOP23cTqHcN/YVpD6r8E6I8g==", - "dev": true, - "dependencies": { - "idb": "^7.0.1", - "workbox-core": "6.5.4" - } - }, - "node_modules/workbox-broadcast-update": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-6.5.4.tgz", - "integrity": "sha512-I/lBERoH1u3zyBosnpPEtcAVe5lwykx9Yg1k6f8/BGEPGaMMgZrwVrqL1uA9QZ1NGGFoyE6t9i7lBjOlDhFEEw==", - "dev": true, - "dependencies": { - "workbox-core": "6.5.4" - } - }, - "node_modules/workbox-build": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-6.5.4.tgz", - "integrity": "sha512-kgRevLXEYvUW9WS4XoziYqZ8Q9j/2ziJYEtTrjdz5/L/cTUa2XfyMP2i7c3p34lgqJ03+mTiz13SdFef2POwbA==", - "dev": true, - "dependencies": { - "@apideck/better-ajv-errors": "^0.3.1", - "@babel/core": "^7.11.1", - "@babel/preset-env": "^7.11.0", - "@babel/runtime": "^7.11.2", - "@rollup/plugin-babel": "^5.2.0", - "@rollup/plugin-node-resolve": "^11.2.1", - "@rollup/plugin-replace": "^2.4.1", - "@surma/rollup-plugin-off-main-thread": "^2.2.3", - "ajv": "^8.6.0", - "common-tags": "^1.8.0", - "fast-json-stable-stringify": "^2.1.0", - "fs-extra": "^9.0.1", - "glob": "^7.1.6", - "lodash": "^4.17.20", - "pretty-bytes": "^5.3.0", - "rollup": "^2.43.1", - "rollup-plugin-terser": "^7.0.0", - "source-map": "^0.8.0-beta.0", - "stringify-object": "^3.3.0", - "strip-comments": "^2.0.1", - "tempy": "^0.6.0", - "upath": "^1.2.0", - "workbox-background-sync": "6.5.4", - "workbox-broadcast-update": "6.5.4", - "workbox-cacheable-response": "6.5.4", - "workbox-core": "6.5.4", - "workbox-expiration": "6.5.4", - "workbox-google-analytics": "6.5.4", - "workbox-navigation-preload": "6.5.4", - "workbox-precaching": "6.5.4", - "workbox-range-requests": "6.5.4", - "workbox-recipes": "6.5.4", - "workbox-routing": "6.5.4", - "workbox-strategies": "6.5.4", - "workbox-streams": "6.5.4", - "workbox-sw": "6.5.4", - "workbox-window": "6.5.4" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/workbox-build/node_modules/@apideck/better-ajv-errors": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.6.tgz", - "integrity": "sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==", - "dev": true, - "dependencies": { - "json-schema": "^0.4.0", - "jsonpointer": "^5.0.0", - "leven": "^3.1.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "ajv": ">=8" - } - }, - "node_modules/workbox-build/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/workbox-build/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/workbox-build/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/workbox-build/node_modules/source-map": { - "version": "0.8.0-beta.0", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", - "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", - "dev": true, - "dependencies": { - "whatwg-url": "^7.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/workbox-build/node_modules/tr46": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/workbox-build/node_modules/webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", - "dev": true - }, - "node_modules/workbox-build/node_modules/whatwg-url": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", - "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", - "dev": true, - "dependencies": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } - }, - "node_modules/workbox-cacheable-response": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-6.5.4.tgz", - "integrity": "sha512-DCR9uD0Fqj8oB2TSWQEm1hbFs/85hXXoayVwFKLVuIuxwJaihBsLsp4y7J9bvZbqtPJ1KlCkmYVGQKrBU4KAug==", - "dev": true, - "dependencies": { - "workbox-core": "6.5.4" - } - }, - "node_modules/workbox-core": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-6.5.4.tgz", - "integrity": "sha512-OXYb+m9wZm8GrORlV2vBbE5EC1FKu71GGp0H4rjmxmF4/HLbMCoTFws87M3dFwgpmg0v00K++PImpNQ6J5NQ6Q==", - "dev": true - }, - "node_modules/workbox-expiration": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-6.5.4.tgz", - "integrity": "sha512-jUP5qPOpH1nXtjGGh1fRBa1wJL2QlIb5mGpct3NzepjGG2uFFBn4iiEBiI9GUmfAFR2ApuRhDydjcRmYXddiEQ==", - "dev": true, - "dependencies": { - "idb": "^7.0.1", - "workbox-core": "6.5.4" - } - }, - "node_modules/workbox-google-analytics": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-6.5.4.tgz", - "integrity": "sha512-8AU1WuaXsD49249Wq0B2zn4a/vvFfHkpcFfqAFHNHwln3jK9QUYmzdkKXGIZl9wyKNP+RRX30vcgcyWMcZ9VAg==", - "dev": true, - "dependencies": { - "workbox-background-sync": "6.5.4", - "workbox-core": "6.5.4", - "workbox-routing": "6.5.4", - "workbox-strategies": "6.5.4" - } - }, - "node_modules/workbox-navigation-preload": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-6.5.4.tgz", - "integrity": "sha512-IIwf80eO3cr8h6XSQJF+Hxj26rg2RPFVUmJLUlM0+A2GzB4HFbQyKkrgD5y2d84g2IbJzP4B4j5dPBRzamHrng==", - "dev": true, - "dependencies": { - "workbox-core": "6.5.4" - } - }, - "node_modules/workbox-precaching": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-6.5.4.tgz", - "integrity": "sha512-hSMezMsW6btKnxHB4bFy2Qfwey/8SYdGWvVIKFaUm8vJ4E53JAY+U2JwLTRD8wbLWoP6OVUdFlXsTdKu9yoLTg==", - "dev": true, - "dependencies": { - "workbox-core": "6.5.4", - "workbox-routing": "6.5.4", - "workbox-strategies": "6.5.4" - } - }, - "node_modules/workbox-range-requests": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-6.5.4.tgz", - "integrity": "sha512-Je2qR1NXCFC8xVJ/Lux6saH6IrQGhMpDrPXWZWWS8n/RD+WZfKa6dSZwU+/QksfEadJEr/NfY+aP/CXFFK5JFg==", - "dev": true, - "dependencies": { - "workbox-core": "6.5.4" - } - }, - "node_modules/workbox-recipes": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-recipes/-/workbox-recipes-6.5.4.tgz", - "integrity": "sha512-QZNO8Ez708NNwzLNEXTG4QYSKQ1ochzEtRLGaq+mr2PyoEIC1xFW7MrWxrONUxBFOByksds9Z4//lKAX8tHyUA==", - "dev": true, - "dependencies": { - "workbox-cacheable-response": "6.5.4", - "workbox-core": "6.5.4", - "workbox-expiration": "6.5.4", - "workbox-precaching": "6.5.4", - "workbox-routing": "6.5.4", - "workbox-strategies": "6.5.4" - } - }, - "node_modules/workbox-routing": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-6.5.4.tgz", - "integrity": "sha512-apQswLsbrrOsBUWtr9Lf80F+P1sHnQdYodRo32SjiByYi36IDyL2r7BH1lJtFX8fwNHDa1QOVY74WKLLS6o5Pg==", - "dev": true, - "dependencies": { - "workbox-core": "6.5.4" - } - }, - "node_modules/workbox-strategies": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-6.5.4.tgz", - "integrity": "sha512-DEtsxhx0LIYWkJBTQolRxG4EI0setTJkqR4m7r4YpBdxtWJH1Mbg01Cj8ZjNOO8etqfA3IZaOPHUxCs8cBsKLw==", - "dev": true, - "dependencies": { - "workbox-core": "6.5.4" - } - }, - "node_modules/workbox-streams": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-6.5.4.tgz", - "integrity": "sha512-FXKVh87d2RFXkliAIheBojBELIPnWbQdyDvsH3t74Cwhg0fDheL1T8BqSM86hZvC0ZESLsznSYWw+Va+KVbUzg==", - "dev": true, - "dependencies": { - "workbox-core": "6.5.4", - "workbox-routing": "6.5.4" - } - }, - "node_modules/workbox-sw": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-6.5.4.tgz", - "integrity": "sha512-vo2RQo7DILVRoH5LjGqw3nphavEjK4Qk+FenXeUsknKn14eCNedHOXWbmnvP4ipKhlE35pvJ4yl4YYf6YsJArA==", - "dev": true - }, - "node_modules/workbox-webpack-plugin": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-webpack-plugin/-/workbox-webpack-plugin-6.5.4.tgz", - "integrity": "sha512-LmWm/zoaahe0EGmMTrSLUi+BjyR3cdGEfU3fS6PN1zKFYbqAKuQ+Oy/27e4VSXsyIwAw8+QDfk1XHNGtZu9nQg==", - "dev": true, - "dependencies": { - "fast-json-stable-stringify": "^2.1.0", - "pretty-bytes": "^5.4.1", - "upath": "^1.2.0", - "webpack-sources": "^1.4.3", - "workbox-build": "6.5.4" - }, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "webpack": "^4.4.0 || ^5.9.0" - } - }, - "node_modules/workbox-webpack-plugin/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/workbox-webpack-plugin/node_modules/webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", - "dev": true, - "dependencies": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - } - }, - "node_modules/workbox-window": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-6.5.4.tgz", - "integrity": "sha512-HnLZJDwYBE+hpG25AQBO8RUWBJRaCsI9ksQJEp3aCOFCaG5kqaToAYXFRAHxzRluM2cQbGzdQF5rjKPWPA1fug==", - "dev": true, - "dependencies": { - "@types/trusted-types": "^2.0.2", - "workbox-core": "6.5.4" - } - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/wrap-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "node_modules/ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "dev": true, - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xhr": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz", - "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==", - "dependencies": { - "global": "~4.4.0", - "is-function": "^1.0.1", - "parse-headers": "^2.0.0", - "xtend": "^4.0.0" - } - }, - "node_modules/xhr-request": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/xhr-request/-/xhr-request-1.1.0.tgz", - "integrity": "sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA==", - "dependencies": { - "buffer-to-arraybuffer": "^0.0.5", - "object-assign": "^4.1.1", - "query-string": "^5.0.1", - "simple-get": "^2.7.0", - "timed-out": "^4.0.1", - "url-set-query": "^1.0.0", - "xhr": "^2.0.4" - } - }, - "node_modules/xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", - "dev": true - }, - "node_modules/xml-parse-from-string": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz", - "integrity": "sha512-ErcKwJTF54uRzzNMXq2X5sMIy88zJvfN2DmdoQvy7PAFJ+tPRU6ydWuOKNMyfmOjdyBQTFREi60s0Y0SyI0G0g==" - }, - "node_modules/xml2js": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", - "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", - "dependencies": { - "sax": ">=0.6.0", - "xmlbuilder": "~11.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/xmlbuilder": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", - "dev": true - }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "engines": { - "node": ">=0.4" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, "node_modules/yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" }, "node_modules/yaml": { "version": "1.10.2", "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "license": "ISC", "engines": { "node": ">= 6" } }, - "node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true, - "engines": { - "node": ">=10" - } - }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } - } - }, - "dependencies": { - "@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", - "requires": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" - } }, - "@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", - "requires": { - "@babel/highlight": "^7.18.6" - } - }, - "@babel/compat-data": { - "version": "7.20.14", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.14.tgz", - "integrity": "sha512-0YpKHD6ImkWMEINCyDAD0HLLUH/lPCefG8ld9it8DJB2wnApraKuhgYTvTY1z7UFIfBTGy5LwncZ+5HWWGbhFw==" - }, - "@babel/core": { - "version": "7.20.12", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.12.tgz", - "integrity": "sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg==", - "requires": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.7", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-module-transforms": "^7.20.11", - "@babel/helpers": "^7.20.7", - "@babel/parser": "^7.20.7", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.12", - "@babel/types": "^7.20.7", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.0" - } - }, - "@babel/eslint-parser": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.19.1.tgz", - "integrity": "sha512-AqNf2QWt1rtu2/1rLswy6CDP7H9Oh3mMhk177Y67Rg8d7RD9WfOLLv8CGn6tisFvS2htm86yIe1yLF6I1UDaGQ==", - "requires": { - "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", - "eslint-visitor-keys": "^2.1.0", - "semver": "^6.3.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==" - } - } - }, - "@babel/generator": { - "version": "7.20.14", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.14.tgz", - "integrity": "sha512-AEmuXHdcD3A52HHXxaTmYlb8q/xMEhoRP67B3T4Oq7lbmSoqroMZzjnGj3+i1io3pdnF8iBYVu4Ilj+c4hBxYg==", - "requires": { - "@babel/types": "^7.20.7", - "@jridgewell/gen-mapping": "^0.3.2", - "jsesc": "^2.5.1" - }, - "dependencies": { - "@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - } - } - }, - "@babel/helper-annotate-as-pure": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", - "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz", - "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==", - "requires": { - "@babel/helper-explode-assignable-expression": "^7.18.6", - "@babel/types": "^7.18.9" - } - }, - "@babel/helper-compilation-targets": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz", - "integrity": "sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==", - "requires": { - "@babel/compat-data": "^7.20.5", - "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.21.3", - "lru-cache": "^5.1.1", - "semver": "^6.3.0" - } - }, - "@babel/helper-create-class-features-plugin": { - "version": "7.20.12", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.12.tgz", - "integrity": "sha512-9OunRkbT0JQcednL0UFvbfXpAsUXiGjUk0a7sN8fUXX7Mue79cUSMjHGDRRi/Vz9vYlpIhLV5fMD5dKoMhhsNQ==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-member-expression-to-functions": "^7.20.7", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-replace-supers": "^7.20.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/helper-split-export-declaration": "^7.18.6" - } - }, - "@babel/helper-create-regexp-features-plugin": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.20.5.tgz", - "integrity": "sha512-m68B1lkg3XDGX5yCvGO0kPx3v9WIYLnzjKfPcQiwntEQa5ZeRkPmo2X/ISJc8qxWGfwUr+kvZAeEzAwLec2r2w==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "regexpu-core": "^5.2.1" - } - }, - "@babel/helper-define-polyfill-provider": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", - "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", - "requires": { - "@babel/helper-compilation-targets": "^7.17.7", - "@babel/helper-plugin-utils": "^7.16.7", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - } - }, - "@babel/helper-environment-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", - "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==" - }, - "@babel/helper-explode-assignable-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", - "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==", - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-function-name": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", - "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", - "requires": { - "@babel/template": "^7.18.10", - "@babel/types": "^7.19.0" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.20.7.tgz", - "integrity": "sha512-9J0CxJLq315fEdi4s7xK5TQaNYjZw+nDVpVqr1axNGKzdrdwYBD5b4uKv3n75aABG0rCCTK8Im8Ww7eYfMrZgw==", - "requires": { - "@babel/types": "^7.20.7" - } - }, - "@babel/helper-module-imports": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", - "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-module-transforms": { - "version": "7.20.11", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.11.tgz", - "integrity": "sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg==", - "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.20.2", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.10", - "@babel/types": "^7.20.7" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", - "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", - "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==" - }, - "@babel/helper-remap-async-to-generator": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz", - "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-wrap-function": "^7.18.9", - "@babel/types": "^7.18.9" - } - }, - "@babel/helper-replace-supers": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.20.7.tgz", - "integrity": "sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A==", - "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-member-expression-to-functions": "^7.20.7", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.7", - "@babel/types": "^7.20.7" - } - }, - "@babel/helper-simple-access": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", - "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", - "requires": { - "@babel/types": "^7.20.2" - } - }, - "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz", - "integrity": "sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==", - "requires": { - "@babel/types": "^7.20.0" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-string-parser": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", - "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==" - }, - "@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==" - }, - "@babel/helper-validator-option": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", - "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==" - }, - "@babel/helper-wrap-function": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz", - "integrity": "sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==", - "requires": { - "@babel/helper-function-name": "^7.19.0", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.5", - "@babel/types": "^7.20.5" - } - }, - "@babel/helpers": { - "version": "7.20.13", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.13.tgz", - "integrity": "sha512-nzJ0DWCL3gB5RCXbUO3KIMMsBY2Eqbx8mBpKGE/02PgyRQFcPQLbkQ1vyy596mZLaP+dAfD+R4ckASzNVmW3jg==", - "requires": { - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.13", - "@babel/types": "^7.20.7" - } - }, - "@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "requires": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@babel/parser": { - "version": "7.20.13", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.13.tgz", - "integrity": "sha512-gFDLKMfpiXCsjt4za2JA9oTMn70CeseCehb11kRZgvd7+F67Hih3OHOK24cRrWECJ/ljfPGac6ygXAs/C8kIvw==" - }, - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz", - "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.20.7.tgz", - "integrity": "sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/plugin-proposal-optional-chaining": "^7.20.7" - } - }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz", - "integrity": "sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==", - "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-remap-async-to-generator": "^7.18.9", - "@babel/plugin-syntax-async-generators": "^7.8.4" - } - }, - "@babel/plugin-proposal-class-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", - "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-proposal-class-static-block": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.20.7.tgz", - "integrity": "sha512-AveGOoi9DAjUYYuUAG//Ig69GlazLnoyzMw68VCDux+c1tsnnH/OkYcpz/5xzMkEFC6UxjR5Gw1c+iY2wOGVeQ==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.20.7", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - } - }, - "@babel/plugin-proposal-decorators": { - "version": "7.20.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.20.13.tgz", - "integrity": "sha512-7T6BKHa9Cpd7lCueHBBzP0nkXNina+h5giOZw+a8ZpMfPFY19VjJAjIxyFHuWkhCWgL6QMqRiY/wB1fLXzm6Mw==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.20.12", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-replace-supers": "^7.20.7", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/plugin-syntax-decorators": "^7.19.0" - } - }, - "@babel/plugin-proposal-dynamic-import": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", - "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - } - }, - "@babel/plugin-proposal-export-namespace-from": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", - "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - } - }, - "@babel/plugin-proposal-json-strings": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", - "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-json-strings": "^7.8.3" - } - }, - "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz", - "integrity": "sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==", - "requires": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - } - }, - "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", - "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - } - }, - "@babel/plugin-proposal-numeric-separator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", - "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - } - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz", - "integrity": "sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==", - "requires": { - "@babel/compat-data": "^7.20.5", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.20.7" - } - }, - "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", - "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - } - }, - "@babel/plugin-proposal-optional-chaining": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.20.7.tgz", - "integrity": "sha512-T+A7b1kfjtRM51ssoOfS1+wbyCVqorfyZhT99TvxxLMirPShD8CzKMRepMlCBGM5RpHMbn8s+5MMHnPstJH6mQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - } - }, - "@babel/plugin-proposal-private-methods": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", - "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-proposal-private-property-in-object": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.20.5.tgz", - "integrity": "sha512-Vq7b9dUA12ByzB4EjQTPo25sFhY+08pQDBSZRtUAkj7lb7jahaHR5igera16QZ+3my1nYR4dKsNdYj5IjPHilQ==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-create-class-features-plugin": "^7.20.5", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - } - }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", - "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-decorators": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.19.0.tgz", - "integrity": "sha512-xaBZUEDntt4faL1yN8oIFlhfXeQAWJW7CLKYsHTUqriCUbj8xOra8bfxxKGi/UwExPFBuPdH4XfHc9rGQhrVkQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.19.0" - } - }, - "@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-syntax-flow": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.18.6.tgz", - "integrity": "sha512-LUbR+KNTBWCUAqRG9ex5Gnzu2IOkt8jRJbHHXFT9q+L9zm7M/QQbEqXyw1n1pohYvOyWC8CjeyjrSaIwiYjK7A==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-syntax-import-assertions": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz", - "integrity": "sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.19.0" - } - }, - "@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-jsx": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", - "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-typescript": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz", - "integrity": "sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.19.0" - } - }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.20.7.tgz", - "integrity": "sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.20.7.tgz", - "integrity": "sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==", - "requires": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-remap-async-to-generator": "^7.18.9" - } - }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", - "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-block-scoping": { - "version": "7.20.14", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.14.tgz", - "integrity": "sha512-sMPepQtsOs5fM1bwNvuJJHvaCfOEQfmc01FGw0ELlTpTJj5Ql/zuNRRldYhAPys4ghXdBIQJbRVYi44/7QflQQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-classes": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.20.7.tgz", - "integrity": "sha512-LWYbsiXTPKl+oBlXUGlwNlJZetXD5Am+CyBdqhPsDVjM9Jc8jwBJFrKhHf900Kfk2eZG1y9MAG3UNajol7A4VQ==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-replace-supers": "^7.20.7", - "@babel/helper-split-export-declaration": "^7.18.6", - "globals": "^11.1.0" - } - }, - "@babel/plugin-transform-computed-properties": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.20.7.tgz", - "integrity": "sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/template": "^7.20.7" - } - }, - "@babel/plugin-transform-destructuring": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.20.7.tgz", - "integrity": "sha512-Xwg403sRrZb81IVB79ZPqNQME23yhugYVqgTxAhT99h485F4f+GMELFhhOsscDUB7HCswepKeCKLn/GZvUKoBA==", - "requires": { - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", - "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz", - "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", - "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", - "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-flow-strip-types": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.19.0.tgz", - "integrity": "sha512-sgeMlNaQVbCSpgLSKP4ZZKfsJVnFnNQlUSk6gPYzR/q7tzCgQF2t8RBKAP6cKJeZdveei7Q7Jm527xepI8lNLg==", - "requires": { - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/plugin-syntax-flow": "^7.18.6" - } - }, - "@babel/plugin-transform-for-of": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz", - "integrity": "sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-function-name": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz", - "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==", - "requires": { - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-literals": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", - "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", - "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-modules-amd": { - "version": "7.20.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.20.11.tgz", - "integrity": "sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==", - "requires": { - "@babel/helper-module-transforms": "^7.20.11", - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.20.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.20.11.tgz", - "integrity": "sha512-S8e1f7WQ7cimJQ51JkAaDrEtohVEitXjgCGAS2N8S31Y42E+kWwfSz83LYz57QdBm7q9diARVqanIaH2oVgQnw==", - "requires": { - "@babel/helper-module-transforms": "^7.20.11", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-simple-access": "^7.20.2" - } - }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.20.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.20.11.tgz", - "integrity": "sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw==", - "requires": { - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-module-transforms": "^7.20.11", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-validator-identifier": "^7.19.1" - } - }, - "@babel/plugin-transform-modules-umd": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", - "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", - "requires": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.20.5.tgz", - "integrity": "sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.20.5", - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-new-target": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz", - "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-object-super": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", - "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-replace-supers": "^7.18.6" - } - }, - "@babel/plugin-transform-parameters": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.7.tgz", - "integrity": "sha512-WiWBIkeHKVOSYPO0pWkxGPfKeWrCJyD3NJ53+Lrp/QMSZbsVPovrVl2aWZ19D/LTVnaDv5Ap7GJ/B2CTOZdrfA==", - "requires": { - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-property-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", - "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-react-constant-elements": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.20.2.tgz", - "integrity": "sha512-KS/G8YI8uwMGKErLFOHS/ekhqdHhpEloxs43NecQHVgo2QuQSyJhGIY1fL8UGl9wy5ItVwwoUL4YxVqsplGq2g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-react-display-name": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz", - "integrity": "sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-react-jsx": { - "version": "7.20.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.20.13.tgz", - "integrity": "sha512-MmTZx/bkUrfJhhYAYt3Urjm+h8DQGrPrnKQ94jLo7NLuOU+T89a7IByhKmrb8SKhrIYIQ0FN0CHMbnFRen4qNw==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-jsx": "^7.18.6", - "@babel/types": "^7.20.7" - } - }, - "@babel/plugin-transform-react-jsx-development": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz", - "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==", - "requires": { - "@babel/plugin-transform-react-jsx": "^7.18.6" - } - }, - "@babel/plugin-transform-react-pure-annotations": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz", - "integrity": "sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-regenerator": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.20.5.tgz", - "integrity": "sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.20.2", - "regenerator-transform": "^0.15.1" - } - }, - "@babel/plugin-transform-reserved-words": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", - "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-runtime": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.19.6.tgz", - "integrity": "sha512-PRH37lz4JU156lYFW1p8OxE5i7d6Sl/zV58ooyr+q1J1lnQPyg5tIiXlIwNVhJaY4W3TmOtdc8jqdXQcB1v5Yw==", - "requires": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.19.0", - "babel-plugin-polyfill-corejs2": "^0.3.3", - "babel-plugin-polyfill-corejs3": "^0.6.0", - "babel-plugin-polyfill-regenerator": "^0.4.1", - "semver": "^6.3.0" - } - }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", - "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-spread": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.20.7.tgz", - "integrity": "sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==", - "requires": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0" - } - }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", - "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-template-literals": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", - "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", - "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-typescript": { - "version": "7.20.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.20.13.tgz", - "integrity": "sha512-O7I/THxarGcDZxkgWKMUrk7NK1/WbHAg3Xx86gqS6x9MTrNL6AwIluuZ96ms4xeDe6AVx6rjHbWHP7x26EPQBA==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.20.12", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-typescript": "^7.20.0" - } - }, - "@babel/plugin-transform-unicode-escapes": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz", - "integrity": "sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", - "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/preset-env": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.20.2.tgz", - "integrity": "sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg==", - "requires": { - "@babel/compat-data": "^7.20.1", - "@babel/helper-compilation-targets": "^7.20.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-async-generator-functions": "^7.20.1", - "@babel/plugin-proposal-class-properties": "^7.18.6", - "@babel/plugin-proposal-class-static-block": "^7.18.6", - "@babel/plugin-proposal-dynamic-import": "^7.18.6", - "@babel/plugin-proposal-export-namespace-from": "^7.18.9", - "@babel/plugin-proposal-json-strings": "^7.18.6", - "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", - "@babel/plugin-proposal-numeric-separator": "^7.18.6", - "@babel/plugin-proposal-object-rest-spread": "^7.20.2", - "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", - "@babel/plugin-proposal-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-private-methods": "^7.18.6", - "@babel/plugin-proposal-private-property-in-object": "^7.18.6", - "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.20.0", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-transform-arrow-functions": "^7.18.6", - "@babel/plugin-transform-async-to-generator": "^7.18.6", - "@babel/plugin-transform-block-scoped-functions": "^7.18.6", - "@babel/plugin-transform-block-scoping": "^7.20.2", - "@babel/plugin-transform-classes": "^7.20.2", - "@babel/plugin-transform-computed-properties": "^7.18.9", - "@babel/plugin-transform-destructuring": "^7.20.2", - "@babel/plugin-transform-dotall-regex": "^7.18.6", - "@babel/plugin-transform-duplicate-keys": "^7.18.9", - "@babel/plugin-transform-exponentiation-operator": "^7.18.6", - "@babel/plugin-transform-for-of": "^7.18.8", - "@babel/plugin-transform-function-name": "^7.18.9", - "@babel/plugin-transform-literals": "^7.18.9", - "@babel/plugin-transform-member-expression-literals": "^7.18.6", - "@babel/plugin-transform-modules-amd": "^7.19.6", - "@babel/plugin-transform-modules-commonjs": "^7.19.6", - "@babel/plugin-transform-modules-systemjs": "^7.19.6", - "@babel/plugin-transform-modules-umd": "^7.18.6", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.19.1", - "@babel/plugin-transform-new-target": "^7.18.6", - "@babel/plugin-transform-object-super": "^7.18.6", - "@babel/plugin-transform-parameters": "^7.20.1", - "@babel/plugin-transform-property-literals": "^7.18.6", - "@babel/plugin-transform-regenerator": "^7.18.6", - "@babel/plugin-transform-reserved-words": "^7.18.6", - "@babel/plugin-transform-shorthand-properties": "^7.18.6", - "@babel/plugin-transform-spread": "^7.19.0", - "@babel/plugin-transform-sticky-regex": "^7.18.6", - "@babel/plugin-transform-template-literals": "^7.18.9", - "@babel/plugin-transform-typeof-symbol": "^7.18.9", - "@babel/plugin-transform-unicode-escapes": "^7.18.10", - "@babel/plugin-transform-unicode-regex": "^7.18.6", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.20.2", - "babel-plugin-polyfill-corejs2": "^0.3.3", - "babel-plugin-polyfill-corejs3": "^0.6.0", - "babel-plugin-polyfill-regenerator": "^0.4.1", - "core-js-compat": "^3.25.1", - "semver": "^6.3.0" - } - }, - "@babel/preset-modules": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", - "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - } - }, - "@babel/preset-react": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.18.6.tgz", - "integrity": "sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-transform-react-display-name": "^7.18.6", - "@babel/plugin-transform-react-jsx": "^7.18.6", - "@babel/plugin-transform-react-jsx-development": "^7.18.6", - "@babel/plugin-transform-react-pure-annotations": "^7.18.6" - } - }, - "@babel/preset-typescript": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.18.6.tgz", - "integrity": "sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-transform-typescript": "^7.18.6" - } - }, - "@babel/runtime": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.7.tgz", - "integrity": "sha512-UwgBRMjJP+xv857DCngvqXI3Iq6J4v0wXmwc6sapg+zyhbwmQX67LUEFrkK5tbyJ30jGuG3ZvWpBiB9LCy1kWw==", - "requires": { - "regenerator-runtime": "^0.14.0" - }, - "dependencies": { - "regenerator-runtime": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" - } - } - }, - "@babel/template": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", - "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", - "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7" - } - }, - "@babel/traverse": { - "version": "7.20.13", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.13.tgz", - "integrity": "sha512-kMJXfF0T6DIS9E8cgdLCSAL+cuCK+YEZHWiLK0SXpTo8YRj5lpJu3CDNKiIBCne4m9hhTIqUg6SYTAI39tAiVQ==", - "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.7", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.20.13", - "@babel/types": "^7.20.7", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - }, - "@babel/types": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.7.tgz", - "integrity": "sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==", - "requires": { - "@babel/helper-string-parser": "^7.19.4", - "@babel/helper-validator-identifier": "^7.19.1", - "to-fast-properties": "^2.0.0" - } - }, - "@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true - }, - "@csstools/normalize.css": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-12.0.0.tgz", - "integrity": "sha512-M0qqxAcwCsIVfpFQSlGN5XjXWu8l5JDZN+fPt1LeW5SZexQTgnaEvgXAY+CeygRw0EeppWHi12JxESWiWrB0Sg==", - "dev": true - }, - "@csstools/postcss-cascade-layers": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-1.1.1.tgz", - "integrity": "sha512-+KdYrpKC5TgomQr2DlZF4lDEpHcoxnj5IGddYYfBWJAKfj1JtuHUIqMa+E1pJJ+z3kvDViWMqyqPlG4Ja7amQA==", - "dev": true, - "requires": { - "@csstools/selector-specificity": "^2.0.2", - "postcss-selector-parser": "^6.0.10" - } - }, - "@csstools/postcss-color-function": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-1.1.1.tgz", - "integrity": "sha512-Bc0f62WmHdtRDjf5f3e2STwRAl89N2CLb+9iAwzrv4L2hncrbDwnQD9PCq0gtAt7pOI2leIV08HIBUd4jxD8cw==", - "dev": true, - "requires": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" - } - }, - "@csstools/postcss-font-format-keywords": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-1.0.1.tgz", - "integrity": "sha512-ZgrlzuUAjXIOc2JueK0X5sZDjCtgimVp/O5CEqTcs5ShWBa6smhWYbS0x5cVc/+rycTDbjjzoP0KTDnUneZGOg==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "@csstools/postcss-hwb-function": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-1.0.2.tgz", - "integrity": "sha512-YHdEru4o3Rsbjmu6vHy4UKOXZD+Rn2zmkAmLRfPet6+Jz4Ojw8cbWxe1n42VaXQhD3CQUXXTooIy8OkVbUcL+w==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "@csstools/postcss-ic-unit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-1.0.1.tgz", - "integrity": "sha512-Ot1rcwRAaRHNKC9tAqoqNZhjdYBzKk1POgWfhN4uCOE47ebGcLRqXjKkApVDpjifL6u2/55ekkpnFcp+s/OZUw==", - "dev": true, - "requires": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" - } - }, - "@csstools/postcss-is-pseudo-class": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-2.0.7.tgz", - "integrity": "sha512-7JPeVVZHd+jxYdULl87lvjgvWldYu+Bc62s9vD/ED6/QTGjy0jy0US/f6BG53sVMTBJ1lzKZFpYmofBN9eaRiA==", - "dev": true, - "requires": { - "@csstools/selector-specificity": "^2.0.0", - "postcss-selector-parser": "^6.0.10" - } - }, - "@csstools/postcss-nested-calc": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-nested-calc/-/postcss-nested-calc-1.0.0.tgz", - "integrity": "sha512-JCsQsw1wjYwv1bJmgjKSoZNvf7R6+wuHDAbi5f/7MbFhl2d/+v+TvBTU4BJH3G1X1H87dHl0mh6TfYogbT/dJQ==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "@csstools/postcss-normalize-display-values": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-1.0.1.tgz", - "integrity": "sha512-jcOanIbv55OFKQ3sYeFD/T0Ti7AMXc9nM1hZWu8m/2722gOTxFg7xYu4RDLJLeZmPUVQlGzo4jhzvTUq3x4ZUw==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "@csstools/postcss-oklab-function": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-1.1.1.tgz", - "integrity": "sha512-nJpJgsdA3dA9y5pgyb/UfEzE7W5Ka7u0CX0/HIMVBNWzWemdcTH3XwANECU6anWv/ao4vVNLTMxhiPNZsTK6iA==", - "dev": true, - "requires": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" - } - }, - "@csstools/postcss-progressive-custom-properties": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-1.3.0.tgz", - "integrity": "sha512-ASA9W1aIy5ygskZYuWams4BzafD12ULvSypmaLJT2jvQ8G0M3I8PRQhC0h7mG0Z3LI05+agZjqSR9+K9yaQQjA==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "@csstools/postcss-stepped-value-functions": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-1.0.1.tgz", - "integrity": "sha512-dz0LNoo3ijpTOQqEJLY8nyaapl6umbmDcgj4AD0lgVQ572b2eqA1iGZYTTWhrcrHztWDDRAX2DGYyw2VBjvCvQ==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "@csstools/postcss-text-decoration-shorthand": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-1.0.0.tgz", - "integrity": "sha512-c1XwKJ2eMIWrzQenN0XbcfzckOLLJiczqy+YvfGmzoVXd7pT9FfObiSEfzs84bpE/VqfpEuAZ9tCRbZkZxxbdw==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "@csstools/postcss-trigonometric-functions": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-1.0.2.tgz", - "integrity": "sha512-woKaLO///4bb+zZC2s80l+7cm07M7268MsyG3M0ActXXEFi6SuhvriQYcb58iiKGbjwwIU7n45iRLEHypB47Og==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "@csstools/postcss-unset-value": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@csstools/postcss-unset-value/-/postcss-unset-value-1.0.2.tgz", - "integrity": "sha512-c8J4roPBILnelAsdLr4XOAR/GsTm0GJi4XpcfvoWk3U6KiTCqiFYc63KhRMQQX35jYMp4Ao8Ij9+IZRgMfJp1g==", - "dev": true, - "requires": {} - }, - "@csstools/selector-specificity": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.1.1.tgz", - "integrity": "sha512-jwx+WCqszn53YHOfvFMJJRd/B2GqkCBt+1MJSG6o5/s8+ytHMvDZXsJgUEWLk12UnLd7HYKac4BYU5i/Ron1Cw==", - "dev": true, - "requires": {} - }, - "@emotion/babel-plugin": { - "version": "11.10.5", - "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.10.5.tgz", - "integrity": "sha512-xE7/hyLHJac7D2Ve9dKroBBZqBT7WuPQmWcq7HSGb84sUuP4mlOWoB8dvVfD9yk5DHkU1m6RW7xSoDtnQHNQeA==", - "requires": { - "@babel/helper-module-imports": "^7.16.7", - "@babel/plugin-syntax-jsx": "^7.17.12", - "@babel/runtime": "^7.18.3", - "@emotion/hash": "^0.9.0", - "@emotion/memoize": "^0.8.0", - "@emotion/serialize": "^1.1.1", - "babel-plugin-macros": "^3.1.0", - "convert-source-map": "^1.5.0", - "escape-string-regexp": "^4.0.0", - "find-root": "^1.1.0", - "source-map": "^0.5.7", - "stylis": "4.1.3" - } - }, - "@emotion/cache": { - "version": "11.11.0", - "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.11.0.tgz", - "integrity": "sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ==", - "requires": { - "@emotion/memoize": "^0.8.1", - "@emotion/sheet": "^1.2.2", - "@emotion/utils": "^1.2.1", - "@emotion/weak-memoize": "^0.3.1", - "stylis": "4.2.0" - }, - "dependencies": { - "stylis": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", - "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==" - } - } - }, - "@emotion/hash": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.0.tgz", - "integrity": "sha512-14FtKiHhy2QoPIzdTcvh//8OyBlknNs2nXRwIhG904opCby3l+9Xaf/wuPvICBF0rc1ZCNBd3nKe9cd2mecVkQ==" - }, - "@emotion/is-prop-valid": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.0.tgz", - "integrity": "sha512-3aDpDprjM0AwaxGE09bOPkNxHpBd+kA6jty3RnaEXdweX1DF1U3VQpPYb0g1IStAuK7SVQ1cy+bNBBKp4W3Fjg==", - "requires": { - "@emotion/memoize": "^0.8.0" - } - }, - "@emotion/memoize": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz", - "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==" - }, - "@emotion/react": { - "version": "11.10.5", - "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.10.5.tgz", - "integrity": "sha512-TZs6235tCJ/7iF6/rvTaOH4oxQg2gMAcdHemjwLKIjKz4rRuYe1HJ2TQJKnAcRAfOUDdU8XoDadCe1rl72iv8A==", - "requires": { - "@babel/runtime": "^7.18.3", - "@emotion/babel-plugin": "^11.10.5", - "@emotion/cache": "^11.10.5", - "@emotion/serialize": "^1.1.1", - "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", - "@emotion/utils": "^1.2.0", - "@emotion/weak-memoize": "^0.3.0", - "hoist-non-react-statics": "^3.3.1" - } - }, - "@emotion/serialize": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.1.tgz", - "integrity": "sha512-Zl/0LFggN7+L1liljxXdsVSVlg6E/Z/olVWpfxUTxOAmi8NU7YoeWeLfi1RmnB2TATHoaWwIBRoL+FvAJiTUQA==", - "requires": { - "@emotion/hash": "^0.9.0", - "@emotion/memoize": "^0.8.0", - "@emotion/unitless": "^0.8.0", - "@emotion/utils": "^1.2.0", - "csstype": "^3.0.2" - } - }, - "@emotion/sheet": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.2.2.tgz", - "integrity": "sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==" - }, - "@emotion/styled": { - "version": "11.10.5", - "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.10.5.tgz", - "integrity": "sha512-8EP6dD7dMkdku2foLoruPCNkRevzdcBaY6q0l0OsbyJK+x8D9HWjX27ARiSIKNF634hY9Zdoedh8bJCiva8yZw==", - "requires": { - "@babel/runtime": "^7.18.3", - "@emotion/babel-plugin": "^11.10.5", - "@emotion/is-prop-valid": "^1.2.0", - "@emotion/serialize": "^1.1.1", - "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", - "@emotion/utils": "^1.2.0" - } - }, - "@emotion/stylis": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/@emotion/stylis/-/stylis-0.8.5.tgz", - "integrity": "sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ==" - }, - "@emotion/unitless": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.0.tgz", - "integrity": "sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw==" - }, - "@emotion/use-insertion-effect-with-fallbacks": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.0.tgz", - "integrity": "sha512-1eEgUGmkaljiBnRMTdksDV1W4kUnmwgp7X9G8B++9GYwl1lUdqSndSriIrTJ0N7LQaoauY9JJ2yhiOYK5+NI4A==", - "requires": {} - }, - "@emotion/utils": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.1.tgz", - "integrity": "sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg==" - }, - "@emotion/weak-memoize": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz", - "integrity": "sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==" - }, - "@eslint/eslintrc": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.1.tgz", - "integrity": "sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==", - "requires": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.4.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", - "requires": { - "type-fest": "^0.20.2" - } - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==" - } - } - }, - "@floating-ui/core": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.2.tgz", - "integrity": "sha512-+2XpQV9LLZeanU4ZevzRnGFg2neDeKHgFLjP6YLW+tly0IvrhqT4u8enLGjLH3qeh85g19xY5rsAusfwTdn5lg==", - "requires": { - "@floating-ui/utils": "^0.2.0" - } - }, - "@floating-ui/dom": { - "version": "1.6.5", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.5.tgz", - "integrity": "sha512-Nsdud2X65Dz+1RHjAIP0t8z5e2ff/IRbei6BqFrl1urT8sDVzM1HMQ+R0XcU5ceRfyO3I6ayeqIfh+6Wb8LGTw==", - "requires": { - "@floating-ui/core": "^1.0.0", - "@floating-ui/utils": "^0.2.0" - } - }, - "@floating-ui/react-dom": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.0.tgz", - "integrity": "sha512-lNzj5EQmEKn5FFKc04+zasr09h/uX8RtJRNj5gUXsSQIXHVWTVh+hVAg1vOMCexkX8EgvemMvIFpQfkosnVNyA==", - "requires": { - "@floating-ui/dom": "^1.0.0" - } - }, - "@floating-ui/utils": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.2.tgz", - "integrity": "sha512-J4yDIIthosAsRZ5CPYP/jQvUAQtlZTTD/4suA08/FEnlxqW3sKS9iAhgsa9VYLZ6vDHn/ixJgIqRQPotoBjxIw==" - }, - "@humanwhocodes/config-array": { - "version": "0.11.8", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", - "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", - "requires": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.5" - } - }, - "@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==" - }, - "@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==" - }, - "@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "requires": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "dependencies": { - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - } - } - }, - "@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true - }, - "@jest/console": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", - "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^27.5.1", - "jest-util": "^27.5.1", - "slash": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@jest/core": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz", - "integrity": "sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==", - "dev": true, - "requires": { - "@jest/console": "^27.5.1", - "@jest/reporters": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.8.1", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^27.5.1", - "jest-config": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-resolve-dependencies": "^27.5.1", - "jest-runner": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "jest-watcher": "^27.5.1", - "micromatch": "^4.0.4", - "rimraf": "^3.0.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@jest/environment": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", - "integrity": "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==", - "dev": true, - "requires": { - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "jest-mock": "^27.5.1" - } - }, - "@jest/fake-timers": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", - "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@sinonjs/fake-timers": "^8.0.1", - "@types/node": "*", - "jest-message-util": "^27.5.1", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1" - } - }, - "@jest/globals": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", - "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", - "dev": true, - "requires": { - "@jest/environment": "^27.5.1", - "@jest/types": "^27.5.1", - "expect": "^27.5.1" - } - }, - "@jest/reporters": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz", - "integrity": "sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==", - "dev": true, - "requires": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.2", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^5.1.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-haste-map": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "slash": "^3.0.0", - "source-map": "^0.6.0", - "string-length": "^4.0.1", - "terminal-link": "^2.0.0", - "v8-to-istanbul": "^8.1.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@jest/schemas": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", - "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", - "dev": true, - "requires": { - "@sinclair/typebox": "^0.24.1" - } - }, - "@jest/source-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", - "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==", - "dev": true, - "requires": { - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9", - "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "@jest/test-result": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", - "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", - "dev": true, - "requires": { - "@jest/console": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - } - }, - "@jest/test-sequencer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz", - "integrity": "sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==", - "dev": true, - "requires": { - "@jest/test-result": "^27.5.1", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-runtime": "^27.5.1" - } - }, - "@jest/transform": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", - "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", - "dev": true, - "requires": { - "@babel/core": "^7.1.0", - "@jest/types": "^27.5.1", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-util": "^27.5.1", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "source-map": "^0.6.1", - "write-file-atomic": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", - "requires": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==" - }, - "@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==" - }, - "@jridgewell/source-map": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", - "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", - "dev": true, - "requires": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "dependencies": { - "@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - } - } - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" - }, - "@jridgewell/trace-mapping": { - "version": "0.3.17", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", - "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", - "requires": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - }, - "@leichtgewicht/ip-codec": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", - "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==", - "dev": true - }, - "@mdi/js": { - "version": "7.1.96", - "resolved": "https://registry.npmjs.org/@mdi/js/-/js-7.1.96.tgz", - "integrity": "sha512-wlrJs6Ryhaa5CqhK3FjTfMRnb/s7HeLkKMFqwQySkK86cdN1TGdzpSM3O4tsmzCA1dYBeTbXvOwSE/Y42cUrvA==" - }, - "@mdi/react": { + "node_modules/yup": { "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@mdi/react/-/react-1.6.1.tgz", - "integrity": "sha512-4qZeDcluDFGFTWkHs86VOlHkm6gnKaMql13/gpIcUQ8kzxHgpj31NuCkD8abECVfbULJ3shc7Yt4HJ6Wu6SN4w==", - "requires": { - "prop-types": "^15.7.2" - } - }, - "@mui/base": { - "version": "5.0.0-beta.40", - "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.40.tgz", - "integrity": "sha512-I/lGHztkCzvwlXpjD2+SNmvNQvB4227xBXhISPjEaJUXGImOQ9f3D2Yj/T3KasSI/h0MLWy74X0J6clhPmsRbQ==", - "requires": { - "@babel/runtime": "^7.23.9", - "@floating-ui/react-dom": "^2.0.8", - "@mui/types": "^7.2.14", - "@mui/utils": "^5.15.14", - "@popperjs/core": "^2.11.8", - "clsx": "^2.1.0", - "prop-types": "^15.8.1" - } - }, - "@mui/core-downloads-tracker": { - "version": "5.15.20", - "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.15.20.tgz", - "integrity": "sha512-DoL2ppgldL16utL8nNyj/P12f8mCNdx/Hb/AJnX9rLY4b52hCMIx1kH83pbXQ6uMy6n54M3StmEbvSGoj2OFuA==" - }, - "@mui/material": { - "version": "5.15.18", - "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.15.18.tgz", - "integrity": "sha512-n+/dsiqux74fFfcRUJjok+ieNQ7+BEk6/OwX9cLcLvriZrZb+/7Y8+Fd2HlUUbn5N0CDurgAHm0VH1DqyJ9HAw==", - "requires": { - "@babel/runtime": "^7.23.9", - "@mui/base": "5.0.0-beta.40", - "@mui/core-downloads-tracker": "^5.15.18", - "@mui/system": "^5.15.15", - "@mui/types": "^7.2.14", - "@mui/utils": "^5.15.14", - "@types/react-transition-group": "^4.4.10", - "clsx": "^2.1.0", - "csstype": "^3.1.3", - "prop-types": "^15.8.1", - "react-is": "^18.2.0", - "react-transition-group": "^4.4.5" - } - }, - "@mui/private-theming": { - "version": "5.15.20", - "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.15.20.tgz", - "integrity": "sha512-BK8F94AIqSrnaPYXf2KAOjGZJgWfvqAVQ2gVR3EryvQFtuBnG6RwodxrCvd3B48VuMy6Wsk897+lQMUxJyk+6g==", - "requires": { - "@babel/runtime": "^7.23.9", - "@mui/utils": "^5.15.20", - "prop-types": "^15.8.1" - } - }, - "@mui/styled-engine": { - "version": "5.15.14", - "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.15.14.tgz", - "integrity": "sha512-RILkuVD8gY6PvjZjqnWhz8fu68dVkqhM5+jYWfB5yhlSQKg+2rHkmEwm75XIeAqI3qwOndK6zELK5H6Zxn4NHw==", - "requires": { - "@babel/runtime": "^7.23.9", - "@emotion/cache": "^11.11.0", - "csstype": "^3.1.3", - "prop-types": "^15.8.1" - } - }, - "@mui/system": { - "version": "5.15.20", - "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.15.20.tgz", - "integrity": "sha512-LoMq4IlAAhxzL2VNUDBTQxAb4chnBe8JvRINVNDiMtHE2PiPOoHlhOPutSxEbaL5mkECPVWSv6p8JEV+uykwIA==", - "requires": { - "@babel/runtime": "^7.23.9", - "@mui/private-theming": "^5.15.20", - "@mui/styled-engine": "^5.15.14", - "@mui/types": "^7.2.14", - "@mui/utils": "^5.15.20", - "clsx": "^2.1.0", - "csstype": "^3.1.3", - "prop-types": "^15.8.1" - } - }, - "@mui/types": { - "version": "7.2.14", - "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.14.tgz", - "integrity": "sha512-MZsBZ4q4HfzBsywtXgM1Ksj6HDThtiwmOKUXH1pKYISI9gAVXCNHNpo7TlGoGrBaYWZTdNoirIN7JsQcQUjmQQ==", - "requires": {} - }, - "@mui/utils": { - "version": "5.15.20", - "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.15.20.tgz", - "integrity": "sha512-mAbYx0sovrnpAu1zHc3MDIhPqL8RPVC5W5xcO1b7PiSCJPtckIZmBkp8hefamAvUiAV8gpfMOM6Zb+eSisbI2A==", - "requires": { - "@babel/runtime": "^7.23.9", - "@types/prop-types": "^15.7.11", - "prop-types": "^15.8.1", - "react-is": "^18.2.0" - } - }, - "@nicolo-ribaudo/eslint-scope-5-internals": { - "version": "5.1.1-v1", - "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", - "integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==", - "requires": { - "eslint-scope": "5.1.1" - }, + "resolved": "https://registry.npmjs.org/yup/-/yup-1.6.1.tgz", + "integrity": "sha512-JED8pB50qbA4FOkDol0bYF/p60qSEDQqBD0/qeIrUCG1KbPBIQ776fCUNb9ldbPcSTxA69g/47XTo4TqWiuXOA==", + "license": "MIT", "dependencies": { - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" - } + "property-expr": "^2.0.5", + "tiny-case": "^1.0.3", + "toposort": "^2.0.2", + "type-fest": "^2.19.0" } }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@pmmmwh/react-refresh-webpack-plugin": { - "version": "0.5.10", - "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.10.tgz", - "integrity": "sha512-j0Ya0hCFZPd4x40qLzbhGsh9TMtdb+CJQiso+WxLOPNasohq9cc5SNUcwsZaRH6++Xh91Xkm/xHCkuIiIu0LUA==", - "dev": true, - "requires": { - "ansi-html-community": "^0.0.8", - "common-path-prefix": "^3.0.0", - "core-js-pure": "^3.23.3", - "error-stack-parser": "^2.0.6", - "find-up": "^5.0.0", - "html-entities": "^2.1.0", - "loader-utils": "^2.0.4", - "schema-utils": "^3.0.0", - "source-map": "^0.7.3" - }, - "dependencies": { - "source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "dev": true - } - } - }, - "@popperjs/core": { - "version": "2.11.8", - "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", - "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==" - }, - "@react-aria/ssr": { - "version": "3.9.4", - "resolved": "https://registry.npmjs.org/@react-aria/ssr/-/ssr-3.9.4.tgz", - "integrity": "sha512-4jmAigVq409qcJvQyuorsmBR4+9r3+JEC60wC+Y0MZV0HCtTmm8D9guYXlJMdx0SSkgj0hHAyFm/HvPNFofCoQ==", - "requires": { - "@swc/helpers": "^0.5.0" - } - }, - "@remix-run/router": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.16.1.tgz", - "integrity": "sha512-es2g3dq6Nb07iFxGk5GuHN20RwBZOsuDQN7izWIisUcv9r+d2C5jQxqmgkdebXgReWfiyUabcki6Fg77mSNrig==" - }, - "@restart/hooks": { - "version": "0.4.16", - "resolved": "https://registry.npmjs.org/@restart/hooks/-/hooks-0.4.16.tgz", - "integrity": "sha512-f7aCv7c+nU/3mF7NWLtVVr0Ra80RqsO89hO72r+Y/nvQr5+q0UFGkocElTH6MJApvReVh6JHUFYn2cw1WdHF3w==", - "requires": { - "dequal": "^2.0.3" - } - }, - "@restart/ui": { - "version": "1.6.9", - "resolved": "https://registry.npmjs.org/@restart/ui/-/ui-1.6.9.tgz", - "integrity": "sha512-mUbygUsJcRurjZCt1f77gg4DpheD1D+Sc7J3JjAkysUj7t8m4EBJVOqWC9788Qtbc69cJ+HlJc6jBguKwS8Mcw==", - "requires": { - "@babel/runtime": "^7.21.0", - "@popperjs/core": "^2.11.6", - "@react-aria/ssr": "^3.5.0", - "@restart/hooks": "^0.4.9", - "@types/warning": "^3.0.0", - "dequal": "^2.0.3", - "dom-helpers": "^5.2.0", - "uncontrollable": "^8.0.1", - "warning": "^4.0.3" - }, - "dependencies": { - "uncontrollable": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/uncontrollable/-/uncontrollable-8.0.4.tgz", - "integrity": "sha512-ulRWYWHvscPFc0QQXvyJjY6LIXU56f0h8pQFvhxiKk5V1fcI8gp9Ht9leVAhrVjzqMw0BgjspBINx9r6oyJUvQ==", - "requires": {} - } - } - }, - "@rollup/plugin-babel": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", - "integrity": "sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.10.4", - "@rollup/pluginutils": "^3.1.0" - } - }, - "@rollup/plugin-node-resolve": { - "version": "11.2.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz", - "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==", - "dev": true, - "requires": { - "@rollup/pluginutils": "^3.1.0", - "@types/resolve": "1.17.1", - "builtin-modules": "^3.1.0", - "deepmerge": "^4.2.2", - "is-module": "^1.0.0", - "resolve": "^1.19.0" - } - }, - "@rollup/plugin-replace": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", - "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", - "dev": true, - "requires": { - "@rollup/pluginutils": "^3.1.0", - "magic-string": "^0.25.7" - } - }, - "@rollup/pluginutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", - "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", - "dev": true, - "requires": { - "@types/estree": "0.0.39", - "estree-walker": "^1.0.1", - "picomatch": "^2.2.2" - }, - "dependencies": { - "@types/estree": { - "version": "0.0.39", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", - "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", - "dev": true - } - } - }, - "@rushstack/eslint-patch": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.2.0.tgz", - "integrity": "sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg==" - }, - "@sinclair/typebox": { - "version": "0.24.51", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", - "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==", - "dev": true - }, - "@sinonjs/commons": { - "version": "1.8.6", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", - "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==", - "dev": true, - "requires": { - "type-detect": "4.0.8" - } - }, - "@sinonjs/fake-timers": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", - "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", - "dev": true, - "requires": { - "@sinonjs/commons": "^1.7.0" - } - }, - "@surma/rollup-plugin-off-main-thread": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz", - "integrity": "sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==", - "dev": true, - "requires": { - "ejs": "^3.1.6", - "json5": "^2.2.0", - "magic-string": "^0.25.0", - "string.prototype.matchall": "^4.0.6" - } - }, - "@svgr/babel-plugin-add-jsx-attribute": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz", - "integrity": "sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg==", - "dev": true - }, - "@svgr/babel-plugin-remove-jsx-attribute": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz", - "integrity": "sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg==", - "dev": true - }, - "@svgr/babel-plugin-remove-jsx-empty-expression": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz", - "integrity": "sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA==", - "dev": true - }, - "@svgr/babel-plugin-replace-jsx-attribute-value": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz", - "integrity": "sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ==", - "dev": true - }, - "@svgr/babel-plugin-svg-dynamic-title": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz", - "integrity": "sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg==", - "dev": true - }, - "@svgr/babel-plugin-svg-em-dimensions": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz", - "integrity": "sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw==", - "dev": true - }, - "@svgr/babel-plugin-transform-react-native-svg": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz", - "integrity": "sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q==", - "dev": true - }, - "@svgr/babel-plugin-transform-svg-component": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz", - "integrity": "sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ==", - "dev": true - }, - "@svgr/babel-preset": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-5.5.0.tgz", - "integrity": "sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig==", - "dev": true, - "requires": { - "@svgr/babel-plugin-add-jsx-attribute": "^5.4.0", - "@svgr/babel-plugin-remove-jsx-attribute": "^5.4.0", - "@svgr/babel-plugin-remove-jsx-empty-expression": "^5.0.1", - "@svgr/babel-plugin-replace-jsx-attribute-value": "^5.0.1", - "@svgr/babel-plugin-svg-dynamic-title": "^5.4.0", - "@svgr/babel-plugin-svg-em-dimensions": "^5.4.0", - "@svgr/babel-plugin-transform-react-native-svg": "^5.4.0", - "@svgr/babel-plugin-transform-svg-component": "^5.5.0" - } - }, - "@svgr/core": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/core/-/core-5.5.0.tgz", - "integrity": "sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ==", - "dev": true, - "requires": { - "@svgr/plugin-jsx": "^5.5.0", - "camelcase": "^6.2.0", - "cosmiconfig": "^7.0.0" - } - }, - "@svgr/hast-util-to-babel-ast": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz", - "integrity": "sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ==", - "dev": true, - "requires": { - "@babel/types": "^7.12.6" - } - }, - "@svgr/plugin-jsx": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz", - "integrity": "sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA==", - "dev": true, - "requires": { - "@babel/core": "^7.12.3", - "@svgr/babel-preset": "^5.5.0", - "@svgr/hast-util-to-babel-ast": "^5.5.0", - "svg-parser": "^2.0.2" - } - }, - "@svgr/plugin-svgo": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz", - "integrity": "sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ==", - "dev": true, - "requires": { - "cosmiconfig": "^7.0.0", - "deepmerge": "^4.2.2", - "svgo": "^1.2.2" - }, - "dependencies": { - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "css-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", - "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", - "dev": true, - "requires": { - "boolbase": "^1.0.0", - "css-what": "^3.2.1", - "domutils": "^1.7.0", - "nth-check": "^1.0.2" - } - }, - "css-tree": { - "version": "1.0.0-alpha.37", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", - "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", - "dev": true, - "requires": { - "mdn-data": "2.0.4", - "source-map": "^0.6.1" - } - }, - "css-what": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", - "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", - "dev": true - }, - "dom-serializer": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", - "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", - "dev": true, - "requires": { - "domelementtype": "^2.0.1", - "entities": "^2.0.0" - } - }, - "domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", - "dev": true, - "requires": { - "dom-serializer": "0", - "domelementtype": "1" - }, - "dependencies": { - "domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", - "dev": true - } - } - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "mdn-data": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", - "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==", - "dev": true - }, - "nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", - "dev": true, - "requires": { - "boolbase": "~1.0.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "svgo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", - "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "coa": "^2.0.2", - "css-select": "^2.0.0", - "css-select-base-adapter": "^0.1.1", - "css-tree": "1.0.0-alpha.37", - "csso": "^4.0.2", - "js-yaml": "^3.13.1", - "mkdirp": "~0.5.1", - "object.values": "^1.1.0", - "sax": "~1.2.4", - "stable": "^0.1.8", - "unquote": "~1.1.1", - "util.promisify": "~1.0.0" - } - } - } - }, - "@svgr/webpack": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-5.5.0.tgz", - "integrity": "sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g==", - "dev": true, - "requires": { - "@babel/core": "^7.12.3", - "@babel/plugin-transform-react-constant-elements": "^7.12.1", - "@babel/preset-env": "^7.12.1", - "@babel/preset-react": "^7.12.5", - "@svgr/core": "^5.5.0", - "@svgr/plugin-jsx": "^5.5.0", - "@svgr/plugin-svgo": "^5.5.0", - "loader-utils": "^2.0.0" - } - }, - "@swc/helpers": { - "version": "0.5.11", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.11.tgz", - "integrity": "sha512-YNlnKRWF2sVojTpIyzwou9XoTNbzbzONwRhOoniEioF1AtaitTvVZblaQRrAzChWQ1bLYyYSWzM18y4WwgzJ+A==", - "requires": { - "tslib": "^2.4.0" - } - }, - "@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "dev": true - }, - "@trysound/sax": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", - "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==" - }, - "@tweenjs/tween.js": { - "version": "18.6.4", - "resolved": "https://registry.npmjs.org/@tweenjs/tween.js/-/tween.js-18.6.4.tgz", - "integrity": "sha512-lB9lMjuqjtuJrx7/kOkqQBtllspPIN+96OvTCeJ2j5FEzinoAXTdAMFnDAQT1KVPRlnYfBrqxtqP66vDM40xxQ==" - }, - "@types/babel__core": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.0.tgz", - "integrity": "sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==", - "dev": true, - "requires": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "@types/babel__generator": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", - "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", - "dev": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@types/babel__traverse": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.3.tgz", - "integrity": "sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w==", - "dev": true, - "requires": { - "@babel/types": "^7.3.0" - } - }, - "@types/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", - "dev": true, - "requires": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "@types/bonjour": { - "version": "3.5.10", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", - "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/connect-history-api-fallback": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz", - "integrity": "sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==", - "dev": true, - "requires": { - "@types/express-serve-static-core": "*", - "@types/node": "*" - } - }, - "@types/d3-array": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.0.4.tgz", - "integrity": "sha512-nwvEkG9vYOc0Ic7G7kwgviY4AQlTfYGIZ0fqB7CQHXGyYM6nO7kJh5EguSNA3jfh4rq7Sb7eMVq8isuvg2/miQ==" - }, - "@types/d3-color": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.0.tgz", - "integrity": "sha512-HKuicPHJuvPgCD+np6Se9MQvS6OCbJmOjGvylzMJRlDwUXjKTTXs6Pwgk79O09Vj/ho3u1ofXnhFOaEWWPrlwA==" - }, - "@types/d3-ease": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.0.tgz", - "integrity": "sha512-aMo4eaAOijJjA6uU+GIeW018dvy9+oH5Y2VPPzjjfxevvGQ/oRDs+tfYC9b50Q4BygRR8yE2QCLsrT0WtAVseA==" - }, - "@types/d3-interpolate": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.1.tgz", - "integrity": "sha512-jx5leotSeac3jr0RePOH1KdR9rISG91QIE4Q2PYTu4OymLTZfA3SrnURSLzKH48HmXVUru50b8nje4E79oQSQw==", - "requires": { - "@types/d3-color": "*" - } - }, - "@types/d3-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.0.0.tgz", - "integrity": "sha512-0g/A+mZXgFkQxN3HniRDbXMN79K3CdTpLsevj+PXiTcb2hVyvkZUBg37StmgCQkaD84cUJ4uaDAWq7UJOQy2Tg==" - }, - "@types/d3-scale": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.3.tgz", - "integrity": "sha512-PATBiMCpvHJSMtZAMEhc2WyL+hnzarKzI6wAHYjhsonjWJYGq5BXTzQjv4l8m2jO183/4wZ90rKvSeT7o72xNQ==", - "requires": { - "@types/d3-time": "*" - } - }, - "@types/d3-shape": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.1.tgz", - "integrity": "sha512-6Uh86YFF7LGg4PQkuO2oG6EMBRLuW9cbavUW46zkIO5kuS2PfTqo2o9SkgtQzguBHbLgNnU90UNsITpsX1My+A==", - "requires": { - "@types/d3-path": "*" - } - }, - "@types/d3-time": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.0.tgz", - "integrity": "sha512-sZLCdHvBUcNby1cB6Fd3ZBrABbjz3v1Vm90nysCQ6Vt7vd6e/h9Lt7SiJUoEX0l4Dzc7P5llKyhqSi1ycSf1Hg==" - }, - "@types/d3-timer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.0.tgz", - "integrity": "sha512-HNB/9GHqu7Fo8AQiugyJbv6ZxYz58wef0esl4Mv828w1ZKpAshw/uFWVDUcIB9KKFeFKoxS3cHY07FFgtTRZ1g==" - }, - "@types/eslint": { - "version": "8.21.0", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.21.0.tgz", - "integrity": "sha512-35EhHNOXgxnUgh4XCJsGhE7zdlDhYDN/aMG6UbkByCFFNgQ7b3U+uVoqBpicFydR8JEfgdjCF7SJ7MiJfzuiTA==", - "dev": true, - "requires": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "@types/eslint-scope": { - "version": "3.7.4", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", - "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", - "dev": true, - "requires": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "@types/estree": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", - "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==", - "dev": true - }, - "@types/express": { - "version": "4.17.16", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.16.tgz", - "integrity": "sha512-LkKpqRZ7zqXJuvoELakaFYuETHjZkSol8EV6cNnyishutDBCCdv6+dsKPbKkCcIk57qRphOLY5sEgClw1bO3gA==", - "dev": true, - "requires": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.31", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "@types/express-serve-static-core": { - "version": "4.17.33", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.33.tgz", - "integrity": "sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA==", - "dev": true, - "requires": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*" - } - }, - "@types/graceful-fs": { - "version": "4.1.6", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz", - "integrity": "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", - "dev": true - }, - "@types/http-proxy": { - "version": "1.17.9", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.9.tgz", - "integrity": "sha512-QsbSjA/fSk7xB+UXlCT3wHBy5ai9wOcNDWwZAtud+jXhwOM3l+EYZh8Lng4+/6n8uar0J7xILzqftJdJ/Wdfkw==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", - "dev": true - }, - "@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*" - } - }, - "@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", - "dev": true, - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==" - }, - "@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==" - }, - "@types/mime": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", - "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==", - "dev": true - }, - "@types/node": { - "version": "18.11.18", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz", - "integrity": "sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==", - "dev": true - }, - "@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" - }, - "@types/prettier": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.2.tgz", - "integrity": "sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==", - "dev": true - }, - "@types/prop-types": { - "version": "15.7.12", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", - "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==" - }, - "@types/q": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.5.tgz", - "integrity": "sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ==", - "dev": true - }, - "@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", - "dev": true - }, - "@types/range-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", - "dev": true - }, - "@types/react": { - "version": "18.0.27", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.27.tgz", - "integrity": "sha512-3vtRKHgVxu3Jp9t718R9BuzoD4NcQ8YJ5XRzsSKxNDiDonD2MXIT1TmSkenxuCycZJoQT5d2vE8LwWJxBC1gmA==", - "requires": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "@types/react-transition-group": { - "version": "4.4.10", - "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.10.tgz", - "integrity": "sha512-hT/+s0VQs2ojCX823m60m5f0sL5idt9SO6Tj6Dg+rdphGPIeJbJ6CxvBYkgkGKrYeDjvIpKTR38UzmtHJOGW3Q==", - "requires": { - "@types/react": "*" - } - }, - "@types/resolve": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", - "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", - "dev": true - }, - "@types/scheduler": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", - "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" - }, - "@types/semver": { - "version": "7.3.13", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", - "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==" - }, - "@types/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", - "dev": true, - "requires": { - "@types/express": "*" - } - }, - "@types/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==", - "dev": true, - "requires": { - "@types/mime": "*", - "@types/node": "*" - } - }, - "@types/sockjs": { - "version": "0.3.33", - "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", - "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/stack-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", - "dev": true - }, - "@types/trusted-types": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.2.tgz", - "integrity": "sha512-F5DIZ36YVLE+PN+Zwws4kJogq47hNgX3Nx6WyDJ3kcplxyke3XIzB8uK5n/Lpm1HBsbGzd6nmGehL8cPekP+Tg==", - "dev": true - }, - "@types/warning": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/warning/-/warning-3.0.3.tgz", - "integrity": "sha512-D1XC7WK8K+zZEveUPY+cf4+kgauk8N4eHr/XIHXGlGYkHLud6hK9lYfZk1ry1TNh798cZUCgb6MqGEG8DkJt6Q==" - }, - "@types/ws": { - "version": "8.5.4", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.4.tgz", - "integrity": "sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/yargs": { - "version": "16.0.5", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", - "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", - "dev": true - }, - "@typescript-eslint/eslint-plugin": { - "version": "5.50.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.50.0.tgz", - "integrity": "sha512-vwksQWSFZiUhgq3Kv7o1Jcj0DUNylwnIlGvKvLLYsq8pAWha6/WCnXUeaSoNNha/K7QSf2+jvmkxggC1u3pIwQ==", - "requires": { - "@typescript-eslint/scope-manager": "5.50.0", - "@typescript-eslint/type-utils": "5.50.0", - "@typescript-eslint/utils": "5.50.0", - "debug": "^4.3.4", - "grapheme-splitter": "^1.0.4", - "ignore": "^5.2.0", - "natural-compare-lite": "^1.4.0", - "regexpp": "^3.2.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" - } - }, - "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "requires": { - "lru-cache": "^6.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - } - } - }, - "@typescript-eslint/experimental-utils": { - "version": "5.50.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.50.0.tgz", - "integrity": "sha512-gZIhzNRivy0RVqcxjKnQ+ipGc0qolilhBeNmvH+Dvu7Vymug+IfiYxTj2zM7mIlHsw6Q5aH7L7WmuTE3tZyzag==", - "requires": { - "@typescript-eslint/utils": "5.50.0" - } - }, - "@typescript-eslint/parser": { - "version": "5.50.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.50.0.tgz", - "integrity": "sha512-KCcSyNaogUDftK2G9RXfQyOCt51uB5yqC6pkUYqhYh8Kgt+DwR5M0EwEAxGPy/+DH6hnmKeGsNhiZRQxjH71uQ==", - "requires": { - "@typescript-eslint/scope-manager": "5.50.0", - "@typescript-eslint/types": "5.50.0", - "@typescript-eslint/typescript-estree": "5.50.0", - "debug": "^4.3.4" - } - }, - "@typescript-eslint/scope-manager": { - "version": "5.50.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.50.0.tgz", - "integrity": "sha512-rt03kaX+iZrhssaT974BCmoUikYtZI24Vp/kwTSy841XhiYShlqoshRFDvN1FKKvU2S3gK+kcBW1EA7kNUrogg==", - "requires": { - "@typescript-eslint/types": "5.50.0", - "@typescript-eslint/visitor-keys": "5.50.0" - } - }, - "@typescript-eslint/type-utils": { - "version": "5.50.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.50.0.tgz", - "integrity": "sha512-dcnXfZ6OGrNCO7E5UY/i0ktHb7Yx1fV6fnQGGrlnfDhilcs6n19eIRcvLBqx6OQkrPaFlDPk3OJ0WlzQfrV0bQ==", - "requires": { - "@typescript-eslint/typescript-estree": "5.50.0", - "@typescript-eslint/utils": "5.50.0", - "debug": "^4.3.4", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/types": { - "version": "5.50.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.50.0.tgz", - "integrity": "sha512-atruOuJpir4OtyNdKahiHZobPKFvZnBnfDiyEaBf6d9vy9visE7gDjlmhl+y29uxZ2ZDgvXijcungGFjGGex7w==" - }, - "@typescript-eslint/typescript-estree": { - "version": "5.50.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.50.0.tgz", - "integrity": "sha512-Gq4zapso+OtIZlv8YNAStFtT6d05zyVCK7Fx3h5inlLBx2hWuc/0465C2mg/EQDDU2LKe52+/jN4f0g9bd+kow==", - "requires": { - "@typescript-eslint/types": "5.50.0", - "@typescript-eslint/visitor-keys": "5.50.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" - } - }, - "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "requires": { - "lru-cache": "^6.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - } - } - }, - "@typescript-eslint/utils": { - "version": "5.50.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.50.0.tgz", - "integrity": "sha512-v/AnUFImmh8G4PH0NDkf6wA8hujNNcrwtecqW4vtQ1UOSNBaZl49zP1SHoZ/06e+UiwzHpgb5zP5+hwlYYWYAw==", - "requires": { - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.50.0", - "@typescript-eslint/types": "5.50.0", - "@typescript-eslint/typescript-estree": "5.50.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0", - "semver": "^7.3.7" - }, - "dependencies": { - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" - } - }, - "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "requires": { - "lru-cache": "^6.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - } - } - }, - "@typescript-eslint/visitor-keys": { - "version": "5.50.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.50.0.tgz", - "integrity": "sha512-cdMeD9HGu6EXIeGOh2yVW6oGf9wq8asBgZx7nsR/D36gTfQ0odE5kcRYe5M81vjEFAcPeugXrHg78Imu55F6gg==", - "requires": { - "@typescript-eslint/types": "5.50.0", - "eslint-visitor-keys": "^3.3.0" - } - }, - "@ungap/custom-elements": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@ungap/custom-elements/-/custom-elements-1.1.1.tgz", - "integrity": "sha512-IQ8tbO+A1EdUCphlOtwF3TnpYL17bpXmwh+J6KFnuAzGPgjoL/twp6nkmTm80XREtgvfeO4s6/+z0AXQMrjcdw==" - }, - "@webassemblyjs/ast": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", - "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", - "dev": true, - "requires": { - "@webassemblyjs/helper-numbers": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1" - } - }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", - "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", - "dev": true - }, - "@webassemblyjs/helper-api-error": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", - "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", - "dev": true - }, - "@webassemblyjs/helper-buffer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", - "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", - "dev": true - }, - "@webassemblyjs/helper-numbers": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", - "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", - "dev": true, - "requires": { - "@webassemblyjs/floating-point-hex-parser": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", - "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", - "dev": true - }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", - "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1" - } - }, - "@webassemblyjs/ieee754": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", - "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", - "dev": true, - "requires": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "@webassemblyjs/leb128": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", - "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", - "dev": true, - "requires": { - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/utf8": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", - "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", - "dev": true - }, - "@webassemblyjs/wasm-edit": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", - "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/helper-wasm-section": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-opt": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "@webassemblyjs/wast-printer": "1.11.1" - } - }, - "@webassemblyjs/wasm-gen": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", - "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "@webassemblyjs/wasm-opt": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", - "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1" - } - }, - "@webassemblyjs/wasm-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", - "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "@webassemblyjs/wast-printer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", - "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true - }, - "@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true - }, - "3d-force-graph": { - "version": "1.70.20", - "resolved": "https://registry.npmjs.org/3d-force-graph/-/3d-force-graph-1.70.20.tgz", - "integrity": "sha512-yu0b2+FEsBOsxJ8z0bGkFGHj0MlA+83MPZo9z0oGWgzPgnWpuwbYOHkNAX0x89cSOq9GQwDwEIjt7H2cUbclCQ==", - "requires": { - "accessor-fn": "1", - "kapsule": "^1.13", - "three": ">=0.118 <1", - "three-forcegraph": "^1.41", - "three-render-objects": "^1.27" - } - }, - "3d-force-graph-ar": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/3d-force-graph-ar/-/3d-force-graph-ar-1.7.5.tgz", - "integrity": "sha512-4aZafpHHAqn04tbb54Qsi3weBnZJhpnZNfO3RWTNAG29O5VamXxWOGpEHzTtKFi8Svr9D8Ath0UeFAMsiXqL0Q==", - "requires": { - "aframe-forcegraph-component": "^3.0", - "kapsule": "^1.13" - } - }, - "3d-force-graph-vr": { - "version": "2.0.16", - "resolved": "https://registry.npmjs.org/3d-force-graph-vr/-/3d-force-graph-vr-2.0.16.tgz", - "integrity": "sha512-AHrQbiC907F9+kLKwVFsrTYuUgPAROl4XU+oNFVBst7HeutkfaRMg4ME7QDaM3KzLP7Me3jx3D+S7eO6C5CuqQ==", - "requires": { - "accessor-fn": "1", - "aframe": "^1.3", - "aframe-extras": "^6.1", - "aframe-forcegraph-component": "^3.0", - "kapsule": "^1.13", - "polished": "^4.2.2" - } - }, - "abab": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", - "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", - "dev": true - }, - "accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dev": true, - "requires": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - } - }, - "accessor-fn": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/accessor-fn/-/accessor-fn-1.3.2.tgz", - "integrity": "sha512-W4/Lj/gry8AHy+IC7Havr7fNbphHDzVAiZd5h10g8LRRz6ZKla3A1/lkFqoV1jh13R0eJLGWjDBlRGK36fcWiw==" - }, - "acorn": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", - "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==" - }, - "acorn-globals": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", - "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", - "dev": true, - "requires": { - "acorn": "^7.1.1", - "acorn-walk": "^7.1.1" - }, - "dependencies": { - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true - } - } - }, - "acorn-import-assertions": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", - "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", - "dev": true, - "requires": {} - }, - "acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "requires": {} - }, - "acorn-node": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", - "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", - "dev": true, - "requires": { - "acorn": "^7.0.0", - "acorn-walk": "^7.0.0", - "xtend": "^4.0.2" - }, - "dependencies": { - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true - } - } - }, - "acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", - "dev": true - }, - "address": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/address/-/address-1.2.2.tgz", - "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==", - "dev": true - }, - "adjust-sourcemap-loader": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", - "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", - "dev": true, - "requires": { - "loader-utils": "^2.0.0", - "regex-parser": "^2.2.11" - } - }, - "aframe": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/aframe/-/aframe-1.4.1.tgz", - "integrity": "sha512-lMgjxEJkXCHf4aXI8O3Xoz4xcQwQjz2jZv61RUDhj+neMqBiTGuDW6mUV3S2aer7YXL/fykp1jadaM+nEPd8qA==", - "requires": { - "@ungap/custom-elements": "^1.1.0", - "buffer": "^6.0.3", - "custom-event-polyfill": "^1.0.6", - "debug": "github:ngokevin/debug#noTimestamp", - "deep-assign": "^2.0.0", - "load-bmfont": "^1.2.3", - "object-assign": "^4.0.1", - "present": "0.0.6", - "promise-polyfill": "^3.1.0", - "super-animejs": "^3.1.0", - "super-three": "^0.147.1", - "three-bmfont-text": "github:dmarcos/three-bmfont-text#21d017046216e318362c48abd1a48bddfb6e0733", - "webvr-polyfill": "^0.10.12" - }, - "dependencies": { - "debug": { - "version": "git+ssh://git@github.com/ngokevin/debug.git#ef5f8e66d49ce8bc64c6f282c15f8b7164409e3a", - "from": "debug@github:ngokevin/debug#noTimestamp" - } - } - }, - "aframe-extras": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/aframe-extras/-/aframe-extras-6.1.1.tgz", - "integrity": "sha512-w3o3sKfQG+cwe1ZoKUxvMLehh0D/MlvFZeg2XuyIto+Nrs/kGLPcb/fsI5DXM4jociZ3wVQfqcA1BVF+0Nq45A==", - "requires": { - "three-pathfinding": "^0.7.0" - } - }, - "aframe-forcegraph-component": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/aframe-forcegraph-component/-/aframe-forcegraph-component-3.0.6.tgz", - "integrity": "sha512-z1qhyahdWEazfaI8XBU4q7LyADAYvYjCoRbD2bQ5nm4h1YQvw2zz4vwl06E9MSXsgkD8cN3rlOMhFHXNe+abyQ==", - "requires": { - "accessor-fn": "1", - "three-forcegraph": "^1.39" - } - }, - "agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "requires": { - "debug": "4" - } - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "dev": true, - "requires": { - "ajv": "^8.0.0" - }, - "dependencies": { - "ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - } - } - }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "requires": {} - }, - "an-array": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/an-array/-/an-array-1.0.0.tgz", - "integrity": "sha512-M175GYI7RmsYu24Ok383yZQa3eveDfNnmhTe3OQ3bm70bEovz2gWenH+ST/n32M8lrwLWk74hcPds5CDRPe2wg==" - }, - "ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "requires": { - "type-fest": "^0.21.3" - } - }, - "ansi-html-community": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", - "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", - "dev": true - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "arg": { + "node_modules/zustand": { "version": "5.0.2", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", - "dev": true - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "aria-query": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", - "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", - "requires": { - "deep-equal": "^2.0.5" - } - }, - "array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", - "dev": true - }, - "array-includes": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", - "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", - "is-string": "^1.0.7" - } - }, - "array-shuffle": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-shuffle/-/array-shuffle-1.0.1.tgz", - "integrity": "sha512-PBqgo1Y2XWSksBzq3GFPEb798ZrW2snAcmr4drbVeF/6MT/5aBlkGJEvu5A/CzXHf4EjbHOj/ZowatjlIiVidA==" - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" - }, - "array.prototype.flat": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", - "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0" - } - }, - "array.prototype.flatmap": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", - "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0" - } - }, - "array.prototype.reduce": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.5.tgz", - "integrity": "sha512-kDdugMl7id9COE8R7MHF5jWk7Dqt/fs4Pv+JXoICnYwqpjjjbUurz6w5fT5IG6brLdJhv6/VoHB0H7oyIBXd+Q==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-array-method-boxes-properly": "^1.0.0", - "is-string": "^1.0.7" - } - }, - "array.prototype.tosorted": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz", - "integrity": "sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.1.3" - } - }, - "as-number": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/as-number/-/as-number-1.0.0.tgz", - "integrity": "sha512-HkI/zLo2AbSRO4fqVkmyf3hms0bJDs3iboHqTrNuwTiCRvdYXM7HFhfhB6Dk51anV2LM/IMB83mtK9mHw4FlAg==" - }, - "asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "dev": true - }, - "ast-types-flow": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", - "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==" - }, - "async": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true - }, - "at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true - }, - "autoprefixer": { - "version": "10.4.13", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.13.tgz", - "integrity": "sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==", - "dev": true, - "requires": { - "browserslist": "^4.21.4", - "caniuse-lite": "^1.0.30001426", - "fraction.js": "^4.2.0", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", - "postcss-value-parser": "^4.2.0" - } - }, - "available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==" - }, - "axe-core": { - "version": "4.6.3", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.6.3.tgz", - "integrity": "sha512-/BQzOX780JhsxDnPpH4ZiyrJAzcd8AfzFPkv+89veFSr1rcMjuq2JDCwypKaPeB6ljHp9KjXhPpjgCvQlWYuqg==" - }, - "axobject-query": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.1.1.tgz", - "integrity": "sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg==", - "requires": { - "deep-equal": "^2.0.5" - } - }, - "babel-jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz", - "integrity": "sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==", - "dev": true, - "requires": { - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^27.5.1", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" + "resolved": "https://registry.npmjs.org/zustand/-/zustand-5.0.2.tgz", + "integrity": "sha512-8qNdnJVJlHlrKXi50LDqqUNmUbuBjoKLrYQBnoChIbVph7vni+sY+YpvdjXG9YLd/Bxr6scMcR+rm5H3aSqPaw==", + "license": "MIT", + "engines": { + "node": ">=12.20.0" }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "babel-loader": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz", - "integrity": "sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==", - "dev": true, - "requires": { - "find-cache-dir": "^3.3.1", - "loader-utils": "^2.0.0", - "make-dir": "^3.1.0", - "schema-utils": "^2.6.5" + "peerDependencies": { + "@types/react": ">=18.0.0", + "immer": ">=9.0.6", + "react": ">=18.0.0", + "use-sync-external-store": ">=1.2.0" }, - "dependencies": { - "schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - } - } - } - }, - "babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - } - }, - "babel-plugin-jest-hoist": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz", - "integrity": "sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==", - "dev": true, - "requires": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.0.0", - "@types/babel__traverse": "^7.0.6" - } - }, - "babel-plugin-macros": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", - "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", - "requires": { - "@babel/runtime": "^7.12.5", - "cosmiconfig": "^7.0.0", - "resolve": "^1.19.0" - } - }, - "babel-plugin-named-asset-import": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.8.tgz", - "integrity": "sha512-WXiAc++qo7XcJ1ZnTYGtLxmBCVbddAml3CEXgWaBzNzLNoxtQ8AiGEFDMOhot9XjTCQbvP5E77Fj9Gk924f00Q==", - "dev": true, - "requires": {} - }, - "babel-plugin-polyfill-corejs2": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", - "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", - "requires": { - "@babel/compat-data": "^7.17.7", - "@babel/helper-define-polyfill-provider": "^0.3.3", - "semver": "^6.1.1" - } - }, - "babel-plugin-polyfill-corejs3": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", - "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==", - "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.3", - "core-js-compat": "^3.25.1" - } - }, - "babel-plugin-polyfill-regenerator": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", - "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==", - "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.3" - } - }, - "babel-plugin-styled-components": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/babel-plugin-styled-components/-/babel-plugin-styled-components-2.0.7.tgz", - "integrity": "sha512-i7YhvPgVqRKfoQ66toiZ06jPNA3p6ierpfUuEWxNF+fV27Uv5gxBkf8KZLHUCc1nFA9j6+80pYoIpqCeyW3/bA==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.16.0", - "@babel/helper-module-imports": "^7.16.0", - "babel-plugin-syntax-jsx": "^6.18.0", - "lodash": "^4.17.11", - "picomatch": "^2.3.0" - } - }, - "babel-plugin-syntax-jsx": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz", - "integrity": "sha512-qrPaCSo9c8RHNRHIotaufGbuOBN8rtdC4QrrFFc43vyWCCz7Kl7GL1PGaXtMGQZUXrkCjNEgxDfmAuAabr/rlw==" - }, - "babel-plugin-transform-react-remove-prop-types": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz", - "integrity": "sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==" - }, - "babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", - "dev": true, - "requires": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" - } - }, - "babel-preset-jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz", - "integrity": "sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==", - "dev": true, - "requires": { - "babel-plugin-jest-hoist": "^27.5.1", - "babel-preset-current-node-syntax": "^1.0.0" - } - }, - "babel-preset-react-app": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-react-app/-/babel-preset-react-app-10.0.1.tgz", - "integrity": "sha512-b0D9IZ1WhhCWkrTXyFuIIgqGzSkRIH5D5AmB0bXbzYAB1OBAwHcUeyWW2LorutLWF5btNo/N7r/cIdmvvKJlYg==", - "requires": { - "@babel/core": "^7.16.0", - "@babel/plugin-proposal-class-properties": "^7.16.0", - "@babel/plugin-proposal-decorators": "^7.16.4", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.0", - "@babel/plugin-proposal-numeric-separator": "^7.16.0", - "@babel/plugin-proposal-optional-chaining": "^7.16.0", - "@babel/plugin-proposal-private-methods": "^7.16.0", - "@babel/plugin-transform-flow-strip-types": "^7.16.0", - "@babel/plugin-transform-react-display-name": "^7.16.0", - "@babel/plugin-transform-runtime": "^7.16.4", - "@babel/preset-env": "^7.16.4", - "@babel/preset-react": "^7.16.0", - "@babel/preset-typescript": "^7.16.0", - "@babel/runtime": "^7.16.3", - "babel-plugin-macros": "^3.1.0", - "babel-plugin-transform-react-remove-prop-types": "^0.4.24" - } - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" - }, - "batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", - "dev": true - }, - "batch-processor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/batch-processor/-/batch-processor-1.0.0.tgz", - "integrity": "sha512-xoLQD8gmmR32MeuBHgH0Tzd5PuSZx71ZsbhVxOCRbgktZEPe4SQy7s9Z50uPp0F/f7iw2XmkHN2xkgbMfckMDA==" - }, - "bezier-js": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/bezier-js/-/bezier-js-6.1.0.tgz", - "integrity": "sha512-oc8fkHqG0R+dQuNiXVbPMB0cc8iDqkLAjbA2gq26QmV8tZqW9GGI7iNEX1ioRWlZperQS7v5BX03+9FLVWZbSw==" - }, - "bfj": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/bfj/-/bfj-7.0.2.tgz", - "integrity": "sha512-+e/UqUzwmzJamNF50tBV6tZPTORow7gQ96iFow+8b562OdMpEK0BcJEq2OSPEDmAbSMBQ7PKZ87ubFkgxpYWgw==", - "dev": true, - "requires": { - "bluebird": "^3.5.5", - "check-types": "^11.1.1", - "hoopy": "^0.1.4", - "tryer": "^1.0.1" - } - }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true - }, - "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true - }, - "body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", - "dev": true, - "requires": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "dependencies": { - "bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - } - } - }, - "bonjour-service": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.1.0.tgz", - "integrity": "sha512-LVRinRB3k1/K0XzZ2p58COnWvkQknIY6sf0zF2rpErvcJXpMBttEPQSxK+HEXSS9VmpZlDoDnQWv8ftJT20B0Q==", - "dev": true, - "requires": { - "array-flatten": "^2.1.2", - "dns-equal": "^1.0.0", - "fast-deep-equal": "^3.1.3", - "multicast-dns": "^7.2.5" - } - }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" - }, - "bootstrap": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.2.3.tgz", - "integrity": "sha512-cEKPM+fwb3cT8NzQZYEu4HilJ3anCrWqh3CHAok1p9jXqMPsPTBhU25fBckEJHJ/p+tTxTFTsFQGM+gaHpi3QQ==", - "requires": {} - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "requires": { - "fill-range": "^7.0.1" - } - }, - "browser-process-hrtime": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", - "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", - "dev": true - }, - "browserslist": { - "version": "4.21.5", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", - "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", - "requires": { - "caniuse-lite": "^1.0.30001449", - "electron-to-chromium": "^1.4.284", - "node-releases": "^2.0.8", - "update-browserslist-db": "^1.0.10" - } - }, - "bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, - "requires": { - "node-int64": "^0.4.0" - } - }, - "buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "buffer-equal": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz", - "integrity": "sha512-RgSV6InVQ9ODPdLWJ5UAqBqJBOg370Nz6ZQtRzpt6nUjc8v0St97uJ4PYC6NztqIScrAXafKM3mZPMygSe1ggA==" - }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "buffer-to-arraybuffer": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz", - "integrity": "sha512-3dthu5CYiVB1DEJp61FtApNnNndTckcqe4pFcLdvHtrpG+kcyekCJKg4MRiDcFW7A6AODnXB9U4dwQiCW5kzJQ==" - }, - "builtin-modules": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", - "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", - "dev": true - }, - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", - "dev": true - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" - }, - "camel-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", - "dev": true, - "requires": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" - } - }, - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true - }, - "camelcase-css": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", - "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", - "dev": true - }, - "camelize": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.1.tgz", - "integrity": "sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==" - }, - "caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", - "dev": true, - "requires": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" - } - }, - "caniuse-lite": { - "version": "1.0.30001651", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001651.tgz", - "integrity": "sha512-9Cf+Xv1jJNe1xPZLGuUXLNkE1BoDkqRqYyFJ9TDYSqhduqA4hu4oR9HluGoWYQC/aj8WHjsGVV+bwkh0+tegRg==" - }, - "canvas-color-tracker": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/canvas-color-tracker/-/canvas-color-tracker-1.1.6.tgz", - "integrity": "sha512-LpKiona7TwN0rpLgGcdvAw/HVV9HGCSSyOoSJkLyUP+VZmTX2uAnunGVoKrEHQ/7i+lyu6HfazdHV93vLrjK5Q==", - "requires": { - "tinycolor2": "^1.4.2" - } - }, - "cardboard-vr-display": { - "version": "1.0.19", - "resolved": "https://registry.npmjs.org/cardboard-vr-display/-/cardboard-vr-display-1.0.19.tgz", - "integrity": "sha512-+MjcnWKAkb95p68elqZLDPzoiF/dGncQilLGvPBM5ZorABp/ao3lCs7nnRcYBckmuNkg1V/5rdGDKoUaCVsHzQ==", - "requires": { - "gl-preserve-state": "^1.0.0", - "nosleep.js": "^0.7.0", - "webvr-polyfill-dpdb": "^1.0.17" - } - }, - "case-sensitive-paths-webpack-plugin": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz", - "integrity": "sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==", - "dev": true - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" - } - } - }, - "char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "dev": true - }, - "check-types": { - "version": "11.2.2", - "resolved": "https://registry.npmjs.org/check-types/-/check-types-11.2.2.tgz", - "integrity": "sha512-HBiYvXvn9Z70Z88XKjz3AEKd4HJhBXsa3j7xFnITAzoS8+q6eIGi8qDB8FKPBAjtuxjI/zFpwuiCb8oDtKOYrA==", - "dev": true - }, - "chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "dependencies": { - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - } - } - }, - "chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "dev": true - }, - "ci-info": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.7.1.tgz", - "integrity": "sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w==", - "dev": true - }, - "cjs-module-lexer": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", - "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", - "dev": true - }, - "classnames": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.2.tgz", - "integrity": "sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==" - }, - "clean-css": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.2.tgz", - "integrity": "sha512-JVJbM+f3d3Q704rF4bqQ5UUyTtuJ0JRKNbTKVEeujCCBoMdkEi+V+e8oktO9qGQNSvHrFTM6JZRXrUvGR1czww==", - "dev": true, - "requires": { - "source-map": "~0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "clsx": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", - "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==" - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", - "dev": true - }, - "coa": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", - "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", - "dev": true, - "requires": { - "@types/q": "^1.5.1", - "chalk": "^2.4.1", - "q": "^1.1.2" - } - }, - "collect-v8-coverage": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", - "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", - "dev": true - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "colord": { - "version": "2.9.3", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", - "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", - "dev": true - }, - "colorette": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", - "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", - "dev": true - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "dev": true - }, - "common-path-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", - "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", - "dev": true - }, - "common-tags": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", - "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", - "dev": true - }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", - "dev": true - }, - "compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "dev": true, - "requires": { - "mime-db": ">= 1.43.0 < 2" - } - }, - "compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", - "dev": true, - "requires": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - } - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "confusing-browser-globals": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", - "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==" - }, - "connect-history-api-fallback": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", - "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", - "dev": true - }, - "content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dev": true, - "requires": { - "safe-buffer": "5.2.1" - } - }, - "content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "dev": true - }, - "convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" - }, - "cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", - "dev": true - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", - "dev": true - }, - "core-js": { - "version": "3.27.2", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.27.2.tgz", - "integrity": "sha512-9ashVQskuh5AZEZ1JdQWp1GqSoC1e1G87MzRqg2gIfVAQ7Qn9K+uFj8EcniUFA4P2NLZfV+TOlX1SzoKfo+s7w==", - "dev": true - }, - "core-js-compat": { - "version": "3.27.2", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.27.2.tgz", - "integrity": "sha512-welaYuF7ZtbYKGrIy7y3eb40d37rG1FvzEOfe7hSLd2iD6duMDqUhRfSvCGyC46HhR6Y8JXXdZ2lnRUMkPBpvg==", - "requires": { - "browserslist": "^4.21.4" - } - }, - "core-js-pure": { - "version": "3.27.2", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.27.2.tgz", - "integrity": "sha512-Cf2jqAbXgWH3VVzjyaaFkY1EBazxugUepGymDoeteyYr9ByX51kD2jdHZlsEF/xnJMyN3Prua7mQuzwMg6Zc9A==", - "dev": true - }, - "core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "cosmiconfig": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", - "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - } - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", - "dev": true - }, - "css-blank-pseudo": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-3.0.3.tgz", - "integrity": "sha512-VS90XWtsHGqoM0t4KpH053c4ehxZ2E6HtGI7x68YFV0pTo/QmkV/YFA+NnlvK8guxZVNWGQhVNJGC39Q8XF4OQ==", - "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.9" - } - }, - "css-color-keywords": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz", - "integrity": "sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==" - }, - "css-declaration-sorter": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.3.1.tgz", - "integrity": "sha512-fBffmak0bPAnyqc/HO8C3n2sHrp9wcqQz6ES9koRF2/mLOVAx9zIQ3Y7R29sYCteTPqMCwns4WYQoCX91Xl3+w==", - "dev": true, - "requires": {} - }, - "css-has-pseudo": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-3.0.4.tgz", - "integrity": "sha512-Vse0xpR1K9MNlp2j5w1pgWIJtm1a8qS0JwS9goFYcImjlHEmywP9VUF05aGBXzGpDJF86QXk4L0ypBmwPhGArw==", - "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.9" - } - }, - "css-loader": { - "version": "6.7.3", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.7.3.tgz", - "integrity": "sha512-qhOH1KlBMnZP8FzRO6YCH9UHXQhVMcEGLyNdb7Hv2cpcmJbW0YrddO+tG1ab5nT41KpHIYGsbeHqxB9xPu1pKQ==", - "dev": true, - "requires": { - "icss-utils": "^5.1.0", - "postcss": "^8.4.19", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.0", - "postcss-modules-scope": "^3.0.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.2.0", - "semver": "^7.3.8" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "css-minimizer-webpack-plugin": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.4.1.tgz", - "integrity": "sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q==", - "dev": true, - "requires": { - "cssnano": "^5.0.6", - "jest-worker": "^27.0.2", - "postcss": "^8.3.5", - "schema-utils": "^4.0.0", - "serialize-javascript": "^6.0.0", - "source-map": "^0.6.1" - }, - "dependencies": { - "ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.3" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "css-prefers-color-scheme": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-6.0.3.tgz", - "integrity": "sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==", - "dev": true, - "requires": {} - }, - "css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", - "dev": true, - "requires": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - } - }, - "css-select-base-adapter": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", - "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==", - "dev": true - }, - "css-to-react-native": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.1.0.tgz", - "integrity": "sha512-AryfkFA29b4I3vG7N4kxFboq15DxwSXzhXM37XNEjwJMgjYIc8BcqfiprpAqX0zadI5PMByEIwAMzXxk5Vcc4g==", - "requires": { - "camelize": "^1.0.0", - "css-color-keywords": "^1.0.0", - "postcss-value-parser": "^4.0.2" - } - }, - "css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==" - }, - "cssdb": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-7.4.1.tgz", - "integrity": "sha512-0Q8NOMpXJ3iTDDbUv9grcmQAfdDx4qz+fN/+Md2FGbevT+6+bJNQ2LjB2YIUlLbpBTM32idU1Sb+tb/uGt6/XQ==", - "dev": true - }, - "cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true - }, - "cssnano": { - "version": "5.1.14", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.14.tgz", - "integrity": "sha512-Oou7ihiTocbKqi0J1bB+TRJIQX5RMR3JghA8hcWSw9mjBLQ5Y3RWqEDoYG3sRNlAbCIXpqMoZGbq5KDR3vdzgw==", - "dev": true, - "requires": { - "cssnano-preset-default": "^5.2.13", - "lilconfig": "^2.0.3", - "yaml": "^1.10.2" - } - }, - "cssnano-preset-default": { - "version": "5.2.13", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.13.tgz", - "integrity": "sha512-PX7sQ4Pb+UtOWuz8A1d+Rbi+WimBIxJTRyBdgGp1J75VU0r/HFQeLnMYgHiCAp6AR4rqrc7Y4R+1Rjk3KJz6DQ==", - "dev": true, - "requires": { - "css-declaration-sorter": "^6.3.1", - "cssnano-utils": "^3.1.0", - "postcss-calc": "^8.2.3", - "postcss-colormin": "^5.3.0", - "postcss-convert-values": "^5.1.3", - "postcss-discard-comments": "^5.1.2", - "postcss-discard-duplicates": "^5.1.0", - "postcss-discard-empty": "^5.1.1", - "postcss-discard-overridden": "^5.1.0", - "postcss-merge-longhand": "^5.1.7", - "postcss-merge-rules": "^5.1.3", - "postcss-minify-font-values": "^5.1.0", - "postcss-minify-gradients": "^5.1.1", - "postcss-minify-params": "^5.1.4", - "postcss-minify-selectors": "^5.2.1", - "postcss-normalize-charset": "^5.1.0", - "postcss-normalize-display-values": "^5.1.0", - "postcss-normalize-positions": "^5.1.1", - "postcss-normalize-repeat-style": "^5.1.1", - "postcss-normalize-string": "^5.1.0", - "postcss-normalize-timing-functions": "^5.1.0", - "postcss-normalize-unicode": "^5.1.1", - "postcss-normalize-url": "^5.1.0", - "postcss-normalize-whitespace": "^5.1.1", - "postcss-ordered-values": "^5.1.3", - "postcss-reduce-initial": "^5.1.1", - "postcss-reduce-transforms": "^5.1.0", - "postcss-svgo": "^5.1.0", - "postcss-unique-selectors": "^5.1.1" - } - }, - "cssnano-utils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", - "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", - "dev": true, - "requires": {} - }, - "csso": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", - "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", - "dev": true, - "requires": { - "css-tree": "^1.1.2" - }, - "dependencies": { - "css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "dev": true, - "requires": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - } - }, - "mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "cssom": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", - "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", - "dev": true - }, - "cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", - "dev": true, - "requires": { - "cssom": "~0.3.6" - }, - "dependencies": { - "cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true - } - } - }, - "csstype": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" - }, - "custom-event-polyfill": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/custom-event-polyfill/-/custom-event-polyfill-1.0.7.tgz", - "integrity": "sha512-TDDkd5DkaZxZFM8p+1I3yAlvM3rSr1wbrOliG4yJiwinMZN8z/iGL7BTlDkrJcYTmgUSb4ywVCc3ZaUtOtC76w==" - }, - "d3-array": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.2.tgz", - "integrity": "sha512-yEEyEAbDrF8C6Ob2myOBLjwBLck1Z89jMGFee0oPsn95GqjerpaOA4ch+vc2l0FNFFwMD5N7OCSEN5eAlsUbgQ==", - "requires": { - "internmap": "1 - 2" - } - }, - "d3-binarytree": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/d3-binarytree/-/d3-binarytree-0.2.2.tgz", - "integrity": "sha512-TmgSEKWO4lSjX26Rk77hbTdiF3TQ1v5LqL+cmSz6/5RiSxmq6+e6qHE6X/KwrsIESekhEReH63X5yM8dvXaT7A==" - }, - "d3-color": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", - "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==" - }, - "d3-dispatch": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", - "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==" - }, - "d3-drag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", - "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", - "requires": { - "d3-dispatch": "1 - 3", - "d3-selection": "3" - } - }, - "d3-ease": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", - "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==" - }, - "d3-force-3d": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/d3-force-3d/-/d3-force-3d-3.0.3.tgz", - "integrity": "sha512-8HGTbw6y35UYManGCPU4+b9/PGgnyjzRq80DRsp7zFsRl0leVz2pzwx18dwkPe4rDxTOEpM4BuWQ2krbVaGQQA==", - "requires": { - "d3-binarytree": "^0.2.0", - "d3-dispatch": "1 - 3", - "d3-octree": "^0.2.0", - "d3-quadtree": "1 - 3", - "d3-timer": "1 - 3" - } - }, - "d3-format": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", - "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==" - }, - "d3-interpolate": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", - "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", - "requires": { - "d3-color": "1 - 3" - } - }, - "d3-octree": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/d3-octree/-/d3-octree-0.2.2.tgz", - "integrity": "sha512-ysk9uSPAhZVb0Gq4GXzghl/Yqxu80dHrq55I53qaIMdGB65+0UfO84sr4Fci2JHumcgh6H4WE0r8LwxPagkE+g==" - }, - "d3-path": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", - "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==" - }, - "d3-quadtree": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz", - "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==" - }, - "d3-scale": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", - "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", - "requires": { - "d3-array": "2.10.0 - 3", - "d3-format": "1 - 3", - "d3-interpolate": "1.2.0 - 3", - "d3-time": "2.1.1 - 3", - "d3-time-format": "2 - 4" - } - }, - "d3-scale-chromatic": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz", - "integrity": "sha512-Lx9thtxAKrO2Pq6OO2Ua474opeziKr279P/TKZsMAhYyNDD3EnCffdbgeSYN5O7m2ByQsxtuP2CSDczNUIZ22g==", - "requires": { - "d3-color": "1 - 3", - "d3-interpolate": "1 - 3" - } - }, - "d3-selection": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", - "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==" - }, - "d3-shape": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", - "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", - "requires": { - "d3-path": "^3.1.0" - } - }, - "d3-time": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", - "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", - "requires": { - "d3-array": "2 - 3" - } - }, - "d3-time-format": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", - "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", - "requires": { - "d3-time": "1 - 3" - } - }, - "d3-timer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", - "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==" - }, - "d3-transition": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", - "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", - "requires": { - "d3-color": "1 - 3", - "d3-dispatch": "1 - 3", - "d3-ease": "1 - 3", - "d3-interpolate": "1 - 3", - "d3-timer": "1 - 3" - } - }, - "d3-zoom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz", - "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==", - "requires": { - "d3-dispatch": "1 - 3", - "d3-drag": "2 - 3", - "d3-interpolate": "1 - 3", - "d3-selection": "2 - 3", - "d3-transition": "2 - 3" - } - }, - "dagre": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/dagre/-/dagre-0.8.5.tgz", - "integrity": "sha512-/aTqmnRta7x7MCCpExk7HQL2O4owCT2h8NT//9I1OQ9vt29Pa0BzSAkR5lwFUcQ7491yVi/3CXU9jQ5o0Mn2Sw==", - "requires": { - "graphlib": "^2.1.8", - "lodash": "^4.17.15" - } - }, - "damerau-levenshtein": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", - "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==" - }, - "data-joint": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/data-joint/-/data-joint-1.2.6.tgz", - "integrity": "sha512-xuKyhQcD7vlO451VwKoK0RS8owh+iAZoQM2Up0ooTxrpLXh6XMUNPQW9vEOqv1+BT3c185FCLyWjUcCsEXC0/Q==", - "requires": { - "index-array-by": "^1.3.3" - } - }, - "data-urls": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", - "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", - "dev": true, - "requires": { - "abab": "^2.0.3", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.0.0" - } - }, - "debounce": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", - "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==" - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "decimal.js": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", - "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==", - "dev": true - }, - "decimal.js-light": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/decimal.js-light/-/decimal.js-light-2.5.1.tgz", - "integrity": "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==" - }, - "decode-uri-component": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", - "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==" - }, - "decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", - "requires": { - "mimic-response": "^1.0.0" - } - }, - "dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", - "dev": true - }, - "deep-assign": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/deep-assign/-/deep-assign-2.0.0.tgz", - "integrity": "sha512-2QhG3Kxulu4XIF3WL5C5x0sc/S17JLgm1SfvDfIRsR/5m7ZGmcejII7fZ2RyWhN0UWIJm0TNM/eKow6LAn3evQ==", - "requires": { - "is-obj": "^1.0.0" - } - }, - "deep-equal": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.0.tgz", - "integrity": "sha512-RdpzE0Hv4lhowpIUKKMJfeH6C1pXdtT1/it80ubgWqwI3qpuxUBpC1S4hnHg+zjnuOoDkzUtUCEEkG+XG5l3Mw==", - "requires": { - "call-bind": "^1.0.2", - "es-get-iterator": "^1.1.2", - "get-intrinsic": "^1.1.3", - "is-arguments": "^1.1.1", - "is-array-buffer": "^3.0.1", - "is-date-object": "^1.0.5", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "isarray": "^2.0.5", - "object-is": "^1.1.5", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", - "side-channel": "^1.0.4", - "which-boxed-primitive": "^1.0.2", - "which-collection": "^1.0.1", - "which-typed-array": "^1.1.9" - } - }, - "deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" - }, - "deepmerge": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.0.tgz", - "integrity": "sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og==" - }, - "default-gateway": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", - "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", - "dev": true, - "requires": { - "execa": "^5.0.0" - } - }, - "define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "dev": true - }, - "define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "requires": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - } - }, - "defined": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz", - "integrity": "sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==", - "dev": true - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true - }, - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true - }, - "dequal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==" - }, - "destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "dev": true - }, - "detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "dev": true - }, - "detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", - "dev": true - }, - "detect-port-alt": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", - "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", - "dev": true, - "requires": { - "address": "^1.0.1", - "debug": "^2.6.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - } - } - }, - "detective": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz", - "integrity": "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==", - "dev": true, - "requires": { - "acorn-node": "^1.8.2", - "defined": "^1.0.0", - "minimist": "^1.2.6" - } - }, - "didyoumean": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", - "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", - "dev": true - }, - "diff-sequences": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", - "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", - "dev": true - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "requires": { - "path-type": "^4.0.0" - } - }, - "dlv": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", - "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", - "dev": true - }, - "dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==", - "dev": true - }, - "dns-packet": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.4.0.tgz", - "integrity": "sha512-EgqGeaBB8hLiHLZtp/IbaDQTL8pZ0+IvwzSHA6d7VyMDM+B9hgddEMa9xjK5oYnw0ci0JQ6g2XCD7/f6cafU6g==", - "dev": true, - "requires": { - "@leichtgewicht/ip-codec": "^2.0.1" - } - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "requires": { - "esutils": "^2.0.2" - } - }, - "dom-converter": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", - "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", - "dev": true, - "requires": { - "utila": "~0.4" - } - }, - "dom-helpers": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", - "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", - "requires": { - "@babel/runtime": "^7.8.7", - "csstype": "^3.0.2" - } - }, - "dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "dev": true, - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - } - }, - "dom-walk": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", - "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==" - }, - "domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==" - }, - "domexception": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", - "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", - "dev": true, - "requires": { - "webidl-conversions": "^5.0.0" - }, - "dependencies": { - "webidl-conversions": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", - "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", - "dev": true - } - } - }, - "domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "dev": true, - "requires": { - "domelementtype": "^2.2.0" - } - }, - "domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "dev": true, - "requires": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - } - }, - "dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", - "dev": true, - "requires": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "dotenv": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", - "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", - "dev": true - }, - "dotenv-expand": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", - "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", - "dev": true - }, - "dtype": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dtype/-/dtype-2.0.0.tgz", - "integrity": "sha512-s2YVcLKdFGS0hpFqJaTwscsyt0E8nNFdmo73Ocd81xNPj4URI4rj6D60A+vFMIw7BXWlb4yRkEwfBqcZzPGiZg==" - }, - "duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", - "dev": true - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "dev": true - }, - "ejs": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.8.tgz", - "integrity": "sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==", - "dev": true, - "requires": { - "jake": "^10.8.5" - } - }, - "electron-to-chromium": { - "version": "1.4.284", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", - "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==" - }, - "element-resize-detector": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/element-resize-detector/-/element-resize-detector-1.2.4.tgz", - "integrity": "sha512-Fl5Ftk6WwXE0wqCgNoseKWndjzZlDCwuPTcoVZfCP9R3EHQF8qUtr3YUPNETegRBOKqQKPW3n4kiIWngGi8tKg==", - "requires": { - "batch-processor": "1.0.0" - } - }, - "emittery": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", - "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", - "dev": true - }, - "emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" - }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "dev": true - }, - "enhanced-resolve": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz", - "integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - } - }, - "entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "dev": true - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "error-stack-parser": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", - "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", - "dev": true, - "requires": { - "stackframe": "^1.3.4" - } - }, - "es-abstract": { - "version": "1.21.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.1.tgz", - "integrity": "sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg==", - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-set-tostringtag": "^2.0.1", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.3", - "get-symbol-description": "^1.0.0", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.4", - "is-array-buffer": "^3.0.1", - "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.10", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.2", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", - "safe-regex-test": "^1.0.0", - "string.prototype.trimend": "^1.0.6", - "string.prototype.trimstart": "^1.0.6", - "typed-array-length": "^1.0.4", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.9" - } - }, - "es-array-method-boxes-properly": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", - "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", - "dev": true - }, - "es-get-iterator": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", - "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "has-symbols": "^1.0.3", - "is-arguments": "^1.1.1", - "is-map": "^2.0.2", - "is-set": "^2.0.2", - "is-string": "^1.0.7", - "isarray": "^2.0.5", - "stop-iteration-iterator": "^1.0.0" - } - }, - "es-module-lexer": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", - "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", - "dev": true - }, - "es-set-tostringtag": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", - "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", - "requires": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", - "has-tostringtag": "^1.0.0" - } - }, - "es-shim-unscopables": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", - "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", - "requires": { - "has": "^1.0.3" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "dev": true - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" - }, - "escodegen": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", - "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", - "dev": true, - "requires": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - }, - "dependencies": { - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - } - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, + "peerDependenciesMeta": { + "@types/react": { "optional": true }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2" - } - } - } - }, - "eslint": { - "version": "8.33.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.33.0.tgz", - "integrity": "sha512-WjOpFQgKK8VrCnAtl8We0SUOy/oVZ5NHykyMiagV1M9r8IFpIJX7DduK6n1mpfhlG7T1NLWm2SuD8QB7KFySaA==", - "requires": { - "@eslint/eslintrc": "^1.4.1", - "@humanwhocodes/config-array": "^0.11.8", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.4.0", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "grapheme-splitter": "^1.0.4", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-sdsl": "^4.1.4", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "regexpp": "^3.2.0", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", - "requires": { - "type-fest": "^0.20.2" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==" - } - } - }, - "eslint-config-react-app": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-7.0.1.tgz", - "integrity": "sha512-K6rNzvkIeHaTd8m/QEh1Zko0KI7BACWkkneSs6s9cKZC/J27X3eZR6Upt1jkmZ/4FK+XUOPPxMEN7+lbUXfSlA==", - "requires": { - "@babel/core": "^7.16.0", - "@babel/eslint-parser": "^7.16.3", - "@rushstack/eslint-patch": "^1.1.0", - "@typescript-eslint/eslint-plugin": "^5.5.0", - "@typescript-eslint/parser": "^5.5.0", - "babel-preset-react-app": "^10.0.1", - "confusing-browser-globals": "^1.0.11", - "eslint-plugin-flowtype": "^8.0.3", - "eslint-plugin-import": "^2.25.3", - "eslint-plugin-jest": "^25.3.0", - "eslint-plugin-jsx-a11y": "^6.5.1", - "eslint-plugin-react": "^7.27.1", - "eslint-plugin-react-hooks": "^4.3.0", - "eslint-plugin-testing-library": "^5.0.1" - } - }, - "eslint-import-resolver-node": { - "version": "0.3.7", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz", - "integrity": "sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==", - "requires": { - "debug": "^3.2.7", - "is-core-module": "^2.11.0", - "resolve": "^1.22.1" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "eslint-module-utils": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz", - "integrity": "sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==", - "requires": { - "debug": "^3.2.7" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "eslint-plugin-flowtype": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-8.0.3.tgz", - "integrity": "sha512-dX8l6qUL6O+fYPtpNRideCFSpmWOUVx5QcaGLVqe/vlDiBSe4vYljDWDETwnyFzpl7By/WVIu6rcrniCgH9BqQ==", - "requires": { - "lodash": "^4.17.21", - "string-natural-compare": "^3.0.1" - } - }, - "eslint-plugin-import": { - "version": "2.27.5", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz", - "integrity": "sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==", - "requires": { - "array-includes": "^3.1.6", - "array.prototype.flat": "^1.3.1", - "array.prototype.flatmap": "^1.3.1", - "debug": "^3.2.7", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.7", - "eslint-module-utils": "^2.7.4", - "has": "^1.0.3", - "is-core-module": "^2.11.0", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.values": "^1.1.6", - "resolve": "^1.22.1", - "semver": "^6.3.0", - "tsconfig-paths": "^3.14.1" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "requires": { - "ms": "^2.1.1" - } - }, - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "requires": { - "esutils": "^2.0.2" - } - } - } - }, - "eslint-plugin-jest": { - "version": "25.7.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-25.7.0.tgz", - "integrity": "sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ==", - "requires": { - "@typescript-eslint/experimental-utils": "^5.0.0" - } - }, - "eslint-plugin-jsx-a11y": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz", - "integrity": "sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==", - "requires": { - "@babel/runtime": "^7.20.7", - "aria-query": "^5.1.3", - "array-includes": "^3.1.6", - "array.prototype.flatmap": "^1.3.1", - "ast-types-flow": "^0.0.7", - "axe-core": "^4.6.2", - "axobject-query": "^3.1.1", - "damerau-levenshtein": "^1.0.8", - "emoji-regex": "^9.2.2", - "has": "^1.0.3", - "jsx-ast-utils": "^3.3.3", - "language-tags": "=1.0.5", - "minimatch": "^3.1.2", - "object.entries": "^1.1.6", - "object.fromentries": "^2.0.6", - "semver": "^6.3.0" - } - }, - "eslint-plugin-react": { - "version": "7.32.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.32.2.tgz", - "integrity": "sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==", - "requires": { - "array-includes": "^3.1.6", - "array.prototype.flatmap": "^1.3.1", - "array.prototype.tosorted": "^1.1.1", - "doctrine": "^2.1.0", - "estraverse": "^5.3.0", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.6", - "object.fromentries": "^2.0.6", - "object.hasown": "^1.1.2", - "object.values": "^1.1.6", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.4", - "semver": "^6.3.0", - "string.prototype.matchall": "^4.0.8" - }, - "dependencies": { - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "requires": { - "esutils": "^2.0.2" - } - }, - "resolve": { - "version": "2.0.0-next.4", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", - "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", - "requires": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - } - } - }, - "eslint-plugin-react-hooks": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", - "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", - "requires": {} - }, - "eslint-plugin-testing-library": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.10.0.tgz", - "integrity": "sha512-aTOsCAEI9trrX3TLOnsskfhe57DmsjP/yMKLPqg4ftdRvfR4qut2PGWUa8TwP7whZbwMzJjh98tgAPcE8vdHow==", - "requires": { - "@typescript-eslint/utils": "^5.43.0" - } - }, - "eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - } - }, - "eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "requires": { - "eslint-visitor-keys": "^2.0.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==" - } - } - }, - "eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==" - }, - "eslint-webpack-plugin": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-3.2.0.tgz", - "integrity": "sha512-avrKcGncpPbPSUHX6B3stNGzkKFto3eL+DKM4+VyMrVnhPc3vRczVlCq3uhuFOdRvDHTVXuzwk1ZKUrqDQHQ9w==", - "dev": true, - "requires": { - "@types/eslint": "^7.29.0 || ^8.4.1", - "jest-worker": "^28.0.2", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "schema-utils": "^4.0.0" - }, - "dependencies": { - "ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.3" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "jest-worker": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz", - "integrity": "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==", - "dev": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - } - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "espree": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", - "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", - "requires": { - "acorn": "^8.8.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "requires": { - "estraverse": "^5.1.0" - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "requires": { - "estraverse": "^5.2.0" - } - }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" - }, - "estree-walker": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", - "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "dev": true - }, - "eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" - }, - "events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true - }, - "execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - } - }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", - "dev": true - }, - "expect": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", - "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1" - } - }, - "express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", - "dev": true, - "requires": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.1", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "dependencies": { - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "dev": true - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - } - } - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "fast-equals": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-5.0.1.tgz", - "integrity": "sha512-WF1Wi8PwwSY7/6Kx0vKXtw8RwuSGoM1bvDaJbu7MxDlR1vovZjIAKrnzyrThgAjm6JDTu0fVgWXDlMGspodfoQ==" - }, - "fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "dependencies": { - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "requires": { - "is-glob": "^4.0.1" - } - } - } - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" - }, - "fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", - "requires": { - "reusify": "^1.0.4" - } - }, - "faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "dev": true, - "requires": { - "websocket-driver": ">=0.5.1" - } - }, - "fb-watchman": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", - "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", - "dev": true, - "requires": { - "bser": "2.1.1" - } - }, - "file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "requires": { - "flat-cache": "^3.0.4" - } - }, - "file-loader": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", - "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", - "dev": true, - "requires": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - } - }, - "filelist": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", - "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", - "dev": true, - "requires": { - "minimatch": "^5.0.1" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - } - } - }, - "filesize": { - "version": "8.0.7", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-8.0.7.tgz", - "integrity": "sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==", - "dev": true - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "dev": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - } - } - }, - "find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - } - }, - "find-root": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", - "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" - }, - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - } - }, - "flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==" - }, - "flatten-vertex-data": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/flatten-vertex-data/-/flatten-vertex-data-1.0.2.tgz", - "integrity": "sha512-BvCBFK2NZqerFTdMDgqfHBwxYWnxeCkwONsw6PvBMcUXqo8U/KDWwmXhqx1x2kLIg7DqIsJfOaJFOmlua3Lxuw==", - "requires": { - "dtype": "^2.0.0" - } - }, - "follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", - "dev": true - }, - "for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "requires": { - "is-callable": "^1.1.3" - } - }, - "force-graph": { - "version": "1.43.0", - "resolved": "https://registry.npmjs.org/force-graph/-/force-graph-1.43.0.tgz", - "integrity": "sha512-nOG818GgID0Boi5OJyjlHuhV5EO4cEaxpXCN+eXqBiG2Mc+8TtqRZrA347grWmeliMdtfldMqYAb/ZKs26qf+w==", - "requires": { - "@tweenjs/tween.js": "18", - "accessor-fn": "1", - "bezier-js": "3 - 6", - "canvas-color-tracker": "1", - "d3-array": "1 - 3", - "d3-drag": "2 - 3", - "d3-force-3d": "2 - 3", - "d3-scale": "1 - 4", - "d3-scale-chromatic": "1 - 3", - "d3-selection": "2 - 3", - "d3-zoom": "2 - 3", - "index-array-by": "1", - "kapsule": "^1.13", - "lodash.throttle": "4" - } - }, - "fork-ts-checker-webpack-plugin": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.2.tgz", - "integrity": "sha512-m5cUmF30xkZ7h4tWUgTAcEaKmUW7tfyUyTqNNOz7OxWJ0v1VWKTcOvH8FWHUwSjlW/356Ijc9vi3XfcPstpQKA==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.8.3", - "@types/json-schema": "^7.0.5", - "chalk": "^4.1.0", - "chokidar": "^3.4.2", - "cosmiconfig": "^6.0.0", - "deepmerge": "^4.2.2", - "fs-extra": "^9.0.0", - "glob": "^7.1.6", - "memfs": "^3.1.2", - "minimatch": "^3.0.4", - "schema-utils": "2.7.0", - "semver": "^7.3.2", - "tapable": "^1.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "cosmiconfig": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", - "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", - "dev": true, - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.7.2" - } - }, - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "schema-utils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", - "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.4", - "ajv": "^6.12.2", - "ajv-keywords": "^3.4.1" - } - }, - "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", - "dev": true - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, - "forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "dev": true - }, - "fraction.js": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", - "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", - "dev": true - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "dev": true - }, - "fromentries": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", - "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==" - }, - "fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "fs-monkey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", - "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==", - "dev": true - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - } - }, - "functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==" - }, - "gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "get-intrinsic": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", - "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - } - }, - "get-own-enumerable-property-symbols": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", - "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", - "dev": true - }, - "get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true - }, - "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true - }, - "get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - } - }, - "gl-preserve-state": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gl-preserve-state/-/gl-preserve-state-1.0.0.tgz", - "integrity": "sha512-zQZ25l3haD4hvgJZ6C9+s0ebdkW9y+7U2qxvGu1uWOJh8a4RU+jURIKEQhf8elIlFpMH6CrAY2tH0mYrRjet3Q==" - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "requires": { - "is-glob": "^4.0.3" - } - }, - "glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true - }, - "global": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", - "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", - "requires": { - "min-document": "^2.19.0", - "process": "^0.11.10" - } - }, - "global-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", - "dev": true, - "requires": { - "global-prefix": "^3.0.0" - } - }, - "global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", - "dev": true, - "requires": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" - }, - "dependencies": { - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" - }, - "globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", - "requires": { - "define-properties": "^1.1.3" - } - }, - "globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - } - }, - "gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "requires": { - "get-intrinsic": "^1.1.3" - } - }, - "graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true - }, - "grapheme-splitter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==" - }, - "graphlib": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/graphlib/-/graphlib-2.1.8.tgz", - "integrity": "sha512-jcLLfkpoVGmH7/InMC/1hIvOPSUh38oJtGhvrOFGzioE1DZ+0YW16RgmOJhHiuWTvGiJQ9Z1Ik43JvkRPRvE+A==", - "requires": { - "lodash": "^4.17.15" - } - }, - "gzip-size": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", - "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", - "dev": true, - "requires": { - "duplexer": "^0.1.2" - } - }, - "handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", - "dev": true - }, - "harmony-reflect": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.6.2.tgz", - "integrity": "sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==", - "dev": true - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" - }, - "has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "requires": { - "get-intrinsic": "^1.1.1" - } - }, - "has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==" - }, - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" - }, - "has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "requires": { - "has-symbols": "^1.0.2" - } - }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true - }, - "hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "requires": { - "react-is": "^16.7.0" - }, - "dependencies": { - "react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - } - } - }, - "hoopy": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz", - "integrity": "sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==", - "dev": true - }, - "hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "html-encoding-sniffer": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", - "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", - "dev": true, - "requires": { - "whatwg-encoding": "^1.0.5" - } - }, - "html-entities": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", - "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==", - "dev": true - }, - "html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", - "dev": true, - "requires": { - "camel-case": "^4.1.2", - "clean-css": "^5.2.2", - "commander": "^8.3.0", - "he": "^1.2.0", - "param-case": "^3.0.4", - "relateurl": "^0.2.7", - "terser": "^5.10.0" - } - }, - "html-webpack-plugin": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz", - "integrity": "sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==", - "dev": true, - "requires": { - "@types/html-minifier-terser": "^6.0.0", - "html-minifier-terser": "^6.0.2", - "lodash": "^4.17.21", - "pretty-error": "^4.0.0", - "tapable": "^2.0.0" - } - }, - "htmlparser2": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", - "dev": true, - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" - } - }, - "http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", - "dev": true - }, - "http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dev": true, - "requires": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - } - }, - "http-parser-js": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", - "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", - "dev": true - }, - "http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "dev": true, - "requires": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - } - }, - "http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", - "dev": true, - "requires": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - } - }, - "http-proxy-middleware": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", - "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", - "dev": true, - "requires": { - "@types/http-proxy": "^1.17.8", - "http-proxy": "^1.18.1", - "is-glob": "^4.0.1", - "is-plain-obj": "^3.0.0", - "micromatch": "^4.0.2" - } - }, - "https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, - "requires": { - "agent-base": "6", - "debug": "4" - } - }, - "human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true - }, - "humanize-duration": { - "version": "3.28.0", - "resolved": "https://registry.npmjs.org/humanize-duration/-/humanize-duration-3.28.0.tgz", - "integrity": "sha512-jMAxraOOmHuPbffLVDKkEKi/NeG8dMqP8lGRd6Tbf7JgAeG33jjgPWDbXXU7ypCI0o+oNKJFgbSB9FKVdWNI2A==" - }, - "iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - }, - "icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "dev": true, - "requires": {} - }, - "idb": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/idb/-/idb-7.1.1.tgz", - "integrity": "sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==", - "dev": true - }, - "identity-obj-proxy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz", - "integrity": "sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA==", - "dev": true, - "requires": { - "harmony-reflect": "^1.4.6" - } - }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" - }, - "ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==" - }, - "immer": { - "version": "9.0.19", - "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.19.tgz", - "integrity": "sha512-eY+Y0qcsB4TZKwgQzLaE/lqYMlKhv5J9dyd2RhhtGhNo2njPXDqU9XPfcNfa3MIDsdtZt5KlkIsirlo4dHsWdQ==", - "dev": true - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", - "dev": true, - "requires": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==" - }, - "index-array-by": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/index-array-by/-/index-array-by-1.3.3.tgz", - "integrity": "sha512-dpqV1sX+hx4s0RqAT97ypk9xzcAXJ0XK27p3bTgPy8bjbJAX6Kf7RU3pPXgmg9hhO7f5/WxO354v2f/A0/fz3Q==" - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true - }, - "internal-slot": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.4.tgz", - "integrity": "sha512-tA8URYccNzMo94s5MQZgH8NB/XTa6HsOo0MLfXTKKEnHVVdegzaQoFZ7Jp44bdvLvY2waT5dc+j5ICEswhi7UQ==", - "requires": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", - "side-channel": "^1.0.4" - } - }, - "internmap": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", - "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==" - }, - "invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "requires": { - "loose-envify": "^1.0.0" - } - }, - "ipaddr.js": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", - "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==", - "dev": true - }, - "is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-array-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.1.tgz", - "integrity": "sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ==", - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-typed-array": "^1.1.10" - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" - }, - "is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "requires": { - "has-bigints": "^1.0.1" - } - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, - "is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==" - }, - "is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", - "requires": { - "has": "^1.0.3" - } - }, - "is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "is-function": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", - "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==" - }, - "is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", - "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==" - }, - "is-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", - "dev": true - }, - "is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==" - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" - }, - "is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==" - }, - "is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==" - }, - "is-plain-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", - "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", - "dev": true - }, - "is-potential-custom-element-name": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", - "dev": true - }, - "is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", - "dev": true - }, - "is-root": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", - "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==", - "dev": true - }, - "is-set": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", - "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==" - }, - "is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true - }, - "is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "requires": { - "has-symbols": "^1.0.2" - } - }, - "is-typed-array": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", - "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "dev": true - }, - "is-weakmap": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", - "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==" - }, - "is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-weakset": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", - "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - } - }, - "is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "requires": { - "is-docker": "^2.0.0" - } - }, - "isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" - }, - "istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", - "dev": true - }, - "istanbul-lib-instrument": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", - "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", - "dev": true, - "requires": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - } - }, - "istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "istanbul-reports": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", - "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", - "dev": true, - "requires": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - } - }, - "jake": { - "version": "10.8.5", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz", - "integrity": "sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==", - "dev": true, - "requires": { - "async": "^3.2.3", - "chalk": "^4.0.2", - "filelist": "^1.0.1", - "minimatch": "^3.0.4" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jerrypick": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/jerrypick/-/jerrypick-1.0.5.tgz", - "integrity": "sha512-95dIyL2QXqevDDJ70rmiqKLsTi+riZftLQo708tSFR/O5pQOf6VscDhjnN8mkNQwqnQmGhw+6dfZ5d4bmH/yww==" - }, - "jest": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz", - "integrity": "sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==", - "dev": true, - "requires": { - "@jest/core": "^27.5.1", - "import-local": "^3.0.2", - "jest-cli": "^27.5.1" - } - }, - "jest-changed-files": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.1.tgz", - "integrity": "sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "execa": "^5.0.0", - "throat": "^6.0.1" - } - }, - "jest-circus": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.1.tgz", - "integrity": "sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==", - "dev": true, - "requires": { - "@jest/environment": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^0.7.0", - "expect": "^27.5.1", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3", - "throat": "^6.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-cli": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.1.tgz", - "integrity": "sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==", - "dev": true, - "requires": { - "@jest/core": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "import-local": "^3.0.2", - "jest-config": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "prompts": "^2.0.1", - "yargs": "^16.2.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-config": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.5.1.tgz", - "integrity": "sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==", - "dev": true, - "requires": { - "@babel/core": "^7.8.0", - "@jest/test-sequencer": "^27.5.1", - "@jest/types": "^27.5.1", - "babel-jest": "^27.5.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.1", - "graceful-fs": "^4.2.9", - "jest-circus": "^27.5.1", - "jest-environment-jsdom": "^27.5.1", - "jest-environment-node": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-jasmine2": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-runner": "^27.5.1", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-diff": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", - "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-docblock": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.1.tgz", - "integrity": "sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==", - "dev": true, - "requires": { - "detect-newline": "^3.0.0" - } - }, - "jest-each": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz", - "integrity": "sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "jest-get-type": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-environment-jsdom": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz", - "integrity": "sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==", - "dev": true, - "requires": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1", - "jsdom": "^16.6.0" - } - }, - "jest-environment-node": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.1.tgz", - "integrity": "sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==", - "dev": true, - "requires": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "jest-mock": "^27.5.1", - "jest-util": "^27.5.1" - } - }, - "jest-get-type": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", - "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", - "dev": true - }, - "jest-haste-map": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", - "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/graceful-fs": "^4.1.2", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "fsevents": "^2.3.2", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^27.5.1", - "jest-serializer": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "micromatch": "^4.0.4", - "walker": "^1.0.7" - } - }, - "jest-jasmine2": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz", - "integrity": "sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==", - "dev": true, - "requires": { - "@jest/environment": "^27.5.1", - "@jest/source-map": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "expect": "^27.5.1", - "is-generator-fn": "^2.0.0", - "jest-each": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "pretty-format": "^27.5.1", - "throat": "^6.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-leak-detector": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz", - "integrity": "sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==", - "dev": true, - "requires": { - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - } - }, - "jest-matcher-utils": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz", - "integrity": "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-message-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", - "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.5.1", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-mock": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", - "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*" - } - }, - "jest-pnp-resolver": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", - "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", - "dev": true, - "requires": {} - }, - "jest-regex-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", - "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", - "dev": true - }, - "jest-resolve": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.1.tgz", - "integrity": "sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^27.5.1", - "jest-validate": "^27.5.1", - "resolve": "^1.20.0", - "resolve.exports": "^1.1.0", - "slash": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-resolve-dependencies": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz", - "integrity": "sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-snapshot": "^27.5.1" - } - }, - "jest-runner": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.1.tgz", - "integrity": "sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==", - "dev": true, - "requires": { - "@jest/console": "^27.5.1", - "@jest/environment": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.8.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^27.5.1", - "jest-environment-jsdom": "^27.5.1", - "jest-environment-node": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-leak-detector": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-runtime": "^27.5.1", - "jest-util": "^27.5.1", - "jest-worker": "^27.5.1", - "source-map-support": "^0.5.6", - "throat": "^6.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-runtime": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz", - "integrity": "sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==", - "dev": true, - "requires": { - "@jest/environment": "^27.5.1", - "@jest/fake-timers": "^27.5.1", - "@jest/globals": "^27.5.1", - "@jest/source-map": "^27.5.1", - "@jest/test-result": "^27.5.1", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "execa": "^5.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-mock": "^27.5.1", - "jest-regex-util": "^27.5.1", - "jest-resolve": "^27.5.1", - "jest-snapshot": "^27.5.1", - "jest-util": "^27.5.1", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-serializer": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", - "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", - "dev": true, - "requires": { - "@types/node": "*", - "graceful-fs": "^4.2.9" - } - }, - "jest-snapshot": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz", - "integrity": "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==", - "dev": true, - "requires": { - "@babel/core": "^7.7.2", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/traverse": "^7.7.2", - "@babel/types": "^7.0.0", - "@jest/transform": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/babel__traverse": "^7.0.4", - "@types/prettier": "^2.1.5", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^27.5.1", - "graceful-fs": "^4.2.9", - "jest-diff": "^27.5.1", - "jest-get-type": "^27.5.1", - "jest-haste-map": "^27.5.1", - "jest-matcher-utils": "^27.5.1", - "jest-message-util": "^27.5.1", - "jest-util": "^27.5.1", - "natural-compare": "^1.4.0", - "pretty-format": "^27.5.1", - "semver": "^7.3.2" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "jest-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", - "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-validate": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.1.tgz", - "integrity": "sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==", - "dev": true, - "requires": { - "@jest/types": "^27.5.1", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^27.5.1", - "leven": "^3.1.0", - "pretty-format": "^27.5.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-watch-typeahead": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-1.1.0.tgz", - "integrity": "sha512-Va5nLSJTN7YFtC2jd+7wsoe1pNe5K4ShLux/E5iHEwlB9AxaxmggY7to9KUqKojhaJw3aXqt5WAb4jGPOolpEw==", - "dev": true, - "requires": { - "ansi-escapes": "^4.3.1", - "chalk": "^4.0.0", - "jest-regex-util": "^28.0.0", - "jest-watcher": "^28.0.0", - "slash": "^4.0.0", - "string-length": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "dependencies": { - "@jest/console": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-28.1.3.tgz", - "integrity": "sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw==", - "dev": true, - "requires": { - "@jest/types": "^28.1.3", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^28.1.3", - "jest-util": "^28.1.3", - "slash": "^3.0.0" - }, - "dependencies": { - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - } - } - }, - "@jest/test-result": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-28.1.3.tgz", - "integrity": "sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg==", - "dev": true, - "requires": { - "@jest/console": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - } - }, - "@jest/types": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", - "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", - "dev": true, - "requires": { - "@jest/schemas": "^28.1.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - } - }, - "@types/yargs": { - "version": "17.0.22", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz", - "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "emittery": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz", - "integrity": "sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "jest-message-util": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz", - "integrity": "sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^28.1.3", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^28.1.3", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "dependencies": { - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - } - } - }, - "jest-regex-util": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", - "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", - "dev": true - }, - "jest-util": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", - "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", - "dev": true, - "requires": { - "@jest/types": "^28.1.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - }, - "jest-watcher": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.3.tgz", - "integrity": "sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g==", - "dev": true, - "requires": { - "@jest/test-result": "^28.1.3", - "@jest/types": "^28.1.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.10.2", - "jest-util": "^28.1.3", - "string-length": "^4.0.1" - }, - "dependencies": { - "string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dev": true, - "requires": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - } - } - }, - "pretty-format": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", - "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", - "dev": true, - "requires": { - "@jest/schemas": "^28.1.3", - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true - } - } - }, - "slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "dev": true - }, - "string-length": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-5.0.1.tgz", - "integrity": "sha512-9Ep08KAMUn0OadnVaBuRdE2l615CQ508kr0XMadjClfYpdCyvrbFp6Taebo8yyxokQ4viUd/xPPUA4FGgUa0ow==", - "dev": true, - "requires": { - "char-regex": "^2.0.0", - "strip-ansi": "^7.0.1" - }, - "dependencies": { - "char-regex": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-2.0.1.tgz", - "integrity": "sha512-oSvEeo6ZUD7NepqAat3RqoucZ5SeqLJgOvVIwkafu6IP3V0pO38s/ypdVUmDDK6qIIHNlYHJAKX9E7R7HoKElw==", - "dev": true - } - } - }, - "strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", - "dev": true, - "requires": { - "ansi-regex": "^6.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true - } - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-watcher": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.5.1.tgz", - "integrity": "sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==", - "dev": true, - "requires": { - "@jest/test-result": "^27.5.1", - "@jest/types": "^27.5.1", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "jest-util": "^27.5.1", - "string-length": "^4.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "dev": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "js-sdsl": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.3.0.tgz", - "integrity": "sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==" - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "requires": { - "argparse": "^2.0.1" - } - }, - "jsdom": { - "version": "16.7.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", - "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", - "dev": true, - "requires": { - "abab": "^2.0.5", - "acorn": "^8.2.4", - "acorn-globals": "^6.0.0", - "cssom": "^0.4.4", - "cssstyle": "^2.3.0", - "data-urls": "^2.0.0", - "decimal.js": "^10.2.1", - "domexception": "^2.0.1", - "escodegen": "^2.0.0", - "form-data": "^3.0.0", - "html-encoding-sniffer": "^2.0.1", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.0", - "parse5": "6.0.1", - "saxes": "^5.0.1", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.0.0", - "w3c-hr-time": "^1.0.2", - "w3c-xmlserializer": "^2.0.0", - "webidl-conversions": "^6.1.0", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.5.0", - "ws": "^7.4.6", - "xml-name-validator": "^3.0.0" - } - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" - }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" - }, - "json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" - }, - "json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==" - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "jsonpointer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", - "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==", - "dev": true - }, - "jsx-ast-utils": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz", - "integrity": "sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==", - "requires": { - "array-includes": "^3.1.5", - "object.assign": "^4.1.3" - } - }, - "kapsule": { - "version": "1.13.8", - "resolved": "https://registry.npmjs.org/kapsule/-/kapsule-1.13.8.tgz", - "integrity": "sha512-Y1lLt1htHNofIM5kxS5OdEqDm7WFqHF4hm6DrrvNEKIJugfQrxDBycV41QI5FpnBGHqyBD99VpTB5ARnlufP6w==", - "requires": { - "debounce": "^1.2.1" - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - }, - "kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true - }, - "klona": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", - "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", - "dev": true - }, - "language-subtag-registry": { - "version": "0.3.22", - "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", - "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==" - }, - "language-tags": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", - "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==", - "requires": { - "language-subtag-registry": "~0.3.2" - } - }, - "layout-bmfont-text": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/layout-bmfont-text/-/layout-bmfont-text-1.3.4.tgz", - "integrity": "sha512-mceomHZ8W7pSKQhTdLvOe1Im4n37u8xa5Gr0J3KPCHRMO/9o7+goWIOzZcUUd+Xgzy3+22bvoIQ0OaN3LRtgaw==", - "requires": { - "as-number": "^1.0.0", - "word-wrapper": "^1.0.7", - "xtend": "^4.0.0" - } - }, - "leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true - }, - "levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } - }, - "lilconfig": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz", - "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==", - "dev": true - }, - "lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" - }, - "load-bmfont": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/load-bmfont/-/load-bmfont-1.4.1.tgz", - "integrity": "sha512-8UyQoYmdRDy81Brz6aLAUhfZLwr5zV0L3taTQ4hju7m6biuwiWiJXjPhBJxbUQJA8PrkvJ/7Enqmwk2sM14soA==", - "requires": { - "buffer-equal": "0.0.1", - "mime": "^1.3.4", - "parse-bmfont-ascii": "^1.0.3", - "parse-bmfont-binary": "^1.0.5", - "parse-bmfont-xml": "^1.1.4", - "phin": "^2.9.1", - "xhr": "^2.0.1", - "xtend": "^4.0.0" - } - }, - "loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", - "dev": true - }, - "loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "requires": { - "p-locate": "^5.0.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" - }, - "lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", - "dev": true - }, - "lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" - }, - "lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==", - "dev": true - }, - "lodash.throttle": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", - "integrity": "sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==" - }, - "lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", - "dev": true - }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "dev": true, - "requires": { - "tslib": "^2.0.3" - } - }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "requires": { - "yallist": "^3.0.2" - } - }, - "magic-string": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", - "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", - "dev": true, - "requires": { - "sourcemap-codec": "^1.4.8" - } - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - }, - "makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "dev": true, - "requires": { - "tmpl": "1.0.5" - } - }, - "map-limit": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/map-limit/-/map-limit-0.0.1.tgz", - "integrity": "sha512-pJpcfLPnIF/Sk3taPW21G/RQsEEirGaFpCW3oXRwH9dnFHPHNGjNyvh++rdmC2fNqEaTw2MhYJraoJWAHx8kEg==", - "requires": { - "once": "~1.3.0" - }, - "dependencies": { - "once": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz", - "integrity": "sha512-6vaNInhu+CHxtONf3zw3vq4SP2DOQhjBvIa3rNcG0+P7eKWlYH6Peu7rHizSloRU2EwMz6GraLieis9Ac9+p1w==", - "requires": { - "wrappy": "1" - } - } - } - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "dev": true - }, - "memfs": { - "version": "3.4.13", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.13.tgz", - "integrity": "sha512-omTM41g3Skpvx5dSYeZIbXKcXoAVc/AoMNwn9TKx++L/gaen/+4TTttmu8ZSch5vfVJ8uJvGbroTsIlslRg6lg==", - "dev": true, - "requires": { - "fs-monkey": "^1.0.3" - } - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", - "dev": true - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "dev": true - }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" - }, - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true - }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, - "requires": { - "mime-db": "1.52.0" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" - }, - "min-document": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", - "integrity": "sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==", - "requires": { - "dom-walk": "^0.1.0" - } - }, - "mini-css-extract-plugin": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.2.tgz", - "integrity": "sha512-EdlUizq13o0Pd+uCp+WO/JpkLvHRVGt97RqfeGhXqAcorYo1ypJSpkV+WDT0vY/kmh/p7wRdJNJtuyK540PXDw==", - "dev": true, - "requires": { - "schema-utils": "^4.0.0" - }, - "dependencies": { - "ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.3" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - } - } - } - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==" - }, - "mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "requires": { - "minimist": "^1.2.6" - } - }, - "moment": { - "version": "2.29.4", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", - "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==" - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "multicast-dns": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", - "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", - "dev": true, - "requires": { - "dns-packet": "^5.2.2", - "thunky": "^1.0.2" - } - }, - "nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", - "dev": true - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" - }, - "natural-compare-lite": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==" - }, - "negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "dev": true - }, - "neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true - }, - "new-array": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/new-array/-/new-array-1.0.0.tgz", - "integrity": "sha512-K5AyFYbuHZ4e/ti52y7k18q8UHsS78FlRd85w2Fmsd6AkuLipDihPflKC0p3PN5i8II7+uHxo+CtkLiJDfmS5A==" - }, - "ngraph.events": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/ngraph.events/-/ngraph.events-1.2.2.tgz", - "integrity": "sha512-JsUbEOzANskax+WSYiAPETemLWYXmixuPAlmZmhIbIj6FH/WDgEGCGnRwUQBK0GjOnVm8Ui+e5IJ+5VZ4e32eQ==" - }, - "ngraph.forcelayout": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/ngraph.forcelayout/-/ngraph.forcelayout-3.3.1.tgz", - "integrity": "sha512-MKBuEh1wujyQHFTW57y5vd/uuEOK0XfXYxm3lC7kktjJLRdt/KEKEknyOlc6tjXflqBKEuYBBcu7Ax5VY+S6aw==", - "requires": { - "ngraph.events": "^1.0.0", - "ngraph.merge": "^1.0.0", - "ngraph.random": "^1.0.0" - } - }, - "ngraph.graph": { - "version": "20.0.1", - "resolved": "https://registry.npmjs.org/ngraph.graph/-/ngraph.graph-20.0.1.tgz", - "integrity": "sha512-VFsQ+EMkT+7lcJO1QP8Ik3w64WbHJl27Q53EO9hiFU9CRyxJ8HfcXtfWz/U8okuoYKDctbciL6pX3vG5dt1rYA==", - "requires": { - "ngraph.events": "^1.2.1" - } - }, - "ngraph.merge": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/ngraph.merge/-/ngraph.merge-1.0.0.tgz", - "integrity": "sha512-5J8YjGITUJeapsomtTALYsw7rFveYkM+lBj3QiYZ79EymQcuri65Nw3knQtFxQBU1r5iOaVRXrSwMENUPK62Vg==" - }, - "ngraph.random": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ngraph.random/-/ngraph.random-1.1.0.tgz", - "integrity": "sha512-h25UdUN/g8U7y29TzQtRm/GvGr70lK37yQPvPKXXuVfs7gCm82WipYFZcksQfeKumtOemAzBIcT7lzzyK/edLw==" - }, - "nice-color-palettes": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/nice-color-palettes/-/nice-color-palettes-1.0.1.tgz", - "integrity": "sha512-aHEFYKuGiaga8LqMi0Ttarqzn4tKS7BaIE2MeD9SDjv6yVc7DMIu/Eax4RvUgwR7vS0hXAUEIUx9P0/54O1W0g==", - "requires": { - "map-limit": "0.0.1", - "minimist": "^1.2.0", - "new-array": "^1.0.0", - "xhr-request": "^1.0.1" - } - }, - "no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", - "dev": true, - "requires": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - } - }, - "node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", - "dev": true - }, - "node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true - }, - "node-releases": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.9.tgz", - "integrity": "sha512-2xfmOrRkGogbTK9R6Leda0DGiXeY3p2NJpy4+gNCffdUvV6mdEJnaDEic1i3Ec2djAo8jWYoJMR5PB0MSMpxUA==" - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", - "dev": true - }, - "normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "dev": true - }, - "nosleep.js": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/nosleep.js/-/nosleep.js-0.7.0.tgz", - "integrity": "sha512-Z4B1HgvzR+en62ghwZf6BwAR6x4/pjezsiMcbF9KMLh7xoscpoYhaSXfY3lLkqC68AtW+/qLJ1lzvBIj0FGaTA==" - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - }, - "nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "requires": { - "boolbase": "^1.0.0" - } - }, - "nwsapi": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.2.tgz", - "integrity": "sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw==", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" - }, - "object-hash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", - "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", - "dev": true - }, - "object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==" - }, - "object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" - }, - "object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - } - }, - "object.entries": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz", - "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "object.fromentries": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz", - "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "object.getownpropertydescriptors": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.5.tgz", - "integrity": "sha512-yDNzckpM6ntyQiGTik1fKV1DcVDRS+w8bvpWNCBanvH5LfRX9O8WTHqQzG4RZwRAM4I0oU7TV11Lj5v0g20ibw==", - "dev": true, - "requires": { - "array.prototype.reduce": "^1.0.5", - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "object.hasown": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz", - "integrity": "sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==", - "requires": { - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "object.values": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", - "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", - "dev": true - }, - "on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dev": true, - "requires": { - "ee-first": "1.1.1" - } - }, - "on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "dev": true - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "open": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", - "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", - "dev": true, - "requires": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - } - }, - "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "requires": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "requires": { - "p-limit": "^3.0.2" - } - }, - "p-retry": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", - "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", - "dev": true, - "requires": { - "@types/retry": "0.12.0", - "retry": "^0.13.1" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "param-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", - "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", - "dev": true, - "requires": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "requires": { - "callsites": "^3.0.0" - } - }, - "parse-bmfont-ascii": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/parse-bmfont-ascii/-/parse-bmfont-ascii-1.0.6.tgz", - "integrity": "sha512-U4RrVsUFCleIOBsIGYOMKjn9PavsGOXxbvYGtMOEfnId0SVNsgehXh1DxUdVPLoxd5mvcEtvmKs2Mmf0Mpa1ZA==" - }, - "parse-bmfont-binary": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/parse-bmfont-binary/-/parse-bmfont-binary-1.0.6.tgz", - "integrity": "sha512-GxmsRea0wdGdYthjuUeWTMWPqm2+FAd4GI8vCvhgJsFnoGhTrLhXDDupwTo7rXVAgaLIGoVHDZS9p/5XbSqeWA==" - }, - "parse-bmfont-xml": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/parse-bmfont-xml/-/parse-bmfont-xml-1.1.4.tgz", - "integrity": "sha512-bjnliEOmGv3y1aMEfREMBJ9tfL3WR0i0CKPj61DnSLaoxWR3nLrsQrEbCId/8rF4NyRF0cCqisSVXyQYWM+mCQ==", - "requires": { - "xml-parse-from-string": "^1.0.0", - "xml2js": "^0.4.5" - } - }, - "parse-headers": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.5.tgz", - "integrity": "sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==" - }, - "parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - } - }, - "parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true - }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true - }, - "pascal-case": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", - "dev": true, - "requires": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", - "dev": true - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", - "dev": true - }, - "phin": { - "version": "2.9.3", - "resolved": "https://registry.npmjs.org/phin/-/phin-2.9.3.tgz", - "integrity": "sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA==" - }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true - }, - "pirates": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", - "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", - "dev": true - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - }, - "dependencies": { - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - } - } - }, - "pkg-up": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", - "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", - "dev": true, - "requires": { - "find-up": "^3.0.0" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "dev": true - } - } - }, - "polished": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/polished/-/polished-4.2.2.tgz", - "integrity": "sha512-Sz2Lkdxz6F2Pgnpi9U5Ng/WdWAUZxmHrNPoVlm3aAemxoy2Qy7LGjQg4uf8qKelDAUW94F4np3iH2YPf2qefcQ==", - "requires": { - "@babel/runtime": "^7.17.8" - } - }, - "postcss": { - "version": "8.4.21", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz", - "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==", - "dev": true, - "requires": { - "nanoid": "^3.3.4", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - } - }, - "postcss-attribute-case-insensitive": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-5.0.2.tgz", - "integrity": "sha512-XIidXV8fDr0kKt28vqki84fRK8VW8eTuIa4PChv2MqKuT6C9UjmSKzen6KaWhWEoYvwxFCa7n/tC1SZ3tyq4SQ==", - "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.10" - } - }, - "postcss-browser-comments": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-browser-comments/-/postcss-browser-comments-4.0.0.tgz", - "integrity": "sha512-X9X9/WN3KIvY9+hNERUqX9gncsgBA25XaeR+jshHz2j8+sYyHktHw1JdKuMjeLpGktXidqDhA7b/qm1mrBDmgg==", - "dev": true, - "requires": {} - }, - "postcss-calc": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", - "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", - "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.9", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-clamp": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-clamp/-/postcss-clamp-4.1.0.tgz", - "integrity": "sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-color-functional-notation": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-4.2.4.tgz", - "integrity": "sha512-2yrTAUZUab9s6CpxkxC4rVgFEVaR6/2Pipvi6qcgvnYiVqZcbDHEoBDhrXzyb7Efh2CCfHQNtcqWcIruDTIUeg==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-color-hex-alpha": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-8.0.4.tgz", - "integrity": "sha512-nLo2DCRC9eE4w2JmuKgVA3fGL3d01kGq752pVALF68qpGLmx2Qrk91QTKkdUqqp45T1K1XV8IhQpcu1hoAQflQ==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-color-rebeccapurple": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-7.1.1.tgz", - "integrity": "sha512-pGxkuVEInwLHgkNxUc4sdg4g3py7zUeCQ9sMfwyHAT+Ezk8a4OaaVZ8lIY5+oNqA/BXXgLyXv0+5wHP68R79hg==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-colormin": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.0.tgz", - "integrity": "sha512-WdDO4gOFG2Z8n4P8TWBpshnL3JpmNmJwdnfP2gbk2qBA8PWwOYcmjmI/t3CmMeL72a7Hkd+x/Mg9O2/0rD54Pg==", - "dev": true, - "requires": { - "browserslist": "^4.16.6", - "caniuse-api": "^3.0.0", - "colord": "^2.9.1", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-convert-values": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", - "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", - "dev": true, - "requires": { - "browserslist": "^4.21.4", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-custom-media": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-8.0.2.tgz", - "integrity": "sha512-7yi25vDAoHAkbhAzX9dHx2yc6ntS4jQvejrNcC+csQJAXjj15e7VcWfMgLqBNAbOvqi5uIa9huOVwdHbf+sKqg==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-custom-properties": { - "version": "12.1.11", - "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-12.1.11.tgz", - "integrity": "sha512-0IDJYhgU8xDv1KY6+VgUwuQkVtmYzRwu+dMjnmdMafXYv86SWqfxkc7qdDvWS38vsjaEtv8e0vGOUQrAiMBLpQ==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-custom-selectors": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-6.0.3.tgz", - "integrity": "sha512-fgVkmyiWDwmD3JbpCmB45SvvlCD6z9CG6Ie6Iere22W5aHea6oWa7EM2bpnv2Fj3I94L3VbtvX9KqwSi5aFzSg==", - "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.4" - } - }, - "postcss-dir-pseudo-class": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-6.0.5.tgz", - "integrity": "sha512-eqn4m70P031PF7ZQIvSgy9RSJ5uI2171O/OO/zcRNYpJbvaeKFUlar1aJ7rmgiQtbm0FSPsRewjpdS0Oew7MPA==", - "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.10" - } - }, - "postcss-discard-comments": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", - "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", - "dev": true, - "requires": {} - }, - "postcss-discard-duplicates": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", - "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", - "dev": true, - "requires": {} - }, - "postcss-discard-empty": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", - "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", - "dev": true, - "requires": {} - }, - "postcss-discard-overridden": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", - "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", - "dev": true, - "requires": {} - }, - "postcss-double-position-gradients": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-3.1.2.tgz", - "integrity": "sha512-GX+FuE/uBR6eskOK+4vkXgT6pDkexLokPaz/AbJna9s5Kzp/yl488pKPjhy0obB475ovfT1Wv8ho7U/cHNaRgQ==", - "dev": true, - "requires": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-env-function": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-4.0.6.tgz", - "integrity": "sha512-kpA6FsLra+NqcFnL81TnsU+Z7orGtDTxcOhl6pwXeEq1yFPpRMkCDpHhrz8CFQDr/Wfm0jLiNQ1OsGGPjlqPwA==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-flexbugs-fixes": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-5.0.2.tgz", - "integrity": "sha512-18f9voByak7bTktR2QgDveglpn9DTbBWPUzSOe9g0N4WR/2eSt6Vrcbf0hmspvMI6YWGywz6B9f7jzpFNJJgnQ==", - "dev": true, - "requires": {} - }, - "postcss-focus-visible": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-6.0.4.tgz", - "integrity": "sha512-QcKuUU/dgNsstIK6HELFRT5Y3lbrMLEOwG+A4s5cA+fx3A3y/JTq3X9LaOj3OC3ALH0XqyrgQIgey/MIZ8Wczw==", - "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.9" - } - }, - "postcss-focus-within": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-5.0.4.tgz", - "integrity": "sha512-vvjDN++C0mu8jz4af5d52CB184ogg/sSxAFS+oUJQq2SuCe7T5U2iIsVJtsCp2d6R4j0jr5+q3rPkBVZkXD9fQ==", - "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.9" - } - }, - "postcss-font-variant": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz", - "integrity": "sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==", - "dev": true, - "requires": {} - }, - "postcss-gap-properties": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-3.0.5.tgz", - "integrity": "sha512-IuE6gKSdoUNcvkGIqdtjtcMtZIFyXZhmFd5RUlg97iVEvp1BZKV5ngsAjCjrVy+14uhGBQl9tzmi1Qwq4kqVOg==", - "dev": true, - "requires": {} - }, - "postcss-image-set-function": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-4.0.7.tgz", - "integrity": "sha512-9T2r9rsvYzm5ndsBE8WgtrMlIT7VbtTfE7b3BQnudUqnBcBo7L758oc+o+pdj/dUV0l5wjwSdjeOH2DZtfv8qw==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-import": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz", - "integrity": "sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.0.0", - "read-cache": "^1.0.0", - "resolve": "^1.1.7" - } - }, - "postcss-initial": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-4.0.1.tgz", - "integrity": "sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==", - "dev": true, - "requires": {} - }, - "postcss-js": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz", - "integrity": "sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==", - "dev": true, - "requires": { - "camelcase-css": "^2.0.1" - } - }, - "postcss-lab-function": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-4.2.1.tgz", - "integrity": "sha512-xuXll4isR03CrQsmxyz92LJB2xX9n+pZJ5jE9JgcnmsCammLyKdlzrBin+25dy6wIjfhJpKBAN80gsTlCgRk2w==", - "dev": true, - "requires": { - "@csstools/postcss-progressive-custom-properties": "^1.1.0", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-load-config": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", - "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", - "dev": true, - "requires": { - "lilconfig": "^2.0.5", - "yaml": "^1.10.2" - } - }, - "postcss-loader": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.1.tgz", - "integrity": "sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==", - "dev": true, - "requires": { - "cosmiconfig": "^7.0.0", - "klona": "^2.0.5", - "semver": "^7.3.5" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "postcss-logical": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-5.0.4.tgz", - "integrity": "sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==", - "dev": true, - "requires": {} - }, - "postcss-media-minmax": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-5.0.0.tgz", - "integrity": "sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==", - "dev": true, - "requires": {} - }, - "postcss-merge-longhand": { - "version": "5.1.7", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", - "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0", - "stylehacks": "^5.1.1" - } - }, - "postcss-merge-rules": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.3.tgz", - "integrity": "sha512-LbLd7uFC00vpOuMvyZop8+vvhnfRGpp2S+IMQKeuOZZapPRY4SMq5ErjQeHbHsjCUgJkRNrlU+LmxsKIqPKQlA==", - "dev": true, - "requires": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0", - "cssnano-utils": "^3.1.0", - "postcss-selector-parser": "^6.0.5" - } - }, - "postcss-minify-font-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", - "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-minify-gradients": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", - "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", - "dev": true, - "requires": { - "colord": "^2.9.1", - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-minify-params": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", - "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", - "dev": true, - "requires": { - "browserslist": "^4.21.4", - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-minify-selectors": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", - "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", - "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.5" - } - }, - "postcss-modules-extract-imports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "dev": true, - "requires": {} - }, - "postcss-modules-local-by-default": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", - "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", - "dev": true, - "requires": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - } - }, - "postcss-modules-scope": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", - "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", - "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.4" - } - }, - "postcss-modules-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", - "dev": true, - "requires": { - "icss-utils": "^5.0.0" - } - }, - "postcss-nested": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.0.tgz", - "integrity": "sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w==", - "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.10" - } - }, - "postcss-nesting": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-10.2.0.tgz", - "integrity": "sha512-EwMkYchxiDiKUhlJGzWsD9b2zvq/r2SSubcRrgP+jujMXFzqvANLt16lJANC+5uZ6hjI7lpRmI6O8JIl+8l1KA==", - "dev": true, - "requires": { - "@csstools/selector-specificity": "^2.0.0", - "postcss-selector-parser": "^6.0.10" - } - }, - "postcss-normalize": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize/-/postcss-normalize-10.0.1.tgz", - "integrity": "sha512-+5w18/rDev5mqERcG3W5GZNMJa1eoYYNGo8gB7tEwaos0ajk3ZXAI4mHGcNT47NE+ZnZD1pEpUOFLvltIwmeJA==", - "dev": true, - "requires": { - "@csstools/normalize.css": "*", - "postcss-browser-comments": "^4", - "sanitize.css": "*" - } - }, - "postcss-normalize-charset": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", - "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", - "dev": true, - "requires": {} - }, - "postcss-normalize-display-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", - "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-positions": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", - "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-repeat-style": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", - "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-string": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", - "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-timing-functions": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", - "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-unicode": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", - "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", - "dev": true, - "requires": { - "browserslist": "^4.21.4", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", - "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", - "dev": true, - "requires": { - "normalize-url": "^6.0.1", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-whitespace": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", - "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-opacity-percentage": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/postcss-opacity-percentage/-/postcss-opacity-percentage-1.1.3.tgz", - "integrity": "sha512-An6Ba4pHBiDtyVpSLymUUERMo2cU7s+Obz6BTrS+gxkbnSBNKSuD0AVUc+CpBMrpVPKKfoVz0WQCX+Tnst0i4A==", - "dev": true, - "requires": {} - }, - "postcss-ordered-values": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", - "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", - "dev": true, - "requires": { - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-overflow-shorthand": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-3.0.4.tgz", - "integrity": "sha512-otYl/ylHK8Y9bcBnPLo3foYFLL6a6Ak+3EQBPOTR7luMYCOsiVTUk1iLvNf6tVPNGXcoL9Hoz37kpfriRIFb4A==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-page-break": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-3.0.4.tgz", - "integrity": "sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==", - "dev": true, - "requires": {} - }, - "postcss-place": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-7.0.5.tgz", - "integrity": "sha512-wR8igaZROA6Z4pv0d+bvVrvGY4GVHihBCBQieXFY3kuSuMyOmEnnfFzHl/tQuqHZkfkIVBEbDvYcFfHmpSet9g==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-preset-env": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-7.8.3.tgz", - "integrity": "sha512-T1LgRm5uEVFSEF83vHZJV2z19lHg4yJuZ6gXZZkqVsqv63nlr6zabMH3l4Pc01FQCyfWVrh2GaUeCVy9Po+Aag==", - "dev": true, - "requires": { - "@csstools/postcss-cascade-layers": "^1.1.1", - "@csstools/postcss-color-function": "^1.1.1", - "@csstools/postcss-font-format-keywords": "^1.0.1", - "@csstools/postcss-hwb-function": "^1.0.2", - "@csstools/postcss-ic-unit": "^1.0.1", - "@csstools/postcss-is-pseudo-class": "^2.0.7", - "@csstools/postcss-nested-calc": "^1.0.0", - "@csstools/postcss-normalize-display-values": "^1.0.1", - "@csstools/postcss-oklab-function": "^1.1.1", - "@csstools/postcss-progressive-custom-properties": "^1.3.0", - "@csstools/postcss-stepped-value-functions": "^1.0.1", - "@csstools/postcss-text-decoration-shorthand": "^1.0.0", - "@csstools/postcss-trigonometric-functions": "^1.0.2", - "@csstools/postcss-unset-value": "^1.0.2", - "autoprefixer": "^10.4.13", - "browserslist": "^4.21.4", - "css-blank-pseudo": "^3.0.3", - "css-has-pseudo": "^3.0.4", - "css-prefers-color-scheme": "^6.0.3", - "cssdb": "^7.1.0", - "postcss-attribute-case-insensitive": "^5.0.2", - "postcss-clamp": "^4.1.0", - "postcss-color-functional-notation": "^4.2.4", - "postcss-color-hex-alpha": "^8.0.4", - "postcss-color-rebeccapurple": "^7.1.1", - "postcss-custom-media": "^8.0.2", - "postcss-custom-properties": "^12.1.10", - "postcss-custom-selectors": "^6.0.3", - "postcss-dir-pseudo-class": "^6.0.5", - "postcss-double-position-gradients": "^3.1.2", - "postcss-env-function": "^4.0.6", - "postcss-focus-visible": "^6.0.4", - "postcss-focus-within": "^5.0.4", - "postcss-font-variant": "^5.0.0", - "postcss-gap-properties": "^3.0.5", - "postcss-image-set-function": "^4.0.7", - "postcss-initial": "^4.0.1", - "postcss-lab-function": "^4.2.1", - "postcss-logical": "^5.0.4", - "postcss-media-minmax": "^5.0.0", - "postcss-nesting": "^10.2.0", - "postcss-opacity-percentage": "^1.1.2", - "postcss-overflow-shorthand": "^3.0.4", - "postcss-page-break": "^3.0.4", - "postcss-place": "^7.0.5", - "postcss-pseudo-class-any-link": "^7.1.6", - "postcss-replace-overflow-wrap": "^4.0.0", - "postcss-selector-not": "^6.0.1", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-pseudo-class-any-link": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-7.1.6.tgz", - "integrity": "sha512-9sCtZkO6f/5ML9WcTLcIyV1yz9D1rf0tWc+ulKcvV30s0iZKS/ONyETvoWsr6vnrmW+X+KmuK3gV/w5EWnT37w==", - "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.10" - } - }, - "postcss-reduce-initial": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.1.tgz", - "integrity": "sha512-//jeDqWcHPuXGZLoolFrUXBDyuEGbr9S2rMo19bkTIjBQ4PqkaO+oI8wua5BOUxpfi97i3PCoInsiFIEBfkm9w==", - "dev": true, - "requires": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0" - } - }, - "postcss-reduce-transforms": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", - "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-replace-overflow-wrap": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz", - "integrity": "sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==", - "dev": true, - "requires": {} - }, - "postcss-selector-not": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-6.0.1.tgz", - "integrity": "sha512-1i9affjAe9xu/y9uqWH+tD4r6/hDaXJruk8xn2x1vzxC2U3J3LKO3zJW4CyxlNhA56pADJ/djpEwpH1RClI2rQ==", - "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.10" - } - }, - "postcss-selector-parser": { - "version": "6.0.11", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz", - "integrity": "sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==", - "dev": true, - "requires": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - } - }, - "postcss-svgo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", - "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0", - "svgo": "^2.7.0" - }, - "dependencies": { - "commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true - }, - "css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "dev": true, - "requires": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - } - }, - "mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "svgo": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", - "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", - "dev": true, - "requires": { - "@trysound/sax": "0.2.0", - "commander": "^7.2.0", - "css-select": "^4.1.3", - "css-tree": "^1.1.3", - "csso": "^4.2.0", - "picocolors": "^1.0.0", - "stable": "^0.1.8" - } - } - } - }, - "postcss-unique-selectors": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", - "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", - "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.5" - } - }, - "postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" - }, - "prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==" - }, - "present": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/present/-/present-0.0.6.tgz", - "integrity": "sha512-8HGGcsH0xefDkhtWzXhigzieKtervWPQgyX8RtQD3cKr4wU307j8XANVSaZLxbR0+1EBonCJNOdUrQ7hbk3Kiw==" - }, - "pretty-bytes": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", - "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", - "dev": true - }, - "pretty-error": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", - "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", - "dev": true, - "requires": { - "lodash": "^4.17.20", - "renderkid": "^3.0.0" - } - }, - "pretty-format": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", - "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true - }, - "react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true - } - } - }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==" - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "promise": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", - "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", - "dev": true, - "requires": { - "asap": "~2.0.6" - } - }, - "promise-polyfill": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-3.1.0.tgz", - "integrity": "sha512-t20OwHJ4ZOUj5fV+qms67oczphAVkRC6Rrjcrne+V1FJkQMym7n69xJmYyXHulm9OUQ0Ie5KSzg0QhOYgaxy+w==" - }, - "prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, - "requires": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - } - }, - "prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - }, - "dependencies": { - "react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - } - } - }, - "prop-types-extra": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/prop-types-extra/-/prop-types-extra-1.1.1.tgz", - "integrity": "sha512-59+AHNnHYCdiC+vMwY52WmvP5dM3QLeoumYuEyceQDi9aEhtwN9zIQ2ZNo25sMyXnbh32h+P1ezDsUpUH3JAew==", - "requires": { - "react-is": "^16.3.2", - "warning": "^4.0.0" - }, - "dependencies": { - "react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - } - } - }, - "proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dev": true, - "requires": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "dependencies": { - "ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "dev": true - } - } - }, - "psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", - "dev": true - }, - "punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==" - }, - "q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", - "dev": true - }, - "qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dev": true, - "requires": { - "side-channel": "^1.0.4" - } - }, - "quad-indices": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/quad-indices/-/quad-indices-2.0.1.tgz", - "integrity": "sha512-6jtmCsEbGAh5npThXrBaubbTjPcF0rMbn57XCJVI7LkW8PUT56V+uIrRCCWCn85PSgJC9v8Pm5tnJDwmOBewvA==", - "requires": { - "an-array": "^1.0.0", - "dtype": "^2.0.0", - "is-buffer": "^1.0.2" - } - }, - "query-string": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", - "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", - "requires": { - "decode-uri-component": "^0.2.0", - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" - } - }, - "querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", - "dev": true - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" - }, - "quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "dev": true - }, - "raf": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", - "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", - "dev": true, - "requires": { - "performance-now": "^2.1.0" - } - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dev": true - }, - "raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "dev": true, - "requires": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "dependencies": { - "bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - } - } - }, - "react": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", - "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", - "requires": { - "loose-envify": "^1.1.0" - } - }, - "react-app-polyfill": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/react-app-polyfill/-/react-app-polyfill-3.0.0.tgz", - "integrity": "sha512-sZ41cxiU5llIB003yxxQBYrARBqe0repqPTTYBTmMqTz9szeBbE37BehCE891NZsmdZqqP+xWKdT3eo3vOzN8w==", - "dev": true, - "requires": { - "core-js": "^3.19.2", - "object-assign": "^4.1.1", - "promise": "^8.1.0", - "raf": "^3.4.1", - "regenerator-runtime": "^0.13.9", - "whatwg-fetch": "^3.6.2" - } - }, - "react-bootstrap": { - "version": "2.10.2", - "resolved": "https://registry.npmjs.org/react-bootstrap/-/react-bootstrap-2.10.2.tgz", - "integrity": "sha512-UvB7mRqQjivdZNxJNEA2yOQRB7L9N43nBnKc33K47+cH90/ujmnMwatTCwQLu83gLhrzAl8fsa6Lqig/KLghaA==", - "requires": { - "@babel/runtime": "^7.22.5", - "@restart/hooks": "^0.4.9", - "@restart/ui": "^1.6.8", - "@types/react-transition-group": "^4.4.6", - "classnames": "^2.3.2", - "dom-helpers": "^5.2.1", - "invariant": "^2.2.4", - "prop-types": "^15.8.1", - "prop-types-extra": "^1.1.0", - "react-transition-group": "^4.4.5", - "uncontrollable": "^7.2.1", - "warning": "^4.0.3" - } - }, - "react-data-table-component": { - "version": "7.5.3", - "resolved": "https://registry.npmjs.org/react-data-table-component/-/react-data-table-component-7.5.3.tgz", - "integrity": "sha512-JhatRTgThAAa1HobPaPmkNPsjLT6+fnMIdtcXRCy+0bSYN7XJnTgob9Qyi4bjHh/8tMPTHtxZCV/TKiPwRvFMA==", - "requires": { - "deepmerge": "^4.2.2" - } - }, - "react-dev-utils": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz", - "integrity": "sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.16.0", - "address": "^1.1.2", - "browserslist": "^4.18.1", - "chalk": "^4.1.2", - "cross-spawn": "^7.0.3", - "detect-port-alt": "^1.1.6", - "escape-string-regexp": "^4.0.0", - "filesize": "^8.0.6", - "find-up": "^5.0.0", - "fork-ts-checker-webpack-plugin": "^6.5.0", - "global-modules": "^2.0.0", - "globby": "^11.0.4", - "gzip-size": "^6.0.0", - "immer": "^9.0.7", - "is-root": "^2.1.0", - "loader-utils": "^3.2.0", - "open": "^8.4.0", - "pkg-up": "^3.1.0", - "prompts": "^2.4.2", - "react-error-overlay": "^6.0.11", - "recursive-readdir": "^2.2.2", - "shell-quote": "^1.7.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "loader-utils": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", - "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "react-dom": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", - "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", - "requires": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.2" - } - }, - "react-error-overlay": { - "version": "6.0.11", - "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz", - "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==", - "dev": true - }, - "react-force-graph": { - "version": "1.43.0", - "resolved": "https://registry.npmjs.org/react-force-graph/-/react-force-graph-1.43.0.tgz", - "integrity": "sha512-g59ZWGrR6hkokY8RMO6FQHbltaIZ3+AGf9mrQs+s1+J26Sc2Wc6aro4cLW8PTHMIHgX/zml44yp60gRbzdFSMw==", - "requires": { - "3d-force-graph": "1", - "3d-force-graph-ar": "1", - "3d-force-graph-vr": "2", - "force-graph": "1", - "prop-types": "15", - "react-kapsule": "2" - } - }, - "react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" - }, - "react-kapsule": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/react-kapsule/-/react-kapsule-2.2.6.tgz", - "integrity": "sha512-OUfvKeXSwpwVcGhyUWK6XaStEAA/KWFvlRAo/maS+GWhp7X0mSMbuZ/5jBACXhTFNGqWHf5yyt+LURiWA77HfA==", - "requires": { - "fromentries": "^1.3.2", - "jerrypick": "^1.0.5" - } - }, - "react-lifecycles-compat": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", - "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" - }, - "react-refresh": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.11.0.tgz", - "integrity": "sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==", - "dev": true - }, - "react-router": { - "version": "6.23.1", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.23.1.tgz", - "integrity": "sha512-fzcOaRF69uvqbbM7OhvQyBTFDVrrGlsFdS3AL+1KfIBtGETibHzi3FkoTRyiDJnWNc2VxrfvR+657ROHjaNjqQ==", - "requires": { - "@remix-run/router": "1.16.1" - } - }, - "react-router-dom": { - "version": "6.23.1", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.23.1.tgz", - "integrity": "sha512-utP+K+aSTtEdbWpC+4gxhdlPFwuEfDKq8ZrPFU65bbRJY+l706qjR7yaidBpo3MSeA/fzwbXWbKBI6ftOnP3OQ==", - "requires": { - "@remix-run/router": "1.16.1", - "react-router": "6.23.1" - } - }, - "react-scripts": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-5.0.1.tgz", - "integrity": "sha512-8VAmEm/ZAwQzJ+GOMLbBsTdDKOpuZh7RPs0UymvBR2vRk4iZWCskjbFnxqjrzoIvlNNRZ3QJFx6/qDSi6zSnaQ==", - "dev": true, - "requires": { - "@babel/core": "^7.16.0", - "@pmmmwh/react-refresh-webpack-plugin": "^0.5.3", - "@svgr/webpack": "^5.5.0", - "babel-jest": "^27.4.2", - "babel-loader": "^8.2.3", - "babel-plugin-named-asset-import": "^0.3.8", - "babel-preset-react-app": "^10.0.1", - "bfj": "^7.0.2", - "browserslist": "^4.18.1", - "camelcase": "^6.2.1", - "case-sensitive-paths-webpack-plugin": "^2.4.0", - "css-loader": "^6.5.1", - "css-minimizer-webpack-plugin": "^3.2.0", - "dotenv": "^10.0.0", - "dotenv-expand": "^5.1.0", - "eslint": "^8.3.0", - "eslint-config-react-app": "^7.0.1", - "eslint-webpack-plugin": "^3.1.1", - "file-loader": "^6.2.0", - "fs-extra": "^10.0.0", - "fsevents": "^2.3.2", - "html-webpack-plugin": "^5.5.0", - "identity-obj-proxy": "^3.0.0", - "jest": "^27.4.3", - "jest-resolve": "^27.4.2", - "jest-watch-typeahead": "^1.0.0", - "mini-css-extract-plugin": "^2.4.5", - "postcss": "^8.4.4", - "postcss-flexbugs-fixes": "^5.0.2", - "postcss-loader": "^6.2.1", - "postcss-normalize": "^10.0.1", - "postcss-preset-env": "^7.0.1", - "prompts": "^2.4.2", - "react-app-polyfill": "^3.0.0", - "react-dev-utils": "^12.0.1", - "react-refresh": "^0.11.0", - "resolve": "^1.20.0", - "resolve-url-loader": "^4.0.0", - "sass-loader": "^12.3.0", - "semver": "^7.3.5", - "source-map-loader": "^3.0.0", - "style-loader": "^3.3.1", - "tailwindcss": "^3.0.2", - "terser-webpack-plugin": "^5.2.5", - "webpack": "^5.64.4", - "webpack-dev-server": "^4.6.0", - "webpack-manifest-plugin": "^4.0.2", - "workbox-webpack-plugin": "^6.4.1" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "react-sizeme": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/react-sizeme/-/react-sizeme-3.0.2.tgz", - "integrity": "sha512-xOIAOqqSSmKlKFJLO3inBQBdymzDuXx4iuwkNcJmC96jeiOg5ojByvL+g3MW9LPEsojLbC6pf68zOfobK8IPlw==", - "requires": { - "element-resize-detector": "^1.2.2", - "invariant": "^2.2.4", - "shallowequal": "^1.1.0", - "throttle-debounce": "^3.0.1" - } - }, - "react-smooth": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/react-smooth/-/react-smooth-4.0.1.tgz", - "integrity": "sha512-OE4hm7XqR0jNOq3Qmk9mFLyd6p2+j6bvbPJ7qlB7+oo0eNcL2l7WQzG6MBnT3EXY6xzkLMUBec3AfewJdA0J8w==", - "requires": { - "fast-equals": "^5.0.1", - "prop-types": "^15.8.1", - "react-transition-group": "^4.4.5" - } - }, - "react-transition-group": { - "version": "4.4.5", - "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", - "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", - "requires": { - "@babel/runtime": "^7.5.5", - "dom-helpers": "^5.0.1", - "loose-envify": "^1.4.0", - "prop-types": "^15.6.2" - } - }, - "read-cache": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", - "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", - "dev": true, - "requires": { - "pify": "^2.3.0" - } - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "recharts": { - "version": "2.12.7", - "resolved": "https://registry.npmjs.org/recharts/-/recharts-2.12.7.tgz", - "integrity": "sha512-hlLJMhPQfv4/3NBSAyq3gzGg4h2v69RJh6KU7b3pXYNNAELs9kEoXOjbkxdXpALqKBoVmVptGfLpxdaVYqjmXQ==", - "requires": { - "clsx": "^2.0.0", - "eventemitter3": "^4.0.1", - "lodash": "^4.17.21", - "react-is": "^16.10.2", - "react-smooth": "^4.0.0", - "recharts-scale": "^0.4.4", - "tiny-invariant": "^1.3.1", - "victory-vendor": "^36.6.8" - }, - "dependencies": { - "clsx": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", - "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==" - }, - "react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - } - } - }, - "recharts-scale": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/recharts-scale/-/recharts-scale-0.4.5.tgz", - "integrity": "sha512-kivNFO+0OcUNu7jQquLXAxz1FIwZj8nrj+YkOKc5694NbjCvcT6aSZiIzNzd2Kul4o4rTto8QVR9lMNtxD4G1w==", - "requires": { - "decimal.js-light": "^2.4.1" - } - }, - "recursive-readdir": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", - "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", - "dev": true, - "requires": { - "minimatch": "^3.0.5" - } - }, - "regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" - }, - "regenerate-unicode-properties": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", - "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", - "requires": { - "regenerate": "^1.4.2" - } - }, - "regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", - "dev": true - }, - "regenerator-transform": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", - "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", - "requires": { - "@babel/runtime": "^7.8.4" - } - }, - "regex-parser": { - "version": "2.2.11", - "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz", - "integrity": "sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==", - "dev": true - }, - "regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" - } - }, - "regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==" - }, - "regexpu-core": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.2.tgz", - "integrity": "sha512-T0+1Zp2wjF/juXMrMxHxidqGYn8U4R+zleSJhX9tQ1PUsS8a9UtYfbsF9LdiVgNX3kiX8RNaKM42nfSgvFJjmw==", - "requires": { - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsgen": "^0.7.1", - "regjsparser": "^0.9.1", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" - } - }, - "regjsgen": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.7.1.tgz", - "integrity": "sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==" - }, - "regjsparser": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", - "requires": { - "jsesc": "~0.5.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==" - } - } - }, - "relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", - "dev": true - }, - "renderkid": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", - "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", - "dev": true, - "requires": { - "css-select": "^4.1.3", - "dom-converter": "^0.2.0", - "htmlparser2": "^6.1.0", - "lodash": "^4.17.21", - "strip-ansi": "^6.0.1" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true - }, - "require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true - }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "dev": true - }, - "resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "requires": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "requires": { - "resolve-from": "^5.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - } - } - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" - }, - "resolve-url-loader": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-4.0.0.tgz", - "integrity": "sha512-05VEMczVREcbtT7Bz+C+96eUO5HDNvdthIiMB34t7FcF8ehcu4wC0sSgPUubs3XW2Q3CNLJk/BJrCU9wVRymiA==", - "dev": true, - "requires": { - "adjust-sourcemap-loader": "^4.0.0", - "convert-source-map": "^1.7.0", - "loader-utils": "^2.0.0", - "postcss": "^7.0.35", - "source-map": "0.6.1" - }, - "dependencies": { - "picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "requires": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "resolve.exports": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.1.tgz", - "integrity": "sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ==", - "dev": true - }, - "retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "dev": true - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "requires": { - "glob": "^7.1.3" - } - }, - "rollup": { - "version": "2.79.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", - "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", - "dev": true, - "requires": { - "fsevents": "~2.3.2" - } - }, - "rollup-plugin-terser": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", - "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "jest-worker": "^26.2.1", - "serialize-javascript": "^4.0.0", - "terser": "^5.0.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", - "dev": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - } - }, - "serialize-javascript": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - }, - "safe-regex-test": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-regex": "^1.1.4" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "sanitize.css": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/sanitize.css/-/sanitize.css-13.0.0.tgz", - "integrity": "sha512-ZRwKbh/eQ6w9vmTjkuG0Ioi3HBwPFce0O+v//ve+aOq1oeCy7jMV2qzzAlpsNuqpqCBjjriM1lbtZbF/Q8jVyA==", - "dev": true - }, - "sass-loader": { - "version": "12.6.0", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-12.6.0.tgz", - "integrity": "sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA==", - "dev": true, - "requires": { - "klona": "^2.0.4", - "neo-async": "^2.6.2" - } - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" - }, - "saxes": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", - "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", - "dev": true, - "requires": { - "xmlchars": "^2.2.0" - } - }, - "scheduler": { - "version": "0.23.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", - "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", - "requires": { - "loose-envify": "^1.1.0" - } - }, - "schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - }, - "select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", - "dev": true - }, - "selfsigned": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", - "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", - "dev": true, - "requires": { - "node-forge": "^1" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - }, - "send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "dev": true, - "requires": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - }, - "dependencies": { - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - } - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - } - } - }, - "serialize-javascript": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", - "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - }, - "serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", - "dev": true, - "requires": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "dev": true - }, - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", - "dev": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "dev": true - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "dev": true - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "dev": true - } - } - }, - "serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "dev": true, - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - } - }, - "setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true - }, - "shallowequal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", - "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" - }, - "shell-quote": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.0.tgz", - "integrity": "sha512-QHsz8GgQIGKlRi24yFc6a6lN69Idnx634w49ay6+jA5yFh7a1UY+4Rp6HPx/L/1zcEDPEij8cIsiqR6bQsE5VQ==", - "dev": true - }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==" - }, - "simple-get": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.2.tgz", - "integrity": "sha512-Ijd/rV5o+mSBBs4F/x9oDPtTx9Zb6X9brmnXvMW4J7IR15ngi9q5xxqWBKU744jTZiaXtxaPL7uHG6vtN8kUkw==", - "requires": { - "decompress-response": "^3.3.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" - }, - "sockjs": { - "version": "0.3.24", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", - "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", - "dev": true, - "requires": { - "faye-websocket": "^0.11.3", - "uuid": "^8.3.2", - "websocket-driver": "^0.7.4" - } - }, - "source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==" - }, - "source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" - }, - "source-map-loader": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-3.0.2.tgz", - "integrity": "sha512-BokxPoLjyl3iOrgkWaakaxqnelAJSS+0V+De0kKIq6lyWrXuiPgYTGp6z3iHmqljKAaLXwZa+ctD8GccRJeVvg==", - "dev": true, - "requires": { - "abab": "^2.0.5", - "iconv-lite": "^0.6.3", - "source-map-js": "^1.0.1" - } - }, - "source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", - "dev": true - }, - "spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", - "dev": true, - "requires": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - } - }, - "spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", - "dev": true, - "requires": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true - }, - "stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", - "dev": true - }, - "stack-utils": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", - "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", - "dev": true, - "requires": { - "escape-string-regexp": "^2.0.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true - } - } - }, - "stackframe": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", - "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==", - "dev": true - }, - "statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true - }, - "stop-iteration-iterator": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", - "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", - "requires": { - "internal-slot": "^1.0.4" - } - }, - "strict-uri-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", - "integrity": "sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==" - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "requires": { - "safe-buffer": "~5.2.0" - } - }, - "string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dev": true, - "requires": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - } - }, - "string-natural-compare": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/string-natural-compare/-/string-natural-compare-3.0.1.tgz", - "integrity": "sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw==" - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "dependencies": { - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - } - } - }, - "string.prototype.matchall": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz", - "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.4.3", - "side-channel": "^1.0.4" - } - }, - "string.prototype.trimend": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", - "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "string.prototype.trimstart": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", - "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "stringify-object": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", - "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", - "dev": true, - "requires": { - "get-own-enumerable-property-symbols": "^3.0.0", - "is-obj": "^1.0.1", - "is-regexp": "^1.0.0" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true - }, - "strip-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-2.0.1.tgz", - "integrity": "sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==", - "dev": true - }, - "strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" - }, - "style-loader": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.1.tgz", - "integrity": "sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ==", - "dev": true, - "requires": {} - }, - "styled-components": { - "version": "5.3.6", - "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-5.3.6.tgz", - "integrity": "sha512-hGTZquGAaTqhGWldX7hhfzjnIYBZ0IXQXkCYdvF1Sq3DsUaLx6+NTHC5Jj1ooM2F68sBiVz3lvhfwQs/S3l6qg==", - "requires": { - "@babel/helper-module-imports": "^7.0.0", - "@babel/traverse": "^7.4.5", - "@emotion/is-prop-valid": "^1.1.0", - "@emotion/stylis": "^0.8.4", - "@emotion/unitless": "^0.7.4", - "babel-plugin-styled-components": ">= 1.12.0", - "css-to-react-native": "^3.0.0", - "hoist-non-react-statics": "^3.0.0", - "shallowequal": "^1.1.0", - "supports-color": "^5.5.0" - }, - "dependencies": { - "@emotion/unitless": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz", - "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==" - } - } - }, - "stylehacks": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", - "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", - "dev": true, - "requires": { - "browserslist": "^4.21.4", - "postcss-selector-parser": "^6.0.4" - } - }, - "stylis": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.1.3.tgz", - "integrity": "sha512-GP6WDNWf+o403jrEp9c5jibKavrtLW+/qYGhFxFrG8maXhwTBI7gLLhiBb0o7uFccWN+EOS9aMO6cGHWAO07OA==" - }, - "super-animejs": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/super-animejs/-/super-animejs-3.1.0.tgz", - "integrity": "sha512-6MFAFJDRuvwkovxQZPruuyHinTa4rgj4hNLOndjcYYhZLckoXtVRY9rJPuq8p6c/tgZJrFYEAYAfJ2/hhNtUCA==" - }, - "super-three": { - "version": "0.147.1", - "resolved": "https://registry.npmjs.org/super-three/-/super-three-0.147.1.tgz", - "integrity": "sha512-H8yhlXqjscWpqYLhPQ/h3EfElNBxe3Ktp1tGVp13vBjIxF5sMVkAo2NpIDXkY8+MVhuTrA0ZN42IMNPdOKwKLg==" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - }, - "supports-hyperlinks": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", - "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", - "dev": true, - "requires": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" - }, - "svg-parser": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", - "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==", - "dev": true - }, - "svgo": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.0.2.tgz", - "integrity": "sha512-Z706C1U2pb1+JGP48fbazf3KxHrWOsLme6Rv7imFBn5EnuanDW1GPaA/P1/dvObE670JDePC3mnj0k0B7P0jjQ==", - "requires": { - "@trysound/sax": "0.2.0", - "commander": "^7.2.0", - "css-select": "^5.1.0", - "css-tree": "^2.2.1", - "csso": "^5.0.5", - "picocolors": "^1.0.0" - }, - "dependencies": { - "commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==" - }, - "css-select": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", - "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", - "requires": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" - } - }, - "css-tree": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", - "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", - "requires": { - "mdn-data": "2.0.28", - "source-map-js": "^1.0.1" - } - }, - "csso": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", - "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", - "requires": { - "css-tree": "~2.2.0" - } - }, - "dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "requires": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - } - }, - "domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "requires": { - "domelementtype": "^2.3.0" - } - }, - "domutils": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.0.1.tgz", - "integrity": "sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==", - "requires": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.1" - } - }, - "entities": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz", - "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==" - }, - "mdn-data": { - "version": "2.0.28", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", - "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==" - } - } - }, - "symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "dev": true - }, - "tailwindcss": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.2.4.tgz", - "integrity": "sha512-AhwtHCKMtR71JgeYDaswmZXhPcW9iuI9Sp2LvZPo9upDZ7231ZJ7eA9RaURbhpXGVlrjX4cFNlB4ieTetEb7hQ==", - "dev": true, - "requires": { - "arg": "^5.0.2", - "chokidar": "^3.5.3", - "color-name": "^1.1.4", - "detective": "^5.2.1", - "didyoumean": "^1.2.2", - "dlv": "^1.1.3", - "fast-glob": "^3.2.12", - "glob-parent": "^6.0.2", - "is-glob": "^4.0.3", - "lilconfig": "^2.0.6", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "object-hash": "^3.0.0", - "picocolors": "^1.0.0", - "postcss": "^8.4.18", - "postcss-import": "^14.1.0", - "postcss-js": "^4.0.0", - "postcss-load-config": "^3.1.4", - "postcss-nested": "6.0.0", - "postcss-selector-parser": "^6.0.10", - "postcss-value-parser": "^4.2.0", - "quick-lru": "^5.1.1", - "resolve": "^1.22.1" - }, - "dependencies": { - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - } - } - }, - "tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true - }, - "temp-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", - "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", - "dev": true - }, - "tempy": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.6.0.tgz", - "integrity": "sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==", - "dev": true, - "requires": { - "is-stream": "^2.0.0", - "temp-dir": "^2.0.0", - "type-fest": "^0.16.0", - "unique-string": "^2.0.0" - }, - "dependencies": { - "type-fest": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", - "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", - "dev": true - } - } - }, - "terminal-link": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", - "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", - "dev": true, - "requires": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" - } - }, - "terser": { - "version": "5.16.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.2.tgz", - "integrity": "sha512-JKuM+KvvWVqT7muHVyrwv7FVRPnmHDwF6XwoIxdbF5Witi0vu99RYpxDexpJndXt3jbZZmmWr2/mQa6HvSNdSg==", - "dev": true, - "requires": { - "@jridgewell/source-map": "^0.3.2", - "acorn": "^8.5.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "dependencies": { - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - } - } - }, - "terser-webpack-plugin": { - "version": "5.3.6", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz", - "integrity": "sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==", - "dev": true, - "requires": { - "@jridgewell/trace-mapping": "^0.3.14", - "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.0", - "terser": "^5.14.1" - } - }, - "test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "requires": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - } - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" - }, - "three": { - "version": "0.152.2", - "resolved": "https://registry.npmjs.org/three/-/three-0.152.2.tgz", - "integrity": "sha512-Ff9zIpSfkkqcBcpdiFo2f35vA9ZucO+N8TNacJOqaEE6DrB0eufItVMib8bK8Pcju/ZNT6a7blE1GhTpkdsILw==" - }, - "three-bmfont-text": { - "version": "git+ssh://git@github.com/dmarcos/three-bmfont-text.git#21d017046216e318362c48abd1a48bddfb6e0733", - "integrity": "sha512-lIMa1n+QKNU1f/LZgtS1oUGpoop3MuVXrUr5ybZOUR3+Jk//zjqScnQpHml6MWyvZzL8A5/1Hd8Tsqd3M1kudA==", - "from": "three-bmfont-text@github:dmarcos/three-bmfont-text#21d017046216e318362c48abd1a48bddfb6e0733", - "requires": { - "array-shuffle": "^1.0.1", - "inherits": "^2.0.1", - "layout-bmfont-text": "^1.2.0", - "nice-color-palettes": "^1.0.1", - "object-assign": "^4.0.1", - "quad-indices": "^2.0.1", - "three-buffer-vertex-data": "dmarcos/three-buffer-vertex-data#69378fc58daf27d3b1d930df9f233473e4a4818c" - } - }, - "three-buffer-vertex-data": { - "version": "git+ssh://git@github.com/dmarcos/three-buffer-vertex-data.git#69378fc58daf27d3b1d930df9f233473e4a4818c", - "integrity": "sha512-ZPCCbGfueRzd2/YwH136UnVN+N11Mvxu7uPaEzIdtuk0m5HPs1LGXOM5hOkpxamjvqSC6MDJ3nd11grGi7sMKw==", - "from": "three-buffer-vertex-data@dmarcos/three-buffer-vertex-data#69378fc58daf27d3b1d930df9f233473e4a4818c", - "requires": { - "flatten-vertex-data": "^1.0.0" - } - }, - "three-forcegraph": { - "version": "1.41.1", - "resolved": "https://registry.npmjs.org/three-forcegraph/-/three-forcegraph-1.41.1.tgz", - "integrity": "sha512-piGaogBmZBLV4dENYdFA5l6KwDjoiJfzVvKU+kAQe7/TYreSwYONwSnRFemwje5nilOkdJmdw1qjriJbhDsOmw==", - "requires": { - "accessor-fn": "1", - "d3-array": "1 - 3", - "d3-force-3d": "2 - 3", - "d3-scale": "1 - 4", - "d3-scale-chromatic": "1 - 3", - "data-joint": "^1.2", - "kapsule": "^1.13", - "ngraph.forcelayout": "^3.3", - "ngraph.graph": "^20.0", - "tinycolor2": "^1.5" - } - }, - "three-pathfinding": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/three-pathfinding/-/three-pathfinding-0.7.0.tgz", - "integrity": "sha512-UwWvzgio1UFe81n5jKHNzB4B+AG3wfZ54OKp7bTb1MHuC3cy6RTtr0dbbiPQQoqxzr+DRArR2DUwQSEknw5+nw==" - }, - "three-render-objects": { - "version": "1.27.8", - "resolved": "https://registry.npmjs.org/three-render-objects/-/three-render-objects-1.27.8.tgz", - "integrity": "sha512-ufnSu2AT1bPcg1NX91SS3hz6OxJcpNUGOjNtarCmzNmRkVlhc/PZJHcF4aPU6cy8X7R3bQfGRgUdh75kpAyTgg==", - "requires": { - "@tweenjs/tween.js": "18", - "accessor-fn": "1", - "kapsule": "^1.13", - "polished": "4" - } - }, - "throat": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.2.tgz", - "integrity": "sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ==", - "dev": true - }, - "throttle-debounce": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-3.0.1.tgz", - "integrity": "sha512-dTEWWNu6JmeVXY0ZYoPuH5cRIwc0MeGbJwah9KUNYSJwommQpCzTySTpEe8Gs1J23aeWEuAobe4Ag7EHVt/LOg==" - }, - "thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", - "dev": true - }, - "timed-out": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==" - }, - "tiny-invariant": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", - "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==" - }, - "tinycolor2": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.5.2.tgz", - "integrity": "sha512-h80m9GPFGbcLzZByXlNSEhp1gf8Dy+VX/2JCGUZsWLo7lV1mnE/XlxGYgRBoMLJh1lIDXP0EMC4RPTjlRaV+Bg==" - }, - "tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==" - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "requires": { - "is-number": "^7.0.0" - } - }, - "toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "dev": true - }, - "tough-cookie": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.2.tgz", - "integrity": "sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==", - "dev": true, - "requires": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" - }, - "dependencies": { - "universalify": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", - "dev": true - } - } - }, - "tr46": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", - "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", - "dev": true, - "requires": { - "punycode": "^2.1.1" - } - }, - "tryer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz", - "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==", - "dev": true - }, - "tsconfig-paths": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", - "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", - "requires": { - "@types/json5": "^0.0.29", - "json5": "^1.0.1", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - }, - "dependencies": { - "json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "requires": { - "minimist": "^1.2.0" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==" - } - } - }, - "tslib": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", - "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" - }, - "tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "requires": { - "tslib": "^1.8.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } - } - }, - "type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "requires": { - "prelude-ls": "^1.2.1" - } - }, - "type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true - }, - "type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true - }, - "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dev": true, - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } - }, - "typed-array-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", - "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", - "requires": { - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" - } - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, - "requires": { - "is-typedarray": "^1.0.0" - } - }, - "typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", - "peer": true - }, - "unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "requires": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - } - }, - "uncontrollable": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/uncontrollable/-/uncontrollable-7.2.1.tgz", - "integrity": "sha512-svtcfoTADIB0nT9nltgjujTi7BzVmwjZClOmskKu/E8FW9BXzg9os8OLr4f8Dlnk0rYWJIWr4wv9eKUXiQvQwQ==", - "requires": { - "@babel/runtime": "^7.6.3", - "@types/react": ">=16.9.11", - "invariant": "^2.2.4", - "react-lifecycles-compat": "^3.0.4" - } - }, - "unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==" - }, - "unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "requires": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - } - }, - "unicode-match-property-value-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", - "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==" - }, - "unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==" - }, - "unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", - "dev": true, - "requires": { - "crypto-random-string": "^2.0.0" - } - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "dev": true - }, - "unquote": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", - "integrity": "sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==", - "dev": true - }, - "upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "dev": true - }, - "update-browserslist-db": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", - "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", - "requires": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - } - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "requires": { - "punycode": "^2.1.0" - } - }, - "url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", - "dev": true, - "requires": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, - "url-set-query": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-set-query/-/url-set-query-1.0.0.tgz", - "integrity": "sha512-3AChu4NiXquPfeckE5R5cGdiHCMWJx1dwCWOmWIL4KHAziJNOFIYJlpGFeKDvwLPHovZRCxK3cYlwzqI9Vp+Gg==" - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true - }, - "util.promisify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", - "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.2", - "has-symbols": "^1.0.1", - "object.getownpropertydescriptors": "^2.1.0" - } - }, - "utila": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==", - "dev": true - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "dev": true - }, - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true - }, - "v8-to-istanbul": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz", - "integrity": "sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0", - "source-map": "^0.7.3" - }, - "dependencies": { - "source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "dev": true - } - } - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "dev": true - }, - "victory-vendor": { - "version": "36.6.10", - "resolved": "https://registry.npmjs.org/victory-vendor/-/victory-vendor-36.6.10.tgz", - "integrity": "sha512-7YqYGtsA4mByokBhCjk+ewwPhUfzhR1I3Da6/ZsZUv/31ceT77RKoaqrxRq5Ki+9we4uzf7+A+7aG2sfYhm7nA==", - "requires": { - "@types/d3-array": "^3.0.3", - "@types/d3-ease": "^3.0.0", - "@types/d3-interpolate": "^3.0.1", - "@types/d3-scale": "^4.0.2", - "@types/d3-shape": "^3.1.0", - "@types/d3-time": "^3.0.0", - "@types/d3-timer": "^3.0.0", - "d3-array": "^3.1.6", - "d3-ease": "^3.0.1", - "d3-interpolate": "^3.0.1", - "d3-scale": "^4.0.2", - "d3-shape": "^3.1.0", - "d3-time": "^3.0.0", - "d3-timer": "^3.0.1" - } - }, - "w3c-hr-time": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", - "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", - "dev": true, - "requires": { - "browser-process-hrtime": "^1.0.0" - } - }, - "w3c-xmlserializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", - "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", - "dev": true, - "requires": { - "xml-name-validator": "^3.0.0" - } - }, - "walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "dev": true, - "requires": { - "makeerror": "1.0.12" - } - }, - "warning": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", - "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", - "requires": { - "loose-envify": "^1.0.0" - } - }, - "watchpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", - "dev": true, - "requires": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - } - }, - "wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "dev": true, - "requires": { - "minimalistic-assert": "^1.0.0" - } - }, - "webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", - "dev": true - }, - "webpack": { - "version": "5.75.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.75.0.tgz", - "integrity": "sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==", - "dev": true, - "requires": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^0.0.51", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "acorn": "^8.7.1", - "acorn-import-assertions": "^1.7.6", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.10.0", - "es-module-lexer": "^0.9.0", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.1.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.4.0", - "webpack-sources": "^3.2.3" - }, - "dependencies": { - "@types/estree": { - "version": "0.0.51", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", - "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", - "dev": true - }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - } - } - }, - "webpack-dev-middleware": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", - "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", - "dev": true, - "requires": { - "colorette": "^2.0.10", - "memfs": "^3.4.3", - "mime-types": "^2.1.31", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" - }, - "dependencies": { - "ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.3" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - } - } - } - }, - "webpack-dev-server": { - "version": "4.11.1", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.11.1.tgz", - "integrity": "sha512-lILVz9tAUy1zGFwieuaQtYiadImb5M3d+H+L1zDYalYoDl0cksAB1UNyuE5MMWJrG6zR1tXkCP2fitl7yoUJiw==", - "dev": true, - "requires": { - "@types/bonjour": "^3.5.9", - "@types/connect-history-api-fallback": "^1.3.5", - "@types/express": "^4.17.13", - "@types/serve-index": "^1.9.1", - "@types/serve-static": "^1.13.10", - "@types/sockjs": "^0.3.33", - "@types/ws": "^8.5.1", - "ansi-html-community": "^0.0.8", - "bonjour-service": "^1.0.11", - "chokidar": "^3.5.3", - "colorette": "^2.0.10", - "compression": "^1.7.4", - "connect-history-api-fallback": "^2.0.0", - "default-gateway": "^6.0.3", - "express": "^4.17.3", - "graceful-fs": "^4.2.6", - "html-entities": "^2.3.2", - "http-proxy-middleware": "^2.0.3", - "ipaddr.js": "^2.0.1", - "open": "^8.0.9", - "p-retry": "^4.5.0", - "rimraf": "^3.0.2", - "schema-utils": "^4.0.0", - "selfsigned": "^2.1.1", - "serve-index": "^1.9.1", - "sockjs": "^0.3.24", - "spdy": "^4.0.2", - "webpack-dev-middleware": "^5.3.1", - "ws": "^8.4.2" - }, - "dependencies": { - "ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.3" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - } - }, - "ws": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.12.0.tgz", - "integrity": "sha512-kU62emKIdKVeEIOIKVegvqpXMSTAMLJozpHZaJNDYqBjzlSYXQGviYwN1osDLJ9av68qHd4a2oSjd7yD4pacig==", - "dev": true, - "requires": {} - } - } - }, - "webpack-manifest-plugin": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/webpack-manifest-plugin/-/webpack-manifest-plugin-4.1.1.tgz", - "integrity": "sha512-YXUAwxtfKIJIKkhg03MKuiFAD72PlrqCiwdwO4VEXdRO5V0ORCNwaOwAZawPZalCbmH9kBDmXnNeQOw+BIEiow==", - "dev": true, - "requires": { - "tapable": "^2.0.0", - "webpack-sources": "^2.2.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "webpack-sources": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.3.1.tgz", - "integrity": "sha512-y9EI9AO42JjEcrTJFOYmVywVZdKVUfOvDUPsJea5GIr1JOEGFVqwlY2K098fFoIjOkDzHn2AjRvM8dsBZu+gCA==", - "dev": true, - "requires": { - "source-list-map": "^2.0.1", - "source-map": "^0.6.1" - } - } - } - }, - "webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", - "dev": true - }, - "websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", - "dev": true, - "requires": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - } - }, - "websocket-extensions": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", - "dev": true - }, - "webvr-polyfill": { - "version": "0.10.12", - "resolved": "https://registry.npmjs.org/webvr-polyfill/-/webvr-polyfill-0.10.12.tgz", - "integrity": "sha512-trDJEVUQnRIVAnmImjEQ0BlL1NfuWl8+eaEdu+bs4g59c7OtETi/5tFkgEFDRaWEYwHntXs/uFF3OXZuutNGGA==", - "requires": { - "cardboard-vr-display": "^1.0.19" - } - }, - "webvr-polyfill-dpdb": { - "version": "1.0.18", - "resolved": "https://registry.npmjs.org/webvr-polyfill-dpdb/-/webvr-polyfill-dpdb-1.0.18.tgz", - "integrity": "sha512-O0S1ZGEWyPvyZEkS2VbyV7mtir/NM9MNK3EuhbHPoJ8EHTky2pTXehjIl+IiDPr+Lldgx129QGt3NGly7rwRPw==" - }, - "whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", - "dev": true, - "requires": { - "iconv-lite": "0.4.24" - }, - "dependencies": { - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - } - } - }, - "whatwg-fetch": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz", - "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==", - "dev": true - }, - "whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", - "dev": true - }, - "whatwg-url": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", - "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", - "dev": true, - "requires": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "requires": { - "isexe": "^2.0.0" - } - }, - "which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "requires": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - } - }, - "which-collection": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", - "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", - "requires": { - "is-map": "^2.0.1", - "is-set": "^2.0.1", - "is-weakmap": "^2.0.1", - "is-weakset": "^2.0.1" - } - }, - "which-typed-array": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", - "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", - "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.10" - } - }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" - }, - "word-wrapper": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/word-wrapper/-/word-wrapper-1.0.7.tgz", - "integrity": "sha512-VOPBFCm9b6FyYKQYfn9AVn2dQvdR/YOVFV6IBRA1TBMJWKffvhEX1af6FMGrttILs2Q9ikCRhLqkbY2weW6dOQ==" - }, - "workbox-background-sync": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-6.5.4.tgz", - "integrity": "sha512-0r4INQZMyPky/lj4Ou98qxcThrETucOde+7mRGJl13MPJugQNKeZQOdIJe/1AchOP23cTqHcN/YVpD6r8E6I8g==", - "dev": true, - "requires": { - "idb": "^7.0.1", - "workbox-core": "6.5.4" - } - }, - "workbox-broadcast-update": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-6.5.4.tgz", - "integrity": "sha512-I/lBERoH1u3zyBosnpPEtcAVe5lwykx9Yg1k6f8/BGEPGaMMgZrwVrqL1uA9QZ1NGGFoyE6t9i7lBjOlDhFEEw==", - "dev": true, - "requires": { - "workbox-core": "6.5.4" - } - }, - "workbox-build": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-6.5.4.tgz", - "integrity": "sha512-kgRevLXEYvUW9WS4XoziYqZ8Q9j/2ziJYEtTrjdz5/L/cTUa2XfyMP2i7c3p34lgqJ03+mTiz13SdFef2POwbA==", - "dev": true, - "requires": { - "@apideck/better-ajv-errors": "^0.3.1", - "@babel/core": "^7.11.1", - "@babel/preset-env": "^7.11.0", - "@babel/runtime": "^7.11.2", - "@rollup/plugin-babel": "^5.2.0", - "@rollup/plugin-node-resolve": "^11.2.1", - "@rollup/plugin-replace": "^2.4.1", - "@surma/rollup-plugin-off-main-thread": "^2.2.3", - "ajv": "^8.6.0", - "common-tags": "^1.8.0", - "fast-json-stable-stringify": "^2.1.0", - "fs-extra": "^9.0.1", - "glob": "^7.1.6", - "lodash": "^4.17.20", - "pretty-bytes": "^5.3.0", - "rollup": "^2.43.1", - "rollup-plugin-terser": "^7.0.0", - "source-map": "^0.8.0-beta.0", - "stringify-object": "^3.3.0", - "strip-comments": "^2.0.1", - "tempy": "^0.6.0", - "upath": "^1.2.0", - "workbox-background-sync": "6.5.4", - "workbox-broadcast-update": "6.5.4", - "workbox-cacheable-response": "6.5.4", - "workbox-core": "6.5.4", - "workbox-expiration": "6.5.4", - "workbox-google-analytics": "6.5.4", - "workbox-navigation-preload": "6.5.4", - "workbox-precaching": "6.5.4", - "workbox-range-requests": "6.5.4", - "workbox-recipes": "6.5.4", - "workbox-routing": "6.5.4", - "workbox-strategies": "6.5.4", - "workbox-streams": "6.5.4", - "workbox-sw": "6.5.4", - "workbox-window": "6.5.4" - }, - "dependencies": { - "@apideck/better-ajv-errors": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.6.tgz", - "integrity": "sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==", - "dev": true, - "requires": { - "json-schema": "^0.4.0", - "jsonpointer": "^5.0.0", - "leven": "^3.1.0" - } - }, - "ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "source-map": { - "version": "0.8.0-beta.0", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", - "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", - "dev": true, - "requires": { - "whatwg-url": "^7.0.0" - } - }, - "tr46": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", - "dev": true - }, - "whatwg-url": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", - "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", - "dev": true, - "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } - } - } - }, - "workbox-cacheable-response": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-6.5.4.tgz", - "integrity": "sha512-DCR9uD0Fqj8oB2TSWQEm1hbFs/85hXXoayVwFKLVuIuxwJaihBsLsp4y7J9bvZbqtPJ1KlCkmYVGQKrBU4KAug==", - "dev": true, - "requires": { - "workbox-core": "6.5.4" - } - }, - "workbox-core": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-6.5.4.tgz", - "integrity": "sha512-OXYb+m9wZm8GrORlV2vBbE5EC1FKu71GGp0H4rjmxmF4/HLbMCoTFws87M3dFwgpmg0v00K++PImpNQ6J5NQ6Q==", - "dev": true - }, - "workbox-expiration": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-6.5.4.tgz", - "integrity": "sha512-jUP5qPOpH1nXtjGGh1fRBa1wJL2QlIb5mGpct3NzepjGG2uFFBn4iiEBiI9GUmfAFR2ApuRhDydjcRmYXddiEQ==", - "dev": true, - "requires": { - "idb": "^7.0.1", - "workbox-core": "6.5.4" - } - }, - "workbox-google-analytics": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-6.5.4.tgz", - "integrity": "sha512-8AU1WuaXsD49249Wq0B2zn4a/vvFfHkpcFfqAFHNHwln3jK9QUYmzdkKXGIZl9wyKNP+RRX30vcgcyWMcZ9VAg==", - "dev": true, - "requires": { - "workbox-background-sync": "6.5.4", - "workbox-core": "6.5.4", - "workbox-routing": "6.5.4", - "workbox-strategies": "6.5.4" - } - }, - "workbox-navigation-preload": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-6.5.4.tgz", - "integrity": "sha512-IIwf80eO3cr8h6XSQJF+Hxj26rg2RPFVUmJLUlM0+A2GzB4HFbQyKkrgD5y2d84g2IbJzP4B4j5dPBRzamHrng==", - "dev": true, - "requires": { - "workbox-core": "6.5.4" - } - }, - "workbox-precaching": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-6.5.4.tgz", - "integrity": "sha512-hSMezMsW6btKnxHB4bFy2Qfwey/8SYdGWvVIKFaUm8vJ4E53JAY+U2JwLTRD8wbLWoP6OVUdFlXsTdKu9yoLTg==", - "dev": true, - "requires": { - "workbox-core": "6.5.4", - "workbox-routing": "6.5.4", - "workbox-strategies": "6.5.4" - } - }, - "workbox-range-requests": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-6.5.4.tgz", - "integrity": "sha512-Je2qR1NXCFC8xVJ/Lux6saH6IrQGhMpDrPXWZWWS8n/RD+WZfKa6dSZwU+/QksfEadJEr/NfY+aP/CXFFK5JFg==", - "dev": true, - "requires": { - "workbox-core": "6.5.4" - } - }, - "workbox-recipes": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-recipes/-/workbox-recipes-6.5.4.tgz", - "integrity": "sha512-QZNO8Ez708NNwzLNEXTG4QYSKQ1ochzEtRLGaq+mr2PyoEIC1xFW7MrWxrONUxBFOByksds9Z4//lKAX8tHyUA==", - "dev": true, - "requires": { - "workbox-cacheable-response": "6.5.4", - "workbox-core": "6.5.4", - "workbox-expiration": "6.5.4", - "workbox-precaching": "6.5.4", - "workbox-routing": "6.5.4", - "workbox-strategies": "6.5.4" - } - }, - "workbox-routing": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-6.5.4.tgz", - "integrity": "sha512-apQswLsbrrOsBUWtr9Lf80F+P1sHnQdYodRo32SjiByYi36IDyL2r7BH1lJtFX8fwNHDa1QOVY74WKLLS6o5Pg==", - "dev": true, - "requires": { - "workbox-core": "6.5.4" - } - }, - "workbox-strategies": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-6.5.4.tgz", - "integrity": "sha512-DEtsxhx0LIYWkJBTQolRxG4EI0setTJkqR4m7r4YpBdxtWJH1Mbg01Cj8ZjNOO8etqfA3IZaOPHUxCs8cBsKLw==", - "dev": true, - "requires": { - "workbox-core": "6.5.4" - } - }, - "workbox-streams": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-6.5.4.tgz", - "integrity": "sha512-FXKVh87d2RFXkliAIheBojBELIPnWbQdyDvsH3t74Cwhg0fDheL1T8BqSM86hZvC0ZESLsznSYWw+Va+KVbUzg==", - "dev": true, - "requires": { - "workbox-core": "6.5.4", - "workbox-routing": "6.5.4" - } - }, - "workbox-sw": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-6.5.4.tgz", - "integrity": "sha512-vo2RQo7DILVRoH5LjGqw3nphavEjK4Qk+FenXeUsknKn14eCNedHOXWbmnvP4ipKhlE35pvJ4yl4YYf6YsJArA==", - "dev": true - }, - "workbox-webpack-plugin": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-webpack-plugin/-/workbox-webpack-plugin-6.5.4.tgz", - "integrity": "sha512-LmWm/zoaahe0EGmMTrSLUi+BjyR3cdGEfU3fS6PN1zKFYbqAKuQ+Oy/27e4VSXsyIwAw8+QDfk1XHNGtZu9nQg==", - "dev": true, - "requires": { - "fast-json-stable-stringify": "^2.1.0", - "pretty-bytes": "^5.4.1", - "upath": "^1.2.0", - "webpack-sources": "^1.4.3", - "workbox-build": "6.5.4" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", - "dev": true, - "requires": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - } - } - } - }, - "workbox-window": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-6.5.4.tgz", - "integrity": "sha512-HnLZJDwYBE+hpG25AQBO8RUWBJRaCsI9ksQJEp3aCOFCaG5kqaToAYXFRAHxzRluM2cQbGzdQF5rjKPWPA1fug==", - "dev": true, - "requires": { - "@types/trusted-types": "^2.0.2", - "workbox-core": "6.5.4" - } - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } + "immer": { + "optional": true }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } + "react": { + "optional": true }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "use-sync-external-store": { + "optional": true } } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "dev": true, - "requires": {} - }, - "xhr": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz", - "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==", - "requires": { - "global": "~4.4.0", - "is-function": "^1.0.1", - "parse-headers": "^2.0.0", - "xtend": "^4.0.0" - } - }, - "xhr-request": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/xhr-request/-/xhr-request-1.1.0.tgz", - "integrity": "sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA==", - "requires": { - "buffer-to-arraybuffer": "^0.0.5", - "object-assign": "^4.1.1", - "query-string": "^5.0.1", - "simple-get": "^2.7.0", - "timed-out": "^4.0.1", - "url-set-query": "^1.0.0", - "xhr": "^2.0.4" - } - }, - "xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", - "dev": true - }, - "xml-parse-from-string": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz", - "integrity": "sha512-ErcKwJTF54uRzzNMXq2X5sMIy88zJvfN2DmdoQvy7PAFJ+tPRU6ydWuOKNMyfmOjdyBQTFREi60s0Y0SyI0G0g==" - }, - "xml2js": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", - "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", - "requires": { - "sax": ">=0.6.0", - "xmlbuilder": "~11.0.0" - } - }, - "xmlbuilder": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==" - }, - "xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", - "dev": true - }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" - }, - "yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" - }, - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - } - }, - "yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true - }, - "yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" } } } diff --git a/ui/package.json b/ui/package.json index 50c53303..e9a6136f 100644 --- a/ui/package.json +++ b/ui/package.json @@ -1,55 +1,42 @@ { - "name": "ui", - "version": "0.1.0", + "name": "ui100", "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "lint": "eslint .", + "preview": "vite preview" + }, "dependencies": { - "@emotion/react": "^11.10.4", - "@emotion/styled": "^11.10.4", - "@mdi/js": "^7.0.96", - "@mdi/react": "^1.6.1", - "@mui/material": "^5.15.18", - "bootstrap": "^5.2.3", - "dagre": "^0.8.5", - "eslint-config-react-app": "^7.0.1", - "humanize-duration": "^3.27.3", - "moment": "^2.29.4", + "@emotion/react": "^11.13.5", + "@emotion/styled": "^11.13.5", + "@mui/icons-material": "^6.1.8", + "@mui/material": "^6.1.8", + "@mui/x-charts": "^7.24.1", + "@xyflow/react": "^12.3.5", + "d3-hierarchy": "^3.1.2", + "date-fns": "^4.1.0", + "formik": "^2.4.6", + "material-react-table": "^3.1.0", "react": "^18.3.1", - "react-bootstrap": "^2.10.2", - "react-data-table-component": "^7.5.2", "react-dom": "^18.3.1", - "react-force-graph": "^1.43.0", - "react-router-dom": "^6.23.1", - "react-sizeme": "^3.0.2", - "recharts": "^2.12.7", - "styled-components": "^5.3.5", - "svgo": "^3.0.2" + "react-router": "^7.0.1", + "yup": "^1.6.1", + "zustand": "^5.0.2" }, "devDependencies": { - "react-scripts": "^5.0.1" - }, - "scripts": { - "start": "react-scripts start", - "build": "react-scripts build", - "test": "react-scripts test", - "eject": "react-scripts eject" - }, - "eslintConfig": { - "extends": [ - "react-app", - "react-app/jest" - ] - }, - "browserslist": { - "production": [ - ">0.2%", - "not dead", - "not op_mini all" - ], - "development": [ - "last 1 chrome version", - "last 1 firefox version", - "last 1 safari version" - ] - }, - "proxy": "http://127.0.0.1:18080" + "@eslint/js": "^9.13.0", + "@types/d3-hierarchy": "^3.1.7", + "@types/react": "^18.3.12", + "@types/react-dom": "^18.3.1", + "@vitejs/plugin-react": "^4.3.3", + "eslint": "^9.13.0", + "eslint-plugin-react-hooks": "^5.0.0", + "eslint-plugin-react-refresh": "^0.4.14", + "globals": "^15.11.0", + "typescript-eslint": "^8.11.0", + "vite": "^5.4.10" + } } diff --git a/ui/public/bootstrap.min.css b/ui/public/bootstrap.min.css deleted file mode 100755 index ff717fef..00000000 --- a/ui/public/bootstrap.min.css +++ /dev/null @@ -1 +0,0 @@ -:root{--blue:#3b2693;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#3b2693;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1400px;--font-family-sans-serif:"Russo One",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-family-monospace:"JetBrains Mono",SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:"Russo One",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus:not(:focus-visible){outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;text-decoration:underline dotted;cursor:help;border-bottom:0;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#3b2693;text-decoration:none;background-color:transparent}a:hover{color:#231656;text-decoration:underline}a:not([href]){color:inherit;text-decoration:none}a:not([href]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:"JetBrains Mono",SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-weight:500;line-height:1.2}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer::before{content:"\2014\00A0"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code{font-size:87.5%;color:#e83e8c;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1400px){.container{max-width:1440px}}.container-fluid,.container-lg,.container-md,.container-sm,.container-xl{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container,.container-sm{max-width:540px}}@media (min-width:768px){.container,.container-md,.container-sm{max-width:720px}}@media (min-width:992px){.container,.container-lg,.container-md,.container-sm{max-width:960px}}@media (min-width:1400px){.container,.container-lg,.container-md,.container-sm,.container-xl{max-width:1440px}}.row{display:flex;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{position:relative;width:100%;padding-right:15px;padding-left:15px}.col{flex-basis:0;flex-grow:1;min-width:0;max-width:100%}.row-cols-1>*{flex:0 0 100%;max-width:100%}.row-cols-2>*{flex:0 0 50%;max-width:50%}.row-cols-3>*{flex:0 0 33.33333%;max-width:33.33333%}.row-cols-4>*{flex:0 0 25%;max-width:25%}.row-cols-5>*{flex:0 0 20%;max-width:20%}.row-cols-6>*{flex:0 0 16.66667%;max-width:16.66667%}.col-auto{flex:0 0 auto;width:auto;max-width:100%}.col-1{flex:0 0 8.33333%;max-width:8.33333%}.col-2{flex:0 0 16.66667%;max-width:16.66667%}.col-3{flex:0 0 25%;max-width:25%}.col-4{flex:0 0 33.33333%;max-width:33.33333%}.col-5{flex:0 0 41.66667%;max-width:41.66667%}.col-6{flex:0 0 50%;max-width:50%}.col-7{flex:0 0 58.33333%;max-width:58.33333%}.col-8{flex:0 0 66.66667%;max-width:66.66667%}.col-9{flex:0 0 75%;max-width:75%}.col-10{flex:0 0 83.33333%;max-width:83.33333%}.col-11{flex:0 0 91.66667%;max-width:91.66667%}.col-12{flex:0 0 100%;max-width:100%}.order-first{order:-1}.order-last{order:13}.order-0{order:0}.order-1{order:1}.order-2{order:2}.order-3{order:3}.order-4{order:4}.order-5{order:5}.order-6{order:6}.order-7{order:7}.order-8{order:8}.order-9{order:9}.order-10{order:10}.order-11{order:11}.order-12{order:12}.offset-1{margin-left:8.33333%}.offset-2{margin-left:16.66667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333%}.offset-5{margin-left:41.66667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333%}.offset-8{margin-left:66.66667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333%}.offset-11{margin-left:91.66667%}@media (min-width:576px){.col-sm{flex-basis:0;flex-grow:1;min-width:0;max-width:100%}.row-cols-sm-1>*{flex:0 0 100%;max-width:100%}.row-cols-sm-2>*{flex:0 0 50%;max-width:50%}.row-cols-sm-3>*{flex:0 0 33.33333%;max-width:33.33333%}.row-cols-sm-4>*{flex:0 0 25%;max-width:25%}.row-cols-sm-5>*{flex:0 0 20%;max-width:20%}.row-cols-sm-6>*{flex:0 0 16.66667%;max-width:16.66667%}.col-sm-auto{flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{flex:0 0 8.33333%;max-width:8.33333%}.col-sm-2{flex:0 0 16.66667%;max-width:16.66667%}.col-sm-3{flex:0 0 25%;max-width:25%}.col-sm-4{flex:0 0 33.33333%;max-width:33.33333%}.col-sm-5{flex:0 0 41.66667%;max-width:41.66667%}.col-sm-6{flex:0 0 50%;max-width:50%}.col-sm-7{flex:0 0 58.33333%;max-width:58.33333%}.col-sm-8{flex:0 0 66.66667%;max-width:66.66667%}.col-sm-9{flex:0 0 75%;max-width:75%}.col-sm-10{flex:0 0 83.33333%;max-width:83.33333%}.col-sm-11{flex:0 0 91.66667%;max-width:91.66667%}.col-sm-12{flex:0 0 100%;max-width:100%}.order-sm-first{order:-1}.order-sm-last{order:13}.order-sm-0{order:0}.order-sm-1{order:1}.order-sm-2{order:2}.order-sm-3{order:3}.order-sm-4{order:4}.order-sm-5{order:5}.order-sm-6{order:6}.order-sm-7{order:7}.order-sm-8{order:8}.order-sm-9{order:9}.order-sm-10{order:10}.order-sm-11{order:11}.order-sm-12{order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333%}.offset-sm-2{margin-left:16.66667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333%}.offset-sm-5{margin-left:41.66667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333%}.offset-sm-8{margin-left:66.66667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333%}.offset-sm-11{margin-left:91.66667%}}@media (min-width:768px){.col-md{flex-basis:0;flex-grow:1;min-width:0;max-width:100%}.row-cols-md-1>*{flex:0 0 100%;max-width:100%}.row-cols-md-2>*{flex:0 0 50%;max-width:50%}.row-cols-md-3>*{flex:0 0 33.33333%;max-width:33.33333%}.row-cols-md-4>*{flex:0 0 25%;max-width:25%}.row-cols-md-5>*{flex:0 0 20%;max-width:20%}.row-cols-md-6>*{flex:0 0 16.66667%;max-width:16.66667%}.col-md-auto{flex:0 0 auto;width:auto;max-width:100%}.col-md-1{flex:0 0 8.33333%;max-width:8.33333%}.col-md-2{flex:0 0 16.66667%;max-width:16.66667%}.col-md-3{flex:0 0 25%;max-width:25%}.col-md-4{flex:0 0 33.33333%;max-width:33.33333%}.col-md-5{flex:0 0 41.66667%;max-width:41.66667%}.col-md-6{flex:0 0 50%;max-width:50%}.col-md-7{flex:0 0 58.33333%;max-width:58.33333%}.col-md-8{flex:0 0 66.66667%;max-width:66.66667%}.col-md-9{flex:0 0 75%;max-width:75%}.col-md-10{flex:0 0 83.33333%;max-width:83.33333%}.col-md-11{flex:0 0 91.66667%;max-width:91.66667%}.col-md-12{flex:0 0 100%;max-width:100%}.order-md-first{order:-1}.order-md-last{order:13}.order-md-0{order:0}.order-md-1{order:1}.order-md-2{order:2}.order-md-3{order:3}.order-md-4{order:4}.order-md-5{order:5}.order-md-6{order:6}.order-md-7{order:7}.order-md-8{order:8}.order-md-9{order:9}.order-md-10{order:10}.order-md-11{order:11}.order-md-12{order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333%}.offset-md-2{margin-left:16.66667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333%}.offset-md-5{margin-left:41.66667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333%}.offset-md-8{margin-left:66.66667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333%}.offset-md-11{margin-left:91.66667%}}@media (min-width:992px){.col-lg{flex-basis:0;flex-grow:1;min-width:0;max-width:100%}.row-cols-lg-1>*{flex:0 0 100%;max-width:100%}.row-cols-lg-2>*{flex:0 0 50%;max-width:50%}.row-cols-lg-3>*{flex:0 0 33.33333%;max-width:33.33333%}.row-cols-lg-4>*{flex:0 0 25%;max-width:25%}.row-cols-lg-5>*{flex:0 0 20%;max-width:20%}.row-cols-lg-6>*{flex:0 0 16.66667%;max-width:16.66667%}.col-lg-auto{flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{flex:0 0 8.33333%;max-width:8.33333%}.col-lg-2{flex:0 0 16.66667%;max-width:16.66667%}.col-lg-3{flex:0 0 25%;max-width:25%}.col-lg-4{flex:0 0 33.33333%;max-width:33.33333%}.col-lg-5{flex:0 0 41.66667%;max-width:41.66667%}.col-lg-6{flex:0 0 50%;max-width:50%}.col-lg-7{flex:0 0 58.33333%;max-width:58.33333%}.col-lg-8{flex:0 0 66.66667%;max-width:66.66667%}.col-lg-9{flex:0 0 75%;max-width:75%}.col-lg-10{flex:0 0 83.33333%;max-width:83.33333%}.col-lg-11{flex:0 0 91.66667%;max-width:91.66667%}.col-lg-12{flex:0 0 100%;max-width:100%}.order-lg-first{order:-1}.order-lg-last{order:13}.order-lg-0{order:0}.order-lg-1{order:1}.order-lg-2{order:2}.order-lg-3{order:3}.order-lg-4{order:4}.order-lg-5{order:5}.order-lg-6{order:6}.order-lg-7{order:7}.order-lg-8{order:8}.order-lg-9{order:9}.order-lg-10{order:10}.order-lg-11{order:11}.order-lg-12{order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333%}.offset-lg-2{margin-left:16.66667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333%}.offset-lg-5{margin-left:41.66667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333%}.offset-lg-8{margin-left:66.66667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333%}.offset-lg-11{margin-left:91.66667%}}@media (min-width:1400px){.col-xl{flex-basis:0;flex-grow:1;min-width:0;max-width:100%}.row-cols-xl-1>*{flex:0 0 100%;max-width:100%}.row-cols-xl-2>*{flex:0 0 50%;max-width:50%}.row-cols-xl-3>*{flex:0 0 33.33333%;max-width:33.33333%}.row-cols-xl-4>*{flex:0 0 25%;max-width:25%}.row-cols-xl-5>*{flex:0 0 20%;max-width:20%}.row-cols-xl-6>*{flex:0 0 16.66667%;max-width:16.66667%}.col-xl-auto{flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{flex:0 0 8.33333%;max-width:8.33333%}.col-xl-2{flex:0 0 16.66667%;max-width:16.66667%}.col-xl-3{flex:0 0 25%;max-width:25%}.col-xl-4{flex:0 0 33.33333%;max-width:33.33333%}.col-xl-5{flex:0 0 41.66667%;max-width:41.66667%}.col-xl-6{flex:0 0 50%;max-width:50%}.col-xl-7{flex:0 0 58.33333%;max-width:58.33333%}.col-xl-8{flex:0 0 66.66667%;max-width:66.66667%}.col-xl-9{flex:0 0 75%;max-width:75%}.col-xl-10{flex:0 0 83.33333%;max-width:83.33333%}.col-xl-11{flex:0 0 91.66667%;max-width:91.66667%}.col-xl-12{flex:0 0 100%;max-width:100%}.order-xl-first{order:-1}.order-xl-last{order:13}.order-xl-0{order:0}.order-xl-1{order:1}.order-xl-2{order:2}.order-xl-3{order:3}.order-xl-4{order:4}.order-xl-5{order:5}.order-xl-6{order:6}.order-xl-7{order:7}.order-xl-8{order:8}.order-xl-9{order:9}.order-xl-10{order:10}.order-xl-11{order:11}.order-xl-12{order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333%}.offset-xl-2{margin-left:16.66667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333%}.offset-xl-5{margin-left:41.66667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333%}.offset-xl-8{margin-left:66.66667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333%}.offset-xl-11{margin-left:91.66667%}}.table{width:100%;margin-bottom:1rem;color:#212529}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table-sm td,.table-sm th{padding:.3rem}.table-bordered{border:1px solid #dee2e6}.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{color:#212529;background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#c8c2e1}.table-primary tbody+tbody,.table-primary td,.table-primary th,.table-primary thead th{border-color:#998ec7}.table-hover .table-primary:hover{background-color:#b9b1d9}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#b9b1d9}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-secondary tbody+tbody,.table-secondary td,.table-secondary th,.table-secondary thead th{border-color:#b3b7bb}.table-hover .table-secondary:hover{background-color:#c8cbcf}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-success tbody+tbody,.table-success td,.table-success th,.table-success thead th{border-color:#8fd19e}.table-hover .table-success:hover{background-color:#b1dfbb}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-info tbody+tbody,.table-info td,.table-info th,.table-info thead th{border-color:#86cfda}.table-hover .table-info:hover{background-color:#abdde5}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-warning tbody+tbody,.table-warning td,.table-warning th,.table-warning thead th{border-color:#ffdf7e}.table-hover .table-warning:hover{background-color:#ffe8a1}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-danger tbody+tbody,.table-danger td,.table-danger th,.table-danger thead th{border-color:#ed969e}.table-hover .table-danger:hover{background-color:#f1b0b7}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-light tbody+tbody,.table-light td,.table-light th,.table-light thead th{border-color:#fbfcfc}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#95999c}.table-hover .table-dark:hover{background-color:#b9bbbe}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#343a40;border-color:#454d55}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#343a40}.table-dark td,.table-dark th,.table-dark thead th{border-color:#454d55}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,.05)}.table-dark.table-hover tbody tr:hover{color:#fff;background-color:rgba(255,255,255,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1399.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}.form-control:focus{color:#495057;background-color:#fff;border-color:#7862d6;outline:0;box-shadow:0 0 0 .2rem rgba(59,38,147,.25)}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}input[type=date].form-control,input[type=datetime-local].form-control,input[type=month].form-control,input[type=time].form-control{appearance:none}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;font-size:1rem;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.form-control-lg{height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}select.form-control[multiple],select.form-control[size]{height:auto}textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:flex;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:inline-flex;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(40,167,69,.9);border-radius:.25rem}.is-valid~.valid-feedback,.is-valid~.valid-tooltip,.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip{display:block}.form-control.is-valid,.was-validated .form-control:valid{border-color:#28a745;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-valid,.was-validated .custom-select:valid{border-color:#28a745;padding-right:calc(.75em + 2.3125rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-valid:focus,.was-validated .custom-select:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label::before,.was-validated .custom-control-input:valid~.custom-control-label::before{border-color:#28a745}.custom-control-input.is-valid:checked~.custom-control-label::before,.was-validated .custom-control-input:valid:checked~.custom-control-label::before{border-color:#34ce57;background-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label::before,.was-validated .custom-control-input:valid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-control-input.is-valid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:valid:focus:not(:checked)~.custom-control-label::before{border-color:#28a745}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(220,53,69,.9);border-radius:.25rem}.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip,.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip{display:block}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:#dc3545;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-invalid,.was-validated .custom-select:invalid{border-color:#dc3545;padding-right:calc(.75em + 2.3125rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-invalid:focus,.was-validated .custom-select:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-label::before,.was-validated .custom-control-input:invalid~.custom-control-label::before{border-color:#dc3545}.custom-control-input.is-invalid:checked~.custom-control-label::before,.was-validated .custom-control-input:invalid:checked~.custom-control-label::before{border-color:#e4606d;background-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus:not(:checked)~.custom-control-label::before{border-color:#dc3545}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{display:flex;flex-flow:row wrap;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{display:flex;align-items:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:flex;flex:0 0 auto;flex-flow:row wrap;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{display:flex;align-items:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;flex-shrink:0;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{align-items:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;color:#212529;text-align:center;vertical-align:middle;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:#212529;text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(59,38,147,.25)}.btn.disabled,.btn:disabled{opacity:.65}.btn:not(:disabled):not(.disabled){cursor:pointer}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#3b2693;border-color:#3b2693}.btn-primary:hover{color:#fff;background-color:#2f1e75;border-color:#2b1c6a}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#2f1e75;border-color:#2b1c6a;box-shadow:0 0 0 .2rem rgba(88,71,163,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#3b2693;border-color:#3b2693}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#2b1c6a;border-color:#271960}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(88,71,163,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{color:#fff;background-color:#5a6268;border-color:#545b62;box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#218838;border-color:#1e7e34;box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#138496;border-color:#117a8b;box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{color:#212529;background-color:#e0a800;border-color:#d39e00;box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c82333;border-color:#bd2130;box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{color:#212529;background-color:#e2e6ea;border-color:#dae0e5;box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{color:#fff;background-color:#23272b;border-color:#1d2124;box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-outline-primary{color:#3b2693;border-color:#3b2693}.btn-outline-primary:hover{color:#fff;background-color:#3b2693;border-color:#3b2693}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(59,38,147,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#3b2693;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#3b2693;border-color:#3b2693}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(59,38,147,.5)}.btn-outline-secondary{color:#6c757d;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-success{color:#28a745;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#dc3545;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-link{font-weight:400;color:#3b2693;text-decoration:none}.btn-link:hover{color:#231656;text-decoration:underline}.btn-link.focus,.btn-link:focus{text-decoration:underline}.btn-link.disabled,.btn-link:disabled{color:#6c757d;pointer-events:none}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu-left{right:auto;left:0}.dropdown-menu-right{right:0;left:auto}@media (min-width:576px){.dropdown-menu-sm-left{right:auto;left:0}.dropdown-menu-sm-right{right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-left{right:auto;left:0}.dropdown-menu-md-right{right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-left{right:auto;left:0}.dropdown-menu-lg-right{right:0;left:auto}}@media (min-width:1400px){.dropdown-menu-xl-left{right:auto;left:0}.dropdown-menu-xl-right{right:0;left:auto}}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#3b2693}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#212529}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;flex:1 1 auto}.btn-group-vertical>.btn:hover,.btn-group>.btn:hover{z-index:1}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-left:-1px}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropright .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-left:0}.dropleft .dropdown-toggle-split::before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control,.input-group>.form-control-plaintext{position:relative;flex:1 1 auto;width:1%;min-width:0;margin-bottom:0}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control,.input-group>.form-control-plaintext+.custom-file,.input-group>.form-control-plaintext+.custom-select,.input-group>.form-control-plaintext+.form-control{margin-left:-1px}.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:flex;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label::after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn:focus,.input-group-prepend .btn:focus{z-index:3}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:flex;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group-lg>.custom-select,.input-group-lg>.form-control:not(textarea){height:calc(1.5em + 1rem + 2px)}.input-group-lg>.custom-select,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-sm>.custom-select,.input-group-sm>.form-control:not(textarea){height:calc(1.5em + .5rem + 2px)}.input-group-sm>.custom-select,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group-lg>.custom-select,.input-group-sm>.custom-select{padding-right:1.75rem}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.5rem;padding-left:1.5rem}.custom-control-inline{display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;left:0;z-index:-1;width:1rem;height:1.25rem;opacity:0}.custom-control-input:checked~.custom-control-label::before{color:#fff;border-color:#3b2693;background-color:#3b2693}.custom-control-input:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(59,38,147,.25)}.custom-control-input:focus:not(:checked)~.custom-control-label::before{border-color:#7862d6}.custom-control-input:not(:disabled):active~.custom-control-label::before{color:#fff;background-color:#9b8be1;border-color:#9b8be1}.custom-control-input:disabled~.custom-control-label,.custom-control-input[disabled]~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label::before,.custom-control-input[disabled]~.custom-control-label::before{background-color:#e9ecef}.custom-control-label{position:relative;margin-bottom:0;vertical-align:top}.custom-control-label::before{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;pointer-events:none;content:"";background-color:#fff;border:#adb5bd solid 1px}.custom-control-label::after{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:"";background:no-repeat 50%/50% 50%}.custom-checkbox .custom-control-label::before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{border-color:#3b2693;background-color:#3b2693}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(59,38,147,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before{background-color:rgba(59,38,147,.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(59,38,147,.5)}.custom-switch{padding-left:2.25rem}.custom-switch .custom-control-label::before{left:-2.25rem;width:1.75rem;pointer-events:all;border-radius:.5rem}.custom-switch .custom-control-label::after{top:calc(.25rem + 2px);left:calc(-2.25rem + 2px);width:calc(1rem - 4px);height:calc(1rem - 4px);background-color:#adb5bd;border-radius:.5rem;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-switch .custom-control-label::after{transition:none}}.custom-switch .custom-control-input:checked~.custom-control-label::after{background-color:#fff;transform:translateX(.75rem)}.custom-switch .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(59,38,147,.5)}.custom-select{display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem 1.75rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;vertical-align:middle;background:#fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px;border:1px solid #ced4da;border-radius:.25rem;appearance:none}.custom-select:focus{border-color:#7862d6;outline:0;box-shadow:0 0 0 .2rem rgba(59,38,147,.25)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{display:none}.custom-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}.custom-select-sm{height:calc(1.5em + .5rem + 2px);padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem}.custom-select-lg{height:calc(1.5em + 1rem + 2px);padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem}.custom-file{position:relative;display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(1.5em + .75rem + 2px);margin:0;opacity:0}.custom-file-input:focus~.custom-file-label{border-color:#7862d6;box-shadow:0 0 0 .2rem rgba(59,38,147,.25)}.custom-file-input:disabled~.custom-file-label,.custom-file-input[disabled]~.custom-file-label{background-color:#e9ecef}.custom-file-input:lang(en)~.custom-file-label::after{content:"Browse"}.custom-file-input~.custom-file-label[data-browse]::after{content:attr(data-browse)}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:calc(1.5em + .75rem);padding:.375rem .75rem;line-height:1.5;color:#495057;content:"Browse";background-color:#e9ecef;border-left:inherit;border-radius:0 .25rem .25rem 0}.custom-range{width:100%;height:1.4rem;padding:0;background-color:transparent;appearance:none}.custom-range:focus{outline:0}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(59,38,147,.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(59,38,147,.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(59,38,147,.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#3b2693;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-webkit-slider-thumb{transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#9b8be1}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#3b2693;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-moz-range-thumb{transition:none}}.custom-range::-moz-range-thumb:active{background-color:#9b8be1}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#3b2693;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-ms-thumb{transition:none}}.custom-range::-ms-thumb:active{background-color:#9b8be1}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.custom-range::-ms-fill-lower{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px;background-color:#dee2e6;border-radius:1rem}.custom-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.custom-range:disabled::-webkit-slider-runnable-track{cursor:default}.custom-range:disabled::-moz-range-thumb{background-color:#adb5bd}.custom-range:disabled::-moz-range-track{cursor:default}.custom-range:disabled::-ms-thumb{background-color:#adb5bd}.custom-control-label::before,.custom-file-label,.custom-select{transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-control-label::before,.custom-file-label,.custom-select{transition:none}}.nav{display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#3b2693}.nav-fill .nav-item{flex:1 1 auto;text-align:center}.nav-justified .nav-item{flex-basis:0;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;padding:.5rem 1rem}.navbar .container,.navbar .container-fluid,.navbar .container-lg,.navbar .container-md,.navbar .container-sm,.navbar .container-xl{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat center center;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-xl{flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-md,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-xl{flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-xl{flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1399.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{padding-right:0;padding-left:0}}@media (min-width:1400px){.navbar-expand-xl{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-xl{flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-lg,.navbar-expand>.container-md,.navbar-expand>.container-sm,.navbar-expand>.container-xl{flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.5%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,.9)}.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.5);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.5%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-dark .navbar-text{color:rgba(255,255,255,.5)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-body{flex:1 1 auto;min-height:1px;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img,.card-img-bottom,.card-img-top{flex-shrink:0;width:100%}.card-img,.card-img-top{border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img,.card-img-bottom{border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{display:flex;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{flex:1 0 0%;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{display:flex;flex-flow:row wrap}.card-group>.card{flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{column-count:3;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion>.card{overflow:hidden}.accordion>.card:not(:last-of-type){border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion>.card:not(:first-of-type){border-top-left-radius:0;border-top-right-radius:0}.accordion>.card>.card-header{border-radius:0;margin-bottom:-1px}.breadcrumb{display:flex;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item{display:flex}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:.5rem;color:#6c757d;content:"/"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#3b2693;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{z-index:2;color:#231656;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:3;outline:0;box-shadow:0 0 0 .2rem rgba(59,38,147,.25)}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:3;color:#fff;background-color:#3b2693;border-color:#3b2693}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.badge{transition:none}}a.badge:focus,a.badge:hover{text-decoration:none}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#3b2693}a.badge-primary:focus,a.badge-primary:hover{color:#fff;background-color:#2b1c6a}a.badge-primary.focus,a.badge-primary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(59,38,147,.5)}.badge-secondary{color:#fff;background-color:#6c757d}a.badge-secondary:focus,a.badge-secondary:hover{color:#fff;background-color:#545b62}a.badge-secondary.focus,a.badge-secondary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.badge-success{color:#fff;background-color:#28a745}a.badge-success:focus,a.badge-success:hover{color:#fff;background-color:#1e7e34}a.badge-success.focus,a.badge-success:focus{outline:0;box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.badge-info{color:#fff;background-color:#17a2b8}a.badge-info:focus,a.badge-info:hover{color:#fff;background-color:#117a8b}a.badge-info.focus,a.badge-info:focus{outline:0;box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.badge-warning{color:#212529;background-color:#ffc107}a.badge-warning:focus,a.badge-warning:hover{color:#212529;background-color:#d39e00}a.badge-warning.focus,a.badge-warning:focus{outline:0;box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.badge-danger{color:#fff;background-color:#dc3545}a.badge-danger:focus,a.badge-danger:hover{color:#fff;background-color:#bd2130}a.badge-danger.focus,a.badge-danger:focus{outline:0;box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.badge-light{color:#212529;background-color:#f8f9fa}a.badge-light:focus,a.badge-light:hover{color:#212529;background-color:#dae0e5}a.badge-light.focus,a.badge-light:focus{outline:0;box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.badge-dark{color:#fff;background-color:#343a40}a.badge-dark:focus,a.badge-dark:hover{color:#fff;background-color:#1d2124}a.badge-dark.focus,a.badge-dark:focus{outline:0;box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#1f144c;background-color:#d8d4e9;border-color:#c8c2e1}.alert-primary hr{border-top-color:#b9b1d9}.alert-primary .alert-link{color:#0f0924}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:flex;height:1rem;overflow:hidden;line-height:0;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:flex;flex-direction:column;justify-content:center;overflow:hidden;color:#fff;text-align:center;white-space:nowrap;background-color:#3b2693;transition:width .6s ease}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{animation:progress-bar-stripes 1s linear infinite}@media (prefers-reduced-motion:reduce){.progress-bar-animated{animation:none}}.media{display:flex;align-items:flex-start}.media-body{flex:1}.list-group{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;border-radius:.25rem}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#3b2693;border-color:#3b2693}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:-1px;border-top-width:1px}.list-group-horizontal{flex-direction:row}.list-group-horizontal>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}@media (min-width:576px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:768px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:992px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media (min-width:1400px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 1px}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{color:#1f144c;background-color:#c8c2e1}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#1f144c;background-color:#b9b1d9}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#1f144c;border-color:#1f144c}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:hover{color:#000;text-decoration:none}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover{opacity:.75}button.close{padding:0;background-color:transparent;border:0}a.close.disabled{pointer-events:none}.toast{max-width:350px;overflow:hidden;font-size:.875rem;background-color:rgba(255,255,255,.85);background-clip:padding-box;border:1px solid rgba(0,0,0,.1);box-shadow:0 .25rem .75rem rgba(0,0,0,.1);backdrop-filter:blur(10px);opacity:0;border-radius:.25rem}.toast:not(:last-child){margin-bottom:.75rem}.toast.showing{opacity:1}.toast.show{display:block;opacity:1}.toast.hide{display:none}.toast-header{display:flex;align-items:center;padding:.25rem .75rem;color:#6c757d;background-color:rgba(255,255,255,.85);background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,.05)}.toast-body{padding:.75rem}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:transform .3s ease-out;transform:translate(0,-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal.modal-static .modal-dialog{transform:scale(1.02)}.modal-dialog-scrollable{display:flex;max-height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.modal-dialog-scrollable .modal-footer,.modal-dialog-scrollable .modal-header{flex-shrink:0}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - 1rem)}.modal-dialog-centered::before{display:block;height:calc(100vh - 1rem);height:min-content;content:""}.modal-dialog-centered.modal-dialog-scrollable{flex-direction:column;justify-content:center;height:100%}.modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.modal-dialog-centered.modal-dialog-scrollable::before{content:none}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:flex;align-items:flex-start;justify-content:space-between;padding:1rem 1rem;border-bottom:1px solid #dee2e6;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.modal-header .close{padding:1rem 1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;flex:1 1 auto;padding:1rem}.modal-footer{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end;padding:.75rem;border-top:1px solid #dee2e6;border-bottom-right-radius:calc(.3rem - 1px);border-bottom-left-radius:calc(.3rem - 1px)}.modal-footer>*{margin:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{max-height:calc(100% - 3.5rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-dialog-centered::before{height:calc(100vh - 3.5rem);height:min-content}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:1400px){.modal-xl{max-width:1140px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:"Russo One",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow::before,.bs-tooltip-top .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow::before,.bs-tooltip-right .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow::before,.bs-tooltip-bottom .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow::before,.bs-tooltip-left .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:"Russo One",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::after,.popover .arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top]>.arrow,.bs-popover-top>.arrow{bottom:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=top]>.arrow::before,.bs-popover-top>.arrow::before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top]>.arrow::after,.bs-popover-top>.arrow::after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right]>.arrow,.bs-popover-right>.arrow{left:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right]>.arrow::before,.bs-popover-right>.arrow::before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right]>.arrow::after,.bs-popover-right>.arrow::after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom]>.arrow,.bs-popover-bottom>.arrow{top:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=bottom]>.arrow::before,.bs-popover-bottom>.arrow::before{top:0;border-width:0 .5rem .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom]>.arrow::after,.bs-popover-bottom>.arrow::after{top:1px;border-width:0 .5rem .5rem .5rem;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left]>.arrow,.bs-popover-left>.arrow{right:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left]>.arrow::before,.bs-popover-left>.arrow::before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left]>.arrow::after,.bs-popover-left>.arrow::after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;backface-visibility:hidden;transition:transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-right,.carousel-item-next:not(.carousel-item-left){transform:translateX(100%)}.active.carousel-item-left,.carousel-item-prev:not(.carousel-item-right){transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;transform:none}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:flex;align-items:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:no-repeat 50%/100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:15;display:flex;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{box-sizing:content-box;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators li{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}@keyframes spinner-border{to{transform:rotate(360deg)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;border:.25em solid currentColor;border-right-color:transparent;border-radius:50%;animation:spinner-border .75s linear infinite}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;background-color:currentColor;border-radius:50%;opacity:0;animation:spinner-grow .75s linear infinite}.spinner-grow-sm{width:1rem;height:1rem}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#3b2693!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#2b1c6a!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#3b2693!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded-sm{border-radius:.2rem!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-right{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-lg{border-radius:.3rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-0{border-radius:0!important}.clearfix::after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:flex!important}.d-inline-flex{display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}}@media (min-width:1400px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.85714%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{flex-direction:row!important}.flex-column{flex-direction:column!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-column-reverse{flex-direction:column-reverse!important}.flex-wrap{flex-wrap:wrap!important}.flex-nowrap{flex-wrap:nowrap!important}.flex-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-fill{flex:1 1 auto!important}.flex-grow-0{flex-grow:0!important}.flex-grow-1{flex-grow:1!important}.flex-shrink-0{flex-shrink:0!important}.flex-shrink-1{flex-shrink:1!important}.justify-content-start{justify-content:flex-start!important}.justify-content-end{justify-content:flex-end!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.justify-content-around{justify-content:space-around!important}.align-items-start{align-items:flex-start!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.align-items-baseline{align-items:baseline!important}.align-items-stretch{align-items:stretch!important}.align-content-start{align-content:flex-start!important}.align-content-end{align-content:flex-end!important}.align-content-center{align-content:center!important}.align-content-between{align-content:space-between!important}.align-content-around{align-content:space-around!important}.align-content-stretch{align-content:stretch!important}.align-self-auto{align-self:auto!important}.align-self-start{align-self:flex-start!important}.align-self-end{align-self:flex-end!important}.align-self-center{align-self:center!important}.align-self-baseline{align-self:baseline!important}.align-self-stretch{align-self:stretch!important}@media (min-width:576px){.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-sm-fill{flex:1 1 auto!important}.flex-sm-grow-0{flex-grow:0!important}.flex-sm-grow-1{flex-grow:1!important}.flex-sm-shrink-0{flex-shrink:0!important}.flex-sm-shrink-1{flex-shrink:1!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}}@media (min-width:768px){.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-md-fill{flex:1 1 auto!important}.flex-md-grow-0{flex-grow:0!important}.flex-md-grow-1{flex-grow:1!important}.flex-md-shrink-0{flex-shrink:0!important}.flex-md-shrink-1{flex-shrink:1!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-lg-fill{flex:1 1 auto!important}.flex-lg-grow-0{flex-grow:0!important}.flex-lg-grow-1{flex-grow:1!important}.flex-lg-shrink-0{flex-shrink:0!important}.flex-lg-shrink-1{flex-shrink:1!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}}@media (min-width:1400px){.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.flex-xl-fill{flex:1 1 auto!important}.flex-xl-grow-0{flex-grow:0!important}.flex-xl-grow-1{flex-grow:1!important}.flex-xl-shrink-0{flex-shrink:0!important}.flex-xl-shrink-1{flex-shrink:1!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1400px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.user-select-all{user-select:all!important}.user-select-auto{user-select:auto!important}.user-select-none{user-select:none!important}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:sticky!important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports (position:sticky){.sticky-top{position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.min-vw-100{min-width:100vw!important}.min-vh-100{min-height:100vh!important}.vw-100{width:100vw!important}.vh-100{height:100vh!important}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-n1{margin:-.25rem!important}.mt-n1,.my-n1{margin-top:-.25rem!important}.mr-n1,.mx-n1{margin-right:-.25rem!important}.mb-n1,.my-n1{margin-bottom:-.25rem!important}.ml-n1,.mx-n1{margin-left:-.25rem!important}.m-n2{margin:-.5rem!important}.mt-n2,.my-n2{margin-top:-.5rem!important}.mr-n2,.mx-n2{margin-right:-.5rem!important}.mb-n2,.my-n2{margin-bottom:-.5rem!important}.ml-n2,.mx-n2{margin-left:-.5rem!important}.m-n3{margin:-1rem!important}.mt-n3,.my-n3{margin-top:-1rem!important}.mr-n3,.mx-n3{margin-right:-1rem!important}.mb-n3,.my-n3{margin-bottom:-1rem!important}.ml-n3,.mx-n3{margin-left:-1rem!important}.m-n4{margin:-1.5rem!important}.mt-n4,.my-n4{margin-top:-1.5rem!important}.mr-n4,.mx-n4{margin-right:-1.5rem!important}.mb-n4,.my-n4{margin-bottom:-1.5rem!important}.ml-n4,.mx-n4{margin-left:-1.5rem!important}.m-n5{margin:-3rem!important}.mt-n5,.my-n5{margin-top:-3rem!important}.mr-n5,.mx-n5{margin-right:-3rem!important}.mb-n5,.my-n5{margin-bottom:-3rem!important}.ml-n5,.mx-n5{margin-left:-3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-n1{margin:-.25rem!important}.mt-sm-n1,.my-sm-n1{margin-top:-.25rem!important}.mr-sm-n1,.mx-sm-n1{margin-right:-.25rem!important}.mb-sm-n1,.my-sm-n1{margin-bottom:-.25rem!important}.ml-sm-n1,.mx-sm-n1{margin-left:-.25rem!important}.m-sm-n2{margin:-.5rem!important}.mt-sm-n2,.my-sm-n2{margin-top:-.5rem!important}.mr-sm-n2,.mx-sm-n2{margin-right:-.5rem!important}.mb-sm-n2,.my-sm-n2{margin-bottom:-.5rem!important}.ml-sm-n2,.mx-sm-n2{margin-left:-.5rem!important}.m-sm-n3{margin:-1rem!important}.mt-sm-n3,.my-sm-n3{margin-top:-1rem!important}.mr-sm-n3,.mx-sm-n3{margin-right:-1rem!important}.mb-sm-n3,.my-sm-n3{margin-bottom:-1rem!important}.ml-sm-n3,.mx-sm-n3{margin-left:-1rem!important}.m-sm-n4{margin:-1.5rem!important}.mt-sm-n4,.my-sm-n4{margin-top:-1.5rem!important}.mr-sm-n4,.mx-sm-n4{margin-right:-1.5rem!important}.mb-sm-n4,.my-sm-n4{margin-bottom:-1.5rem!important}.ml-sm-n4,.mx-sm-n4{margin-left:-1.5rem!important}.m-sm-n5{margin:-3rem!important}.mt-sm-n5,.my-sm-n5{margin-top:-3rem!important}.mr-sm-n5,.mx-sm-n5{margin-right:-3rem!important}.mb-sm-n5,.my-sm-n5{margin-bottom:-3rem!important}.ml-sm-n5,.mx-sm-n5{margin-left:-3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-n1{margin:-.25rem!important}.mt-md-n1,.my-md-n1{margin-top:-.25rem!important}.mr-md-n1,.mx-md-n1{margin-right:-.25rem!important}.mb-md-n1,.my-md-n1{margin-bottom:-.25rem!important}.ml-md-n1,.mx-md-n1{margin-left:-.25rem!important}.m-md-n2{margin:-.5rem!important}.mt-md-n2,.my-md-n2{margin-top:-.5rem!important}.mr-md-n2,.mx-md-n2{margin-right:-.5rem!important}.mb-md-n2,.my-md-n2{margin-bottom:-.5rem!important}.ml-md-n2,.mx-md-n2{margin-left:-.5rem!important}.m-md-n3{margin:-1rem!important}.mt-md-n3,.my-md-n3{margin-top:-1rem!important}.mr-md-n3,.mx-md-n3{margin-right:-1rem!important}.mb-md-n3,.my-md-n3{margin-bottom:-1rem!important}.ml-md-n3,.mx-md-n3{margin-left:-1rem!important}.m-md-n4{margin:-1.5rem!important}.mt-md-n4,.my-md-n4{margin-top:-1.5rem!important}.mr-md-n4,.mx-md-n4{margin-right:-1.5rem!important}.mb-md-n4,.my-md-n4{margin-bottom:-1.5rem!important}.ml-md-n4,.mx-md-n4{margin-left:-1.5rem!important}.m-md-n5{margin:-3rem!important}.mt-md-n5,.my-md-n5{margin-top:-3rem!important}.mr-md-n5,.mx-md-n5{margin-right:-3rem!important}.mb-md-n5,.my-md-n5{margin-bottom:-3rem!important}.ml-md-n5,.mx-md-n5{margin-left:-3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-n1{margin:-.25rem!important}.mt-lg-n1,.my-lg-n1{margin-top:-.25rem!important}.mr-lg-n1,.mx-lg-n1{margin-right:-.25rem!important}.mb-lg-n1,.my-lg-n1{margin-bottom:-.25rem!important}.ml-lg-n1,.mx-lg-n1{margin-left:-.25rem!important}.m-lg-n2{margin:-.5rem!important}.mt-lg-n2,.my-lg-n2{margin-top:-.5rem!important}.mr-lg-n2,.mx-lg-n2{margin-right:-.5rem!important}.mb-lg-n2,.my-lg-n2{margin-bottom:-.5rem!important}.ml-lg-n2,.mx-lg-n2{margin-left:-.5rem!important}.m-lg-n3{margin:-1rem!important}.mt-lg-n3,.my-lg-n3{margin-top:-1rem!important}.mr-lg-n3,.mx-lg-n3{margin-right:-1rem!important}.mb-lg-n3,.my-lg-n3{margin-bottom:-1rem!important}.ml-lg-n3,.mx-lg-n3{margin-left:-1rem!important}.m-lg-n4{margin:-1.5rem!important}.mt-lg-n4,.my-lg-n4{margin-top:-1.5rem!important}.mr-lg-n4,.mx-lg-n4{margin-right:-1.5rem!important}.mb-lg-n4,.my-lg-n4{margin-bottom:-1.5rem!important}.ml-lg-n4,.mx-lg-n4{margin-left:-1.5rem!important}.m-lg-n5{margin:-3rem!important}.mt-lg-n5,.my-lg-n5{margin-top:-3rem!important}.mr-lg-n5,.mx-lg-n5{margin-right:-3rem!important}.mb-lg-n5,.my-lg-n5{margin-bottom:-3rem!important}.ml-lg-n5,.mx-lg-n5{margin-left:-3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1400px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-n1{margin:-.25rem!important}.mt-xl-n1,.my-xl-n1{margin-top:-.25rem!important}.mr-xl-n1,.mx-xl-n1{margin-right:-.25rem!important}.mb-xl-n1,.my-xl-n1{margin-bottom:-.25rem!important}.ml-xl-n1,.mx-xl-n1{margin-left:-.25rem!important}.m-xl-n2{margin:-.5rem!important}.mt-xl-n2,.my-xl-n2{margin-top:-.5rem!important}.mr-xl-n2,.mx-xl-n2{margin-right:-.5rem!important}.mb-xl-n2,.my-xl-n2{margin-bottom:-.5rem!important}.ml-xl-n2,.mx-xl-n2{margin-left:-.5rem!important}.m-xl-n3{margin:-1rem!important}.mt-xl-n3,.my-xl-n3{margin-top:-1rem!important}.mr-xl-n3,.mx-xl-n3{margin-right:-1rem!important}.mb-xl-n3,.my-xl-n3{margin-bottom:-1rem!important}.ml-xl-n3,.mx-xl-n3{margin-left:-1rem!important}.m-xl-n4{margin:-1.5rem!important}.mt-xl-n4,.my-xl-n4{margin-top:-1.5rem!important}.mr-xl-n4,.mx-xl-n4{margin-right:-1.5rem!important}.mb-xl-n4,.my-xl-n4{margin-bottom:-1.5rem!important}.ml-xl-n4,.mx-xl-n4{margin-left:-1.5rem!important}.m-xl-n5{margin:-3rem!important}.mt-xl-n5,.my-xl-n5{margin-top:-3rem!important}.mr-xl-n5,.mx-xl-n5{margin-right:-3rem!important}.mb-xl-n5,.my-xl-n5{margin-bottom:-3rem!important}.ml-xl-n5,.mx-xl-n5{margin-left:-3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:"";background-color:rgba(0,0,0,0)}.text-monospace{font-family:"JetBrains Mono",SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace!important}.text-justify{text-align:justify!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1400px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-lighter{font-weight:lighter!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-weight-bolder{font-weight:bolder!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#3b2693!important}a.text-primary:focus,a.text-primary:hover{color:#231656!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#494f54!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#19692c!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#0f6674!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#ba8b00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#a71d2a!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#cbd3da!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#121416!important}.text-body{color:#212529!important}.text-muted{color:#6c757d!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:rgba(255,255,255,.5)!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.text-decoration-none{text-decoration:none!important}.text-break{word-wrap:break-word!important}.text-reset{color:inherit!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,::after,::before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:992px!important}.container{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #dee2e6!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#dee2e6}.table .thead-dark th{color:inherit;border-color:#dee2e6}} \ No newline at end of file diff --git a/ui/public/index.html b/ui/public/index.html deleted file mode 100644 index 0beaa9f6..00000000 --- a/ui/public/index.html +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - - - - - - - - - - - zrok - - - -
- - - diff --git a/ui/public/manifest.json b/ui/public/manifest.json deleted file mode 100644 index 975f6e4c..00000000 --- a/ui/public/manifest.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "short_name": "zrok ui", - "name": "zrok ui", - "start_url": ".", - "display": "standalone", - "theme_color": "#000000", - "background_color": "#ffffff" -} diff --git a/ui/public/robots.txt b/ui/public/robots.txt deleted file mode 100644 index e9e57dc4..00000000 --- a/ui/public/robots.txt +++ /dev/null @@ -1,3 +0,0 @@ -# https://www.robotstxt.org/robotstxt.html -User-agent: * -Disallow: diff --git a/ui/public/ziggy.svg b/ui/public/ziggy.svg deleted file mode 100755 index 73647067..00000000 --- a/ui/public/ziggy.svg +++ /dev/null @@ -1,259 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/ui/src/AccessEdge.tsx b/ui/src/AccessEdge.tsx new file mode 100644 index 00000000..2c542fe2 --- /dev/null +++ b/ui/src/AccessEdge.tsx @@ -0,0 +1,14 @@ +import {BaseEdge, EdgeProps} from "@xyflow/react"; + +const AccessEdge = (props: EdgeProps) => { + const { sourceX, sourceY, targetX, targetY, id, markerEnd } = props; + const edgePath = `M ${sourceX} ${sourceY} ` + + `L ${sourceX} ${sourceY + 20} ` + + `L ${sourceX + (targetX - sourceX) / 2} ${sourceY + 50 + ((sourceX - targetX) * .05) + (targetY - sourceY) / 2} ` + + `L ${targetX} ${targetY + 20} ` + + `L ${targetX} ${targetY}`; + + return ; +} + +export default AccessEdge; \ No newline at end of file diff --git a/ui/src/AccessNode.tsx b/ui/src/AccessNode.tsx new file mode 100644 index 00000000..593330da --- /dev/null +++ b/ui/src/AccessNode.tsx @@ -0,0 +1,26 @@ +import {Handle, Position, useUpdateNodeInternals} from "@xyflow/react"; +import {Grid2} from "@mui/material"; +import AccessIcon from "@mui/icons-material/Lan"; + +const AccessNode = ({ data }) => { + const updateNodeInternals = useUpdateNodeInternals(); + + let shareHandle = <>; + if(data.ownedShare) { + shareHandle = ; + updateNodeInternals(data.id); + } + + return ( + <> + + {shareHandle} + + + {data.bindAddress ? data.bindAddress : data.label} + + + ); +} + +export default AccessNode; \ No newline at end of file diff --git a/ui/src/AccessPanel.tsx b/ui/src/AccessPanel.tsx new file mode 100644 index 00000000..7a611344 --- /dev/null +++ b/ui/src/AccessPanel.tsx @@ -0,0 +1,114 @@ +import {Node} from "@xyflow/react"; +import {Button, Grid2, Tooltip, Typography} from "@mui/material"; +import AccessIcon from "@mui/icons-material/Lan"; +import useApiConsoleStore from "./model/store.ts"; +import React, {useEffect, useState} from "react"; +import {Frontend} from "./api"; +import DeleteIcon from "@mui/icons-material/Delete"; +import PropertyTable from "./PropertyTable.tsx"; +import ReleaseAccessModal from "./ReleaseAccessModal.tsx"; +import {getMetadataApi} from "./model/api.ts"; +import ClipboardText from "./ClipboardText.tsx"; +import BandwidthLimitedWarning from "./BandwidthLimitedWarning.tsx"; + +interface AccessPanelProps { + access: Node; +} + +const AccessPanel = ({ access }: AccessPanelProps) => { + const user = useApiConsoleStore((state) => state.user); + const limited = useApiConsoleStore((state) => state.limited); + const [detail, setDetail] = useState(null); + const [releaseAccessOpen, setReleaseAccessOpen] = useState(false); + const openReleaseAccess = () => { + setReleaseAccessOpen(true); + } + const closeReleaseAccess = () => { + setReleaseAccessOpen(false); + } + + useEffect(() => { + getMetadataApi(user).getFrontendDetail({frontendId: access.data.feId as number}) + .then(d => { + delete d.id; + delete d.zId; + delete d.description; + setDetail(d); + }) + .catch(e => { + console.log("AccessPanel", e); + }) + }, [access]); + + const customProperties = { + bindAddress: row => <> + + + {row.value} + + + + + + , + frontendToken: row => <> + + + {row.value} + + + + + + , + shareToken: row => <> + + + {row.value} + + + + + + , + createdAt: row => new Date(row.value).toLocaleString(), + updatedAt: row => new Date(row.value).toLocaleString(), + } + + const labels = { + createdAt: "Created", + updatedAt: "Updated", + } + + return ( + <> + + + + + + { access.data.bindAddress ? access.data.bindAddress : String(access.data.label)} + + +
A private access frontend {detail && detail.bindAddress ? at {detail.bindAddress} : with frontend token {detail?.frontendToken}}
+
+ { limited ? : null } + + + + + + + + + + +
+
+
+ + + ); +} + +export default AccessPanel; diff --git a/ui/src/AccountMetricsModal.tsx b/ui/src/AccountMetricsModal.tsx new file mode 100644 index 00000000..b0224cc4 --- /dev/null +++ b/ui/src/AccountMetricsModal.tsx @@ -0,0 +1,65 @@ +import {Box, Grid2, Modal, Typography} from "@mui/material"; +import {User} from "./model/user.ts"; +import {modalStyle} from "./styling/theme.ts"; +import {useEffect, useState} from "react"; +import {buildMetrics} from "./model/util.ts"; +import {getMetadataApi} from "./model/api.ts"; +import MetricsGraph from "./MetricsGraph.tsx"; + +interface AccountMetricsModalProps { + close: () => void; + isOpen: boolean; + user: User; +} + +const AccountMetricsModal = ({ close, isOpen, user }: AccountMetricsModalProps) => { + const [metrics30, setMetrics30] = useState(buildMetrics([])); + const [metrics7, setMetrics7] = useState(buildMetrics([])); + const [metrics1, setMetrics1] = useState(buildMetrics([])); + + useEffect(() => { + let metadataApi = getMetadataApi(user); + metadataApi.getAccountMetrics() + .then(d => { + setMetrics30(buildMetrics(d)); + }) + .catch(e => { + e.response.json().then(ex => { + console.log("accountMetricsModal", ex.message); + }); + }); + metadataApi.getAccountMetrics({duration: "168h"}) + .then(d => { + setMetrics7(buildMetrics(d)); + }) + .catch(e => { + e.response.json().then(ex => { + console.log("accountMetricsModal", ex.message); + }); + }); + metadataApi.getAccountMetrics({duration: "24h"}) + .then(d => { + setMetrics1(buildMetrics(d)); + }) + .catch(e => { + e.response.json().then(ex => { + console.log("accountMetricsModal", ex.message); + }); + }); + }, [isOpen]); + + return ( + + + + Account Metrics + + + + + + + ); +} + +export default AccountMetricsModal; \ No newline at end of file diff --git a/ui/src/AccountNode.tsx b/ui/src/AccountNode.tsx new file mode 100644 index 00000000..cbd67cc9 --- /dev/null +++ b/ui/src/AccountNode.tsx @@ -0,0 +1,48 @@ +import {Handle, Position} from "@xyflow/react"; +import {Grid2} from "@mui/material"; +import AccountIcon from "@mui/icons-material/Person4"; +import useApiConsoleStore from "./model/store.ts"; +import {SparkLineChart} from "@mui/x-charts"; +import {useEffect, useState} from "react"; + + +const AccountNode = ({ data }) => { + const environments = useApiConsoleStore((state) => state.environments); + const [sparkData, setSparkData] = useState(Array(31).fill(0)); + const hiddenSparkline = <>; + const visibleSparkline = ( + + + + ); + + useEffect(() => { + let s = new Array(31); + if(environments) { + environments.forEach(env => { + if(env.activity) { + env.activity.forEach((sample, i) => { + let v = s[i] ? s[i] : 0; + v += sample.rx! ? sample.rx! : 0; + v += sample.tx! ? sample.tx! : 0; + s[i] = v; + }); + } + }); + } + setSparkData(s); + }, [environments]); + + return ( + <> + + + + {data.label} + + {sparkData.find(x => x > 0) ? visibleSparkline : hiddenSparkline} + + ); +} + +export default AccountNode; \ No newline at end of file diff --git a/ui/src/AccountPanel.tsx b/ui/src/AccountPanel.tsx new file mode 100644 index 00000000..75cc8257 --- /dev/null +++ b/ui/src/AccountPanel.tsx @@ -0,0 +1,89 @@ +import {Node} from "@xyflow/react"; +import {Button, Grid2, Tooltip, Typography} from "@mui/material"; +import AccountIcon from "@mui/icons-material/Person4"; +import PropertyTable from "./PropertyTable.tsx"; +import SecretToggle from "./SecretToggle.tsx"; +import useApiConsoleStore from "./model/store.ts"; +import PasswordIcon from "@mui/icons-material/Password"; +import TokenIcon from "@mui/icons-material/Key"; +import React, {useState} from "react"; +import AccountPasswordChangeModal from "./AccountPasswordChangeModal.tsx"; +import RegenerateAccountTokenModal from "./RegenerateAccountTokenModal.tsx"; +import ClipboardText from "./ClipboardText.tsx"; +import AccountMetricsModal from "./AccountMetricsModal.tsx"; +import MetricsIcon from "@mui/icons-material/QueryStats"; +import BandwidthLimitedWarning from "./BandwidthLimitedWarning.tsx"; + +interface AccountPanelProps { + account: Node; +} + +const AccountPanel = ({ account }: AccountPanelProps) => { + const user = useApiConsoleStore((state) => state.user); + const limited = useApiConsoleStore((state) => state.limited); + const [accountMetricsOpen, setAccountMetricsOpen] = useState(false); + const openAccountMetrics = () => { + setAccountMetricsOpen(true); + } + const closeAccountMetrics = () => { + setAccountMetricsOpen(false); + } + const [changePasswordOpen, setChangePasswordOpen] = useState(false); + const openChangePassword = () => { + setChangePasswordOpen(true); + } + const closeChangePassword = () => { + setChangePasswordOpen(false); + } + const [regenerateOpen, setRegenerateOpen] = useState(false); + const openRegenerate = () => { + setRegenerateOpen(true); + } + const closeRegenerate = () => { + setRegenerateOpen(false); + } + + const customProperties = { + token: row => + } + + const label = { + token: "Account Token" + } + + return ( + <> + + + + {String(account.data.label)} + + +
Your zrok account, {user.email}
+
+ { limited ? : null } + + + + + + + + + + + + + + + + +
+ + + + + ); +} + +export default AccountPanel; diff --git a/ui/src/AccountPasswordChangeModal.tsx b/ui/src/AccountPasswordChangeModal.tsx new file mode 100644 index 00000000..b4c7d4da --- /dev/null +++ b/ui/src/AccountPasswordChangeModal.tsx @@ -0,0 +1,134 @@ +import {User} from "./model/user.ts"; +import {useEffect, useState} from "react"; +import {modalStyle} from "./styling/theme.ts"; +import {Box, Button, Grid2, Modal, TextField, Typography} from "@mui/material"; +import {useFormik} from "formik"; +import * as Yup from 'yup'; +import {getAccountApi} from "./model/api.ts"; + +interface AccountPasswordChangeModalProps { + close: () => void; + isOpen: boolean; + user: User; +} + +const AccountPasswordChangeModal =({ close, isOpen, user }: AccountPasswordChangeModalProps) => { + const [errorMessage, setErrorMessage] = useState(null); + const submitButton = ; + const [bottomControl, setBottomControl] = useState(submitButton); + + const passwordChangeForm = useFormik({ + initialValues: { + currentPassword: "", + newPassword: "", + duplicateNewPassword: "", + }, + onSubmit: v => { + setErrorMessage(null); + getAccountApi(user).changePassword({ + body: { + email: user.email, + oldPassword: v.currentPassword, + newPassword: v.newPassword, + } + }) + .then(() => { + setBottomControl(Your password has been changed!); + setTimeout(() => { close() }, 3000); + }) + .catch(e => { + setErrorMessage(Password change failed! Check your current password!); + }) + }, + validationSchema: Yup.object({ + currentPassword: Yup.string() + .required("Current password is required"), + newPassword: Yup.string() + .min(8, "Password must be at least 8 characters") + .max(64, "Password must be less than 64 characters") + .matches( + /^.*[!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?].*$/, + "Password requires at least one special character" + ) + .matches( + /^.*[a-z].*$/, + "Password requires at least one lowercase letter" + ) + .matches( + /^.*[A-Z].*$/, + "Password requires at least one uppercase letter" + ) + .required("Password is required"), + duplicateNewPassword: Yup.string() + .required("Please confirm your new password") + .test("password-matches", "Password confirmation does not match", v => v === passwordChangeForm.values.newPassword) + }), + }); + + useEffect(() => { + passwordChangeForm.values.currentPassword = ""; + passwordChangeForm.values.newPassword = ""; + passwordChangeForm.values.duplicateNewPassword = ""; + setErrorMessage(null); + setBottomControl(submitButton); + }, [isOpen]); + + return ( + + + + Change Password + +
+ + + + + + { errorMessage ? {errorMessage} : null} + + {bottomControl} + +
+
+
+ ); +} + +export default AccountPasswordChangeModal; \ No newline at end of file diff --git a/ui/src/ApiConsole.tsx b/ui/src/ApiConsole.tsx new file mode 100644 index 00000000..2517d22d --- /dev/null +++ b/ui/src/ApiConsole.tsx @@ -0,0 +1,194 @@ +import {JSX, useCallback, useEffect, useRef, useState} from "react"; +import {Graph, layout, mergeGraph, nodesEqual} from "./model/graph.ts"; +import {Grid2} from "@mui/material"; +import NavBar from "./NavBar.tsx"; +import Visualizer from "./Visualizer.tsx"; +import AccountPanel from "./AccountPanel.tsx"; +import EnvironmentPanel from "./EnvironmentPanel.tsx"; +import SharePanel from "./SharePanel.tsx"; +import AccessPanel from "./AccessPanel.tsx"; +import useApiConsoleStore from "./model/store.ts"; +import TabularView from "./TabularView.tsx"; +import {Node} from "@xyflow/react"; +import {getMetadataApi} from "./model/api.ts"; +import {User} from "./model/user.ts"; + +interface ApiConsoleProps { + logout: () => void; +} + +const ApiConsole = ({ logout }: ApiConsoleProps) => { + const user = useApiConsoleStore((state) => state.user); + const userRef = useRef(user); + const updateLimited = useApiConsoleStore((state) => state.updateLimited); + const graph = useApiConsoleStore((state) => state.graph); + const updateGraph = useApiConsoleStore((state) => state.updateGraph); + const oldGraph = useRef(graph); + const sparkdata = useApiConsoleStore((state) => state.sparkdata); + const sparkdataRef = useRef>(); + sparkdataRef.current = sparkdata; + const updateSparkdata = useApiConsoleStore((state) => state.updateSparkdata); + const nodes = useApiConsoleStore((state) => state.nodes); + const nodesRef = useRef(); + nodesRef.current = nodes; + const updateNodes = useApiConsoleStore((state) => state.updateNodes); + const updateEdges = useApiConsoleStore((state) => state.updateEdges); + const selectedNode = useApiConsoleStore((state) => state.selectedNode); + const [mainPanel, setMainPanel] = useState(); + const [sidePanel, setSidePanel] = useState(null); + const [visualizerEnabled, setVisualizerEnabled] = useState(true); + + let visualizer = true; + const handleKeyPress = useCallback((event) => { + if(event.ctrlKey === true && event.key === '`') { + setVisualizerEnabled(!visualizer); + visualizer = !visualizer; + if(visualizer) { + setMainPanel(); + } else { + setMainPanel(); + } + } + }, []); + + const retrieveOverview = () => { + getMetadataApi(userRef.current).overview() + .then(d => { + updateLimited(d.accountLimited!); + let newVov = mergeGraph(oldGraph.current, user, d.accountLimited!, d); + if(!nodesEqual(oldGraph.current.nodes, newVov.nodes)) { + console.log("refreshed vov", oldGraph.current.nodes, newVov.nodes); + updateGraph(newVov); + oldGraph.current = newVov; + + let laidOut = layout(newVov.nodes, newVov.edges); + let selected = laidOut.nodes.map((n) => ({ + ...n, + selected: selectedNode ? selectedNode.id === n.id : false, + })); + updateNodes(selected); + updateEdges(laidOut.edges); + } + }) + .catch(e => { + console.log(e); + }); + } + + const retrieveSparklines = () => { + let environments: string[] = []; + let shares: string[] = []; + if(nodesRef.current) { + nodesRef.current.map(node => { + if(node.type === "environment") { + environments.push(node.id); + } + if(node.type === "share") { + shares.push(node.id); + } + }); + } + + getMetadataApi(user).getSparklines({body: {environments: environments, shares: shares}}) + .then(d => { + if(d.sparklines) { + let sparkdataIn = new Map(); + d.sparklines!.forEach(s => { + let activity = new Array(31); + if(s.samples) { + s.samples?.forEach((sample, i) => { + let v = 0; + v += sample.rx! ? sample.rx! : 0; + v += sample.tx! ? sample.tx! : 0; + activity[i] = v; + }); + sparkdataIn.set(s.id!, activity); + } + }); + updateSparkdata(sparkdataIn); + } else { + updateSparkdata(new Map()); + } + }) + .catch(e => { + console.log("getSparklines", e); + }); + } + + useEffect(() => { + visualizer = visualizerEnabled; + if(visualizer) { + setMainPanel(); + } else { + setMainPanel(); + } + }, [visualizerEnabled]); + + useEffect(() => { + document.addEventListener('keydown', handleKeyPress); + return () => { + document.removeEventListener('keydown', handleKeyPress); + }; + }, [handleKeyPress]); + + useEffect(() => { + retrieveOverview(); + let mounted = true; + let interval = setInterval(() => { + if(mounted) { + retrieveOverview(); + } + }, 1000); + return () => { + mounted = false; + clearInterval(interval); + } + }, []); + + useEffect(() => { + let interval = setInterval(() => { + retrieveSparklines(); + }, 5000); + return () => { + clearInterval(interval); + } + }, []); + + useEffect(() => { + if(selectedNode) { + switch(selectedNode.type) { + case "account": + setSidePanel(); + break; + + case "environment": + setSidePanel(); + break; + + case "share": + setSidePanel(); + break; + + case "access": + setSidePanel(); + break; + } + } else { + setSidePanel(null); + } + }, [selectedNode]); + + return ( +
+ + + + {mainPanel} + + {sidePanel ? {sidePanel} : null} + +
+ ); +} + +export default ApiConsole; \ No newline at end of file diff --git a/ui/src/App.js b/ui/src/App.js deleted file mode 100644 index d1b32d1c..00000000 --- a/ui/src/App.js +++ /dev/null @@ -1,49 +0,0 @@ -import { BrowserRouter as Router, Route, Routes } from 'react-router-dom'; -import Register from "./register/Register"; -import Console from "./console/Console"; -import {useEffect, useState} from "react"; -import Login from "./console/login/Login"; -import ResetPassword from "./resetPassword/ResetPassword" - -const App = () => { - const [user, setUser] = useState(); - - useEffect(() => { - function checkUserData() { - const localUser = localStorage.getItem("user"); - if(localUser) { - console.log(localUser) - setUser(JSON.parse(localUser)); - console.log("reloaded user", localUser); - } - } - - checkUserData() - - document.addEventListener('storage', checkUserData) - - return () => { - document.removeEventListener('storage', checkUserData) - } - }, []); - - const logout = () => { - setUser(null); - localStorage.clear(); - } - - const consoleComponent = user ? : - - return ( - - - - } /> - }/> - }/> - - - ); -} - -export default App; \ No newline at end of file diff --git a/ui/src/App.tsx b/ui/src/App.tsx new file mode 100644 index 00000000..77be4bce --- /dev/null +++ b/ui/src/App.tsx @@ -0,0 +1,55 @@ +import {BrowserRouter, Route, Routes} from "react-router"; +import ApiConsole from "./ApiConsole.tsx"; +import Login from "./Login.tsx"; +import {useEffect} from "react"; +import {User} from "./model/user.ts"; +import useApiConsoleStore from "./model/store.ts"; +import ForgotPassword from "./ForgotPassword.tsx"; +import Register from "./Register.tsx"; +import ResetPassword from "./ResetPassword.tsx"; + +const App = () => { + const user = useApiConsoleStore((state) => state.user); + const updateUser = useApiConsoleStore((state) => state.updateUser); + + useEffect(() => { + const checkUser = () => { + const user = localStorage.getItem("user"); + if (user) { + updateUser(JSON.parse(user)); + } + } + checkUser(); + + document.addEventListener("userUpdated", checkUser); + + return () => { + document.removeEventListener("userUpdated", checkUser); + } + }, []); + + const login = (user: User) => { + updateUser(user); + localStorage.setItem("user", JSON.stringify(user)); + } + + const logout = () => { + updateUser(null as User); + localStorage.clear(); + } + + const consoleRoot = user ? : + + return ( + + + + } /> + } /> + } /> + + + ); +} + +export default App; \ No newline at end of file diff --git a/ui/src/BandwidthLimitedModal.tsx b/ui/src/BandwidthLimitedModal.tsx new file mode 100644 index 00000000..e5d4003d --- /dev/null +++ b/ui/src/BandwidthLimitedModal.tsx @@ -0,0 +1,56 @@ +import {modalStyle} from "./styling/theme.ts"; +import {Box, Grid2, Modal, Typography} from "@mui/material"; + +interface BandwidthLimitedModalProps { + close: () => void; + isOpen: boolean; +} + +const BandwidthLimitedModal = ({ close, isOpen }: BandwidthLimitedModalProps) => { + return ( + + + + Bandwidth Limit Exceeded! + + + + Your zrok account has exceeded the configured bandwidth limit! + + + + + Your zrok account is configured with a data transfer (bandwidth) limit that describes the amount + of data you can send and receive on the network within a specified period of time. As of now, + your account is currently over this configured limit. + + + + + When your account is in this limited state, your shares will temporarily be disabled, and users + of your shares will be unable to access them. When limited, you cannot create any additional + shares, accesses, or environments. + + + + + To remove the limit, you can either: +
    +
  • Allow enough time to pass, such that your per-period data transfer falls back below + the configured threshold
  • +
  • Upgrade your account to have a higher bandwidth limit
  • +
+
+
+ + + Once the limit expires or is otherwise removed, your shares and accesses will resume working + normally. + + +
+
+ ); +} + +export default BandwidthLimitedModal; \ No newline at end of file diff --git a/ui/src/BandwidthLimitedWarning.tsx b/ui/src/BandwidthLimitedWarning.tsx new file mode 100644 index 00000000..17b25bf7 --- /dev/null +++ b/ui/src/BandwidthLimitedWarning.tsx @@ -0,0 +1,12 @@ +import {Grid2} from "@mui/material"; +import React from "react"; + +const BandwidthLimitedWarning = () => { + return ( + +
Your account is currently over the assigned bandwidth limit!
+
+ ); +} + +export default BandwidthLimitedWarning; \ No newline at end of file diff --git a/ui/src/ClipboardText.tsx b/ui/src/ClipboardText.tsx new file mode 100644 index 00000000..f95d24f9 --- /dev/null +++ b/ui/src/ClipboardText.tsx @@ -0,0 +1,36 @@ +import ContentCopyIcon from '@mui/icons-material/ContentCopy'; +import CheckMarkIcon from "@mui/icons-material/Check"; +import {useEffect, useState} from "react"; +import {Button, Popover, Typography} from "@mui/material"; + +interface ClipboardTextProps { + text: string; +} + +const ClipboardText = ({ text }: ClipboardTextProps) => { + const [copied, setCopied] = useState(false); + const [control, setControl] = useState(); + + useEffect(() => { + if(copied) { + setControl(); + } else { + setControl(); + } + }, [copied]); + + const copy = async () => { + await navigator.clipboard.writeText(text); + setCopied(true); + setTimeout(() => setCopied(false), 2000); + } + + return ( + <> + + Copied! + + ); +} + +export default ClipboardText; diff --git a/ui/src/EnvironmentMetricsModal.tsx b/ui/src/EnvironmentMetricsModal.tsx new file mode 100644 index 00000000..7d2d0d00 --- /dev/null +++ b/ui/src/EnvironmentMetricsModal.tsx @@ -0,0 +1,67 @@ +import {User} from "./model/user.ts"; +import {useEffect, useState} from "react"; +import {buildMetrics} from "./model/util.ts"; +import {getMetadataApi} from "./model/api.ts"; +import {Node} from "@xyflow/react"; +import {Box, Grid2, Modal, Typography} from "@mui/material"; +import {modalStyle} from "./styling/theme.ts"; +import MetricsGraph from "./MetricsGraph.tsx"; + +interface EnvironmentMetricsModalProps { + close: () => void; + isOpen: boolean; + user: User; + environment: Node; +} + +const EnvironmentMetricsModal = ({ close, isOpen, user, environment }: EnvironmentMetricsModalProps) => { + const [metrics30, setMetrics30] = useState(buildMetrics([])); + const [metrics7, setMetrics7] = useState(buildMetrics([])); + const [metrics1, setMetrics1] = useState(buildMetrics([])); + + useEffect(() => { + let metadataApi = getMetadataApi(user); + metadataApi.getEnvironmentMetrics({envId: String(environment.data.envZId) }) + .then(d => { + setMetrics30(buildMetrics(d)); + }) + .catch(e => { + e.response.json().then(ex => { + console.log("environmentMetricsModal", ex.message); + }); + }); + metadataApi.getAccountMetrics({envId: String(environment.data.envZId), duration: "168h"}) + .then(d => { + setMetrics7(buildMetrics(d)); + }) + .catch(e => { + e.response.json().then(ex => { + console.log("environmentMetricsModal", ex.message); + }); + }); + metadataApi.getAccountMetrics({envId: String(environment.data.envZId), duration: "24h"}) + .then(d => { + setMetrics1(buildMetrics(d)); + }) + .catch(e => { + e.response.json().then(ex => { + console.log("environmentMetricsModal", ex.message); + }); + }); + }, [isOpen, environment]); + + return ( + + + + Environment Metrics + + + + + + + ); +} + +export default EnvironmentMetricsModal; \ No newline at end of file diff --git a/ui/src/EnvironmentNode.tsx b/ui/src/EnvironmentNode.tsx new file mode 100644 index 00000000..21da2a1f --- /dev/null +++ b/ui/src/EnvironmentNode.tsx @@ -0,0 +1,30 @@ +import {Handle, Position} from "@xyflow/react"; +import {Grid2} from "@mui/material"; +import EnvironmentIcon from "@mui/icons-material/Computer"; +import {SparkLineChart} from "@mui/x-charts"; +import useApiConsoleStore from "./model/store.ts"; + +const EnvironmentNode = ({ data }) => { + const sparkdata = useApiConsoleStore((state) => state.sparkdata); + + const hiddenSparkline = <>; + const visibleSparkline = ( + + + + ); + + return ( + <> + + + + + {data.label} + + {sparkdata.get(data.envZId)?.find(x => x > 0) ? visibleSparkline : hiddenSparkline} + + ); +} + +export default EnvironmentNode; \ No newline at end of file diff --git a/ui/src/EnvironmentPanel.tsx b/ui/src/EnvironmentPanel.tsx new file mode 100644 index 00000000..f3e6ae38 --- /dev/null +++ b/ui/src/EnvironmentPanel.tsx @@ -0,0 +1,94 @@ +import {Node} from "@xyflow/react"; +import {Button, Grid2, Tooltip, Typography} from "@mui/material"; +import EnvironmentIcon from "@mui/icons-material/Computer"; +import React, {useEffect, useState} from "react"; +import {Environment} from "./api"; +import PropertyTable from "./PropertyTable.tsx"; +import SecretToggle from "./SecretToggle.tsx"; +import useApiConsoleStore from "./model/store.ts"; +import DeleteIcon from "@mui/icons-material/Delete"; +import ReleaseEnvironmentModal from "./ReleaseEnvironmentModal.tsx"; +import {getMetadataApi} from "./model/api.ts"; +import MetricsIcon from "@mui/icons-material/QueryStats"; +import EnvironmentMetricsModal from "./EnvironmentMetricsModal.tsx"; +import BandwidthLimitedWarning from "./BandwidthLimitedWarning.tsx"; + +interface EnvironmentPanelProps { + environment: Node; +} + +const EnvironmentPanel = ({environment}: EnvironmentPanelProps) => { + const user = useApiConsoleStore((state) => state.user); + const [detail, setDetail] = useState(null); + const [environmentMetricsOpen, setEnvironmentMetricsOpen] = useState(false); + const openEnvironmentMetrics = () => { + setEnvironmentMetricsOpen(true); + } + const closeEnvironmentMetrics = () => { + setEnvironmentMetricsOpen(false); + } + const [releaseEnvironmentOpen, setReleaseEnvironmentOpen] = useState(false); + const openReleaseEnvironment = () => { + setReleaseEnvironmentOpen(true); + } + const closeReleaseEnvironment = () => { + setReleaseEnvironmentOpen(false); + } + + const customProperties = { + zId: row => , + createdAt: row => new Date(row.value).toLocaleString(), + updatedAt: row => new Date(row.value).toLocaleString() + } + + const labels = { + createdAt: "Created", + updatedAt: "Updated" + } + + useEffect(() => { + getMetadataApi(user).getEnvironmentDetail({envZId: environment.data!.envZId! as string}) + .then(d => { + let env = d.environment!; + delete env.activity; + delete env.limited; + delete env.zId; + setDetail(env); + }) + .catch(e => { + console.log("EnvironmentPanel", e); + }) + }, [environment]); + + return ( + <> + + + + {String(environment.data.label)} + + +
An environment on a host with address {detail ? detail.address : ''}
+
+ { environment.data.limited ? : null } + + + + + + + + + + + + + +
+ + + + ); +} + +export default EnvironmentPanel; \ No newline at end of file diff --git a/ui/src/ForgotPassword.tsx b/ui/src/ForgotPassword.tsx new file mode 100644 index 00000000..bd7a1bdf --- /dev/null +++ b/ui/src/ForgotPassword.tsx @@ -0,0 +1,100 @@ +import {Box, Button, Container, TextField, Typography} from "@mui/material"; +import zrokLogo from "./assets/zrok-1.0.0-rocket-purple.svg"; +import {Link} from "react-router"; +import {AccountApi} from "./api"; +import {useFormik} from "formik"; +import * as Yup from 'yup'; +import {useState} from "react"; + +interface ForgotPasswordFormProps { + doRequest: ({ email: string }) => void; +} + +const ForgotPasswordForm = ({ doRequest }: ForgotPasswordFormProps) => { + const form = useFormik({ + initialValues: { + email: "" + }, + onSubmit: v => { + console.log(v); + doRequest(v.email); + }, + validationSchema: Yup.object({ + email: Yup.string().email() + }) + }); + + return ( +
+

Forgot Your Password?

+ + + + Return to Login + + + ); +} + +const RequestSubmittedMessage = () => { + return ( + +

Request Submitted...

+ +

+ If your email address is found, you will be sent an email with a link to reset your password. +

+
+ +

+ Please check your "spam" folder for this email if you do not receive it after a few minutes! +

+
+ + Return to Login + +
+ ); +} + +const ForgotPassword = () => { + const requestResetPassword = (email) => { + console.log("requestResetPassword", email); + new AccountApi().resetPasswordRequest({body: {emailAddress: email}}) + .then(() => { + setControl(); + }) + .catch(e => { + console.log("resetPasswordRequest", e); + }) + } + + const [control, setControl] = useState(); + + return ( + + + + +

z r o k

+ {control} +
+
+
+ ); +} + +export default ForgotPassword; \ No newline at end of file diff --git a/ui/src/GettingStartedModal.tsx b/ui/src/GettingStartedModal.tsx new file mode 100644 index 00000000..d23211b4 --- /dev/null +++ b/ui/src/GettingStartedModal.tsx @@ -0,0 +1,99 @@ +import {modalStyle} from "./styling/theme.ts"; +import {Box, Grid2, Modal, Typography} from "@mui/material"; +import ClipboardText from "./ClipboardText.tsx"; +import useApiConsoleStore from "./model/store.ts"; +import {useEffect} from "react"; + +interface GettingStartedModalProps { + close: () => void; + isOpen: boolean; +} + +const GettingStartedModal = ({ close, isOpen }: GettingStartedModalProps) => { + const user = useApiConsoleStore(store => store.user); + const nodes = useApiConsoleStore(store => store.nodes); + + useEffect(() => { + if(nodes && nodes.length > 1) { + close(); + } + }, [nodes]); + + return ( + + + + Getting Started Quickly + + + +

Step 1: Download a zrok Binary

+
+
+ + + The official zrok binaries are published on GitHub: + + + + + https://github.com/openziti/zrok/releases + + + + +

Step 2: Enable Your Operating System Shell

+
+
+ + + Create a zrok "environment" by using the zrok enable command: + + + + +
+                        $ zrok enable {user.token} 
+                        
+
+
+ + +

Step 3: Share

+
+
+ + + Use the zrok share command to share network connectivity and files (see the + --help in the CLI for details: zrok share --help: + + + + +
+                        $ zrok share public --backend-mode web . 
+                        
+
+
+ + + Share the generated URL, allowing secure access to the current directory. + + + + +

Need More Help?

+
+
+ + + Visit the Getting Started Guide + and the zrok Documentation for more help. + + +
+
+ ) +} + +export default GettingStartedModal; \ No newline at end of file diff --git a/ui/src/Login.tsx b/ui/src/Login.tsx new file mode 100644 index 00000000..e76155dc --- /dev/null +++ b/ui/src/Login.tsx @@ -0,0 +1,99 @@ +import {Box, Button, Container, TextField, Typography} from "@mui/material"; +import {User} from "./model/user.ts"; +import {useEffect, useState} from "react"; +import {AccountApi, MetadataApi} from "./api"; +import {Link} from "react-router"; +import zroket from "./assets/zrok-1.0.0-rocket-purple.svg"; + +interface LoginProps { + onLogin: (user: User) => void; +} + +const Login = ({ onLogin }: LoginProps) => { + const [email, setEmail] = useState(""); + const [password, setPassword] = useState(""); + const [message, setMessage] = useState(""); + const [tou, setTou] = useState(null as string); + + useEffect(() => { + new MetadataApi()._configuration() + .then(d => { + if(d.touLink && d.touLink.trim() !== "") { + setTou(d.touLink); + } + }) + .catch(e => { + console.log(e); + }); + }, []); + + const login = async e => { + e.preventDefault(); + + new AccountApi().login({body: {"email": email, "password": password}}) + .then(d => { + onLogin({email: email, token: d.toString()}); + }) + .catch(e => { + console.log(e); + setMessage("login failed!") + }); + } + + return ( + + + + +

z r o k

+ + { + setMessage(""); + setEmail(v.target.value) + }} + /> + { + setMessage(""); + setPassword(v.target.value) + }} + /> + + + {message} + + + Forgot Password? + + +
+
+
+
+
+
+ ); +} + +export default Login; \ No newline at end of file diff --git a/ui/src/MetricsGraph.tsx b/ui/src/MetricsGraph.tsx new file mode 100644 index 00000000..0675120c --- /dev/null +++ b/ui/src/MetricsGraph.tsx @@ -0,0 +1,35 @@ +import {Grid2, Typography} from "@mui/material"; +import {LineChart} from "@mui/x-charts"; +import {useEffect, useState} from "react"; +import {bytesToSize} from "./model/util.ts"; +import {format} from "date-fns"; + +const MetricsGraph = ({ title, showTime, data }) => { + const [rxData, setRxData] = useState([]); + const [txData, setTxData] = useState([]); + const [timestamps, setTimestamps] = useState([]); + const dateFormat = showTime ? "dd-MMM H:mm" : "dd-MMM" + + useEffect(() => { + if(data) { + setRxData(data.map(v => v.rx ? v.rx : 0)); + setTxData(data.map(v => v.tx ? v.tx : 0 )); + setTimestamps(data.map(v => v.timestamp)); + } + }, [data]); + + return ( + + {title} + { return bytesToSize(v as number) } }, + { data: txData, label: "tx", color: "#9bf316", area: true, stack: "total", showMark: false, valueFormatter: (v) => { return bytesToSize(v as number) } } + ]} + xAxis={[{ scaleType: "time", data: timestamps, valueFormatter: (v) => { return format(new Date(v), dateFormat) } }]} + yAxis={[{ valueFormatter: (v) => { return bytesToSize(v) } }]} + /> + + ); +} + +export default MetricsGraph; \ No newline at end of file diff --git a/ui/src/NavBar.tsx b/ui/src/NavBar.tsx new file mode 100644 index 00000000..3f58ee13 --- /dev/null +++ b/ui/src/NavBar.tsx @@ -0,0 +1,109 @@ +import {AppBar, Box, Button, Grid2, Toolbar, Tooltip, Typography} from "@mui/material"; +import LogoutIcon from "@mui/icons-material/Logout"; +import VisualizerIcon from "@mui/icons-material/Hub"; +import TabularIcon from "@mui/icons-material/TableRows"; +import LimitIcon from "@mui/icons-material/CrisisAlert"; +import HelpIcon from "@mui/icons-material/LiveHelp"; +import zrokLogo from "./assets/zrok-1.0.0-rocket-green.svg"; +import useApiConsoleStore from "./model/store.ts"; +import BandwidthLimitedModal from "./BandwidthLimitedModal.tsx"; +import {useEffect, useState} from "react"; +import GettingStartedModal from "./GettingStartedModal.tsx"; + +interface NavBarProps { + logout: () => void; + visualizer: boolean; + toggleMode: (boolean) => void; +} + +const NavBar = ({ logout, visualizer, toggleMode }: NavBarProps) => { + const nodes = useApiConsoleStore((state) => state.nodes); + const limited = useApiConsoleStore((state) => state.limited); + const [limitedModalOpen, setLimitedModalOpen] = useState(false); + const openLimitedModal = () => { + setLimitedModalOpen(true); + } + const closeLimitedModal = () => { + setLimitedModalOpen(false); + } + const [gettingStartedOpen, setGettingStartedOpen] = useState(false); + const openGettingStarted = () => { + setGettingStartedOpen(true); + } + const closeGettingStarted = () => { + setGettingStartedOpen(false); + } + + useEffect(() => { + if(!limited) { + closeLimitedModal(); + } + }, [limited]) + + const limitedIndicator = ( + + + + + + ); + + const gettingStartedButton = ( + + + + + + ); + + const helpButton = ( + + + + + + ); + + const handleClick = () => { + toggleMode(!visualizer); + } + + return ( + <> + + + + + + + + + + z r o k + + + + + + + + + + { limited ? limitedIndicator : null } + { !nodes || nodes.length > 1 ? helpButton : gettingStartedButton } + + + + + + + + + + + + + ); +} + +export default NavBar; \ No newline at end of file diff --git a/ui/src/PropertyTable.tsx b/ui/src/PropertyTable.tsx new file mode 100644 index 00000000..4a291f50 --- /dev/null +++ b/ui/src/PropertyTable.tsx @@ -0,0 +1,52 @@ +import {useEffect, useState} from "react"; +import {camelToWords, objectToRows} from "./model/util.ts"; +import {Paper, Table, TableBody, TableCell, TableRow} from "@mui/material"; + +type PropertyTableProps = { + object: any; + custom: any; + labels: any; +} + +const PropertyTable = ({ object, custom, labels }: PropertyTableProps) => { + const [data, setData] = useState([]); + + useEffect(() => { + setData(objectToRows(object)); + }, [object]); + + const value = (row) => { + if(custom) { + if(row.property in custom) { + return custom[row.property](row); + } + } + return row.value; + } + + const renderLabel = (row) => { + if(labels) { + if(row.property in labels) { + return labels[row.property]; + } + } + return camelToWords(row.property); + } + + return ( + + + + {data.map((row) => ( + + {renderLabel(row)} + {value(row)} + + ))} + +
+
+ ); +} + +export default PropertyTable; \ No newline at end of file diff --git a/ui/src/RegenerateAccountTokenModal.tsx b/ui/src/RegenerateAccountTokenModal.tsx new file mode 100644 index 00000000..90b9b88c --- /dev/null +++ b/ui/src/RegenerateAccountTokenModal.tsx @@ -0,0 +1,108 @@ +import {User} from "./model/user.ts"; +import {useEffect, useRef, useState} from "react"; +import {modalStyle} from "./styling/theme.ts"; +import {Box, Button, Checkbox, FormControlLabel, Grid2, Modal, Typography} from "@mui/material"; +import {getAccountApi} from "./model/api.ts"; +import useApiConsoleStore from "./model/store.ts"; +import ClipboardText from "./ClipboardText.tsx"; + +interface RegenerateAccountTokenModalProps { + close: () => void; + isOpen: boolean; + user: User; +} + +const RegenerateAccountTokenModal = ({ close, isOpen, user }: RegenerateAccountTokenModalProps) => { + const updateUser = useApiConsoleStore((state) => state.updateUser); + const [errorMessage, setErrorMessage] = useState(null); + const [successMessage, setSuccessMessage] = useState(null); + const [checked, setChecked] = useState(false); + const checkedRef = useRef(checked); + + const toggleChecked = () => { + setChecked(!checkedRef.current); + } + + const reload = () => { + window.location.reload(); + } + + useEffect(() => { + setChecked(false); + setSuccessMessage(null); + }, [isOpen]); + + const regenerateToken = () => { + getAccountApi(user).regenerateAccountToken({body: {emailAddress: user.email}}) + .then(d => { + let newUser = { + email: user.email!, + token: d.accountToken!, + } + console.log(user, newUser); + updateUser(newUser); + localStorage.setItem("user", JSON.stringify(newUser)); + document.dispatchEvent(new Event("userUpdated")); + setSuccessMessage(<> + Your new account token is: {d.accountToken} + + + + ); + }) + .catch(e => { + e.response.json().then(ex => { + setErrorMessage( + {ex.message} + ); + console.log("releaseAccess", ex.message); + }); + }); + } + + const controls = <> + + } label={

I confirm that I want to regenerate my account token

} sx={{ mt: 2 }} /> +
+ + + + ; + + return ( + + + + Regenerate Account Token + + + + WARNING: Regenerating your account token can stop all environments and shares from operating properly! + Please read the following instructions to prevent interruptions! + + + + + You will need to manually edit your ${HOME}/.zrok/environment.json files + (in each environment) to use the new zrok_token. Updating these files will restore + the functionality of your environments. + + + + + Alternatively, you can just zrok disable any enabled environments and re-enable + using the updated account token. Running zrok disable before you regenerate will + delete your environments and any shares they contain (including reserved shares). So if you have + environments and reserved shares you need to preserve, your best option is to update the zrok_token in + those environments as described above. + + + { successMessage ? null : controls } + {successMessage} + {errorMessage} + + + ); +} + +export default RegenerateAccountTokenModal; \ No newline at end of file diff --git a/ui/src/Register.tsx b/ui/src/Register.tsx new file mode 100644 index 00000000..2bcca4bd --- /dev/null +++ b/ui/src/Register.tsx @@ -0,0 +1,247 @@ +import {Box, Button, Checkbox, Container, FormControlLabel, Grid2, TextField, Typography} from "@mui/material"; +import zrokLogo from "./assets/zrok-1.0.0-rocket-purple.svg"; +import {useParams} from "react-router"; +import {useFormik} from "formik"; +import * as Yup from 'yup'; +import {useEffect, useRef, useState} from "react"; +import {AccountApi, MetadataApi} from "./api"; +import ClipboardText from "./ClipboardText.tsx"; + +interface SetPasswordFormProps { + email: string; + touLink: string; + register: (v) => void; +} + +const SetPasswordForm = ({ email, touLink, register }: SetPasswordFormProps) => { + const [checked, setChecked] = useState(false); + const checkedRef = useRef(); + checkedRef.current = checked; + const toggleChecked = () => { setChecked(!checkedRef.current) } + + const form = useFormik({ + initialValues: { + password: "", + confirm: "", + }, + onSubmit: v => { + console.log(v); + register(v); + }, + validationSchema: Yup.object({ + password: Yup.string() + .min(8, "Password must be at least 8 characters") + .max(64, "Password must be less than 64 characters") + .matches( + /^.*[!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?].*$/, + "Password requires at least one special character" + ) + .matches( + /^.*[a-z].*$/, + "Password requires at least one lowercase letter" + ) + .matches( + /^.*[A-Z].*$/, + "Password requires at least one uppercase letter" + ) + .required("Password is required"), + confirm: Yup.string() + .required("Please confirm your new password") + .test("password-matches", "Password confirmation does not match", v => v === form.values.password) + }) + }); + + return ( + +

Welcome to zrok!

+ {email} + + + } label={

I accept the

} sx={{ mt: 2 }} /> + +
+ ); +} + +interface RegistrationCompleteProps { + token: string; +} + +const RegistrationComplete = ({ token }: RegistrationCompleteProps) => { + return ( + + + + +

Registration completed!

+
+
+
+ + + + Your account was created successfully! + + + + + Your new account token is: {token} + + + + + You can create an environment using your account token, like this: + + + + + $ zrok enable {token} + + + + + Your account token is a secret (like a password). + Please do not share it with anyone! + + + + + You can use your new password to log into the console here: + + + + + {window.location.origin} + + + + +

Enjoy zrok!

+
+
+
+
+ ); +} + +const InvalidToken = () => { + return ( + + + +

Invalid registration token?!

+
+
+ + + + Your registration token may have expired! + + + + + Please use the zrok invite command to + generate a new registration request and try again. + + + +
+ ); +} + +const Register = () => { + const { regToken } = useParams(); + const [component, setComponent] = useState(null); + const [error, setError] = useState(false); + const [email, setEmail] = useState(); + const [touLink, setTouLink] = useState(); + + const doRegistration = (v) => { + new AccountApi().register({body: {token: regToken, password: v.password}}) + .then(d => { + console.log(d); + setComponent(); + }) + .catch(e => { + console.log("doRegistration", e); + }); + } + + useEffect(() => { + if(regToken) { + new AccountApi().verify({body: {registrationToken: regToken}}) + .then((d) => { + console.log(d); + setEmail(d.email); + }) + .catch(e => { + setError(true); + console.log("error", e); + }); + } + }, [regToken]); + + useEffect(() => { + if(email) { + new MetadataApi()._configuration() + .then(d => { + setTouLink(d.touLink); + }) + .catch(e => { + e.response.json().then(ex => { + console.log("register", ex.message); + }) + }); + } + }, [email]); + + useEffect(() => { + if(!error && email && touLink) { + setComponent(); + } else { + if(error) { + setComponent(); + } + } + }, [touLink, error]); + + return ( + + + + +

z r o k

+ {component} +
+
+
+ ); +} + +export default Register; \ No newline at end of file diff --git a/ui/src/ReleaseAccessModal.tsx b/ui/src/ReleaseAccessModal.tsx new file mode 100644 index 00000000..ec1337ce --- /dev/null +++ b/ui/src/ReleaseAccessModal.tsx @@ -0,0 +1,85 @@ +import {Frontend} from "./api"; +import {useEffect, useRef, useState} from "react"; +import {Box, Button, Checkbox, FormControlLabel, Grid2, Modal, Typography} from "@mui/material"; +import {modalStyle} from "./styling/theme.ts"; +import {User} from "./model/user.ts"; +import {Node} from "@xyflow/react"; +import {getShareApi} from "./model/api.ts"; + +interface ReleaseAccessProps { + close: () => void; + isOpen: boolean; + user: User; + access: Node; + detail: Frontend; +} + +const ReleaseAccessModal = ({ close, isOpen, user, access, detail }: ReleaseAccessProps) => { + const [errorMessage, setErrorMessage] = useState(null); + const [frontendToken, setFrontendToken] = useState(""); + const [checked, setChecked] = useState(false); + const checkedRef = useRef(checked); + + const toggleChecked = () => { + setChecked(!checkedRef.current); + } + + useEffect(() => { + setChecked(false); + setErrorMessage(null); + }, [isOpen]); + + useEffect(() => { + if(detail && detail.frontendToken) { + setFrontendToken(detail.frontendToken); + } + }, [detail]); + + const releaseAccess = () => { + setErrorMessage(null); + if(detail && detail.frontendToken) { + getShareApi(user).unaccess({ + body: { + frontendToken: detail.frontendToken, + envZId: access.data.envZId as string, + shareToken: detail.shareToken + } + }) + .then(() => { + close(); + }) + .catch(e => { + e.response.json().then(ex => { + console.log("releaseAccess", ex.message); + }); + setErrorMessage(An error occurred releasing your access {detail.frontendToken}!); + setTimeout(() => { + setErrorMessage(null); + setChecked(false); + }, 2000); + }); + } + } + + return ( + + + + Release Access + + + Would you like to release the access {frontendToken} ? + + + } label={

I confirm the release of {frontendToken}

} sx={{ mt: 2 }} /> +
+ { errorMessage ? {errorMessage} : null} + + + +
+
+ ); +} + +export default ReleaseAccessModal; \ No newline at end of file diff --git a/ui/src/ReleaseEnvironmentModal.tsx b/ui/src/ReleaseEnvironmentModal.tsx new file mode 100644 index 00000000..fb599649 --- /dev/null +++ b/ui/src/ReleaseEnvironmentModal.tsx @@ -0,0 +1,86 @@ +import {Environment} from "./api"; +import {useEffect, useRef, useState} from "react"; +import {Box, Button, Checkbox, FormControlLabel, Grid2, Modal, Typography} from "@mui/material"; +import {modalStyle} from "./styling/theme.ts"; +import {User} from "./model/user.ts"; +import {Node} from "@xyflow/react"; +import {getEnvironmentApi} from "./model/api.ts"; + +interface ReleaseEnvironmentProps { + close: () => void; + isOpen: boolean; + user: User; + environment: Node; + detail: Environment; +} + +const ReleaseEnvironmentModal = ({ close, isOpen, user, environment, detail }: ReleaseEnvironmentProps) => { + const [errorMessage, setErrorMessage] = useState(null); + const [description, setDescription] = useState(""); + const [checked, setChecked] = useState(false); + const checkedRef = useRef(); + checkedRef.current = checked; + + const toggleChecked = () => { + setChecked(!checkedRef.current); + } + + useEffect(() => { + setChecked(false); + setErrorMessage(null); + }, [isOpen]); + + useEffect(() => { + if(detail && detail.description) { + setDescription(detail.description); + } + }, [detail]); + + const releaseEnvironment = () => { + if(environment.data && environment.data.envZId) { + getEnvironmentApi(user).disable({ + body: { + identity: environment.data.envZId as string + } + }) + .then(() => { + close(); + }) + .catch(e => { + e.response.json().then(ex => { + console.log("releaseEnvironment", ex.message); + }); + setErrorMessage(An error occurred releasing your environment {environment.id}!); + setTimeout(() => { + setErrorMessage(null); + setChecked(false); + }, 2000); + }); + } + } + + return ( + + + + Release Environment + + + Would you like to release the environment {description} ? + + + Releasing this environment will also release any shares and accesses that are associated with it. + + + } label={

I confirm the release of {description}

} sx={{ mt: 2 }} /> +
+ { errorMessage ? {errorMessage} : null} + + + +
+
+ ); +} + +export default ReleaseEnvironmentModal; \ No newline at end of file diff --git a/ui/src/ReleaseShareModal.tsx b/ui/src/ReleaseShareModal.tsx new file mode 100644 index 00000000..5c970259 --- /dev/null +++ b/ui/src/ReleaseShareModal.tsx @@ -0,0 +1,85 @@ +import {Share} from "./api"; +import {useEffect, useRef, useState} from "react"; +import {Box, Button, Checkbox, FormControlLabel, Grid2, Modal, Typography} from "@mui/material"; +import {modalStyle} from "./styling/theme.ts"; +import {User} from "./model/user.ts"; +import {Node} from "@xyflow/react"; +import {getShareApi} from "./model/api.ts"; + +interface ReleaseShareProps { + close: () => void; + isOpen: boolean; + user: User; + share: Node; + detail: Share; +} + +const ReleaseShareModal = ({ close, isOpen, user, share, detail }: ReleaseShareProps) => { + const [errorMessage, setErrorMessage] = useState(null); + const [shareToken, setShareToken] = useState(""); + const [checked, setChecked] = useState(false); + const checkedRef = useRef(); + checkedRef.current = checked; + + const toggleChecked = () => { + setChecked(!checkedRef.current); + } + + useEffect(() => { + setChecked(false); + setErrorMessage(null); + }, [isOpen]); + + useEffect(() => { + if(detail && detail.shareToken) { + setShareToken(detail.shareToken); + } + }, [detail]); + + const releaseShare = () => { + if(detail) { + getShareApi(user).unshare({ + body: { + envZId: share.data.envZId as string, + shareToken: detail.shareToken, + reserved: detail.reserved + } + }) + .then(d => { + close(); + }) + .catch(e => { + e.response.json().then(ex => { + console.log("releaseShare", ex.message); + }); + setErrorMessage(An error occurred releasing your share {detail.shareToken}!); + setTimeout(() => { + setErrorMessage(null); + setChecked(false); + }, 2000); + }); + } + } + + return ( + + + + Release Share + + + Would you like to release the share {shareToken} ? + + + } label={

I confirm the release of {shareToken}

} sx={{ mt: 2 }} /> +
+ { errorMessage ? {errorMessage} : null} + + + +
+
+ ) +} + +export default ReleaseShareModal; \ No newline at end of file diff --git a/ui/src/ResetPassword.tsx b/ui/src/ResetPassword.tsx new file mode 100644 index 00000000..a1b6338c --- /dev/null +++ b/ui/src/ResetPassword.tsx @@ -0,0 +1,170 @@ +import {useEffect, useState} from "react"; +import {Link, useParams} from "react-router"; +import {useFormik} from "formik"; +import * as Yup from "yup"; +import {Box, Button, Container, TextField, Typography} from "@mui/material"; +import zrokLogo from "./assets/zrok-1.0.0-rocket-purple.svg"; +import {AccountApi} from "./api"; + +interface ResetPasswordFormProps { + resetPassword: (v) => void; +} + +const ResetPasswordForm = ({ resetPassword }: ResetPasswordFormProps) => { + const form = useFormik({ + initialValues: { + password: "", + confirm: "", + }, + onSubmit: v => { + resetPassword(v); + }, + validationSchema: Yup.object({ + password: Yup.string() + .min(8, "Password must be at least 8 characters") + .max(64, "Password must be less than 64 characters") + .matches( + /^.*[!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?].*$/, + "Password requires at least one special character" + ) + .matches( + /^.*[a-z].*$/, + "Password requires at least one lowercase letter" + ) + .matches( + /^.*[A-Z].*$/, + "Password requires at least one uppercase letter" + ) + .required("Password is required"), + confirm: Yup.string() + .required("Please confirm your new password") + .test("password-matches", "Password confirmation does not match", v => v === form.values.password) + }) + }); + + return ( +
+

New Password

+ + + + + ); +} + +const ResetComplete = () => { + return ( + + + + +

Password Changed...

+
+
+
+ + + + You can use your new password to log into the console here: + + + + + {window.location.origin} + + + +
+ ); +} + +const ResetFailed = () => { + return ( + + + + +

Password Reset Failed!

+
+
+
+ + + + Your password change request failed. This might be due to an invalid password reset token. + + + + + Please use the forgot password link below to create a new password reset request: + + + + + Forgot Password? + + + +
+ ); +} + +const ResetPassword = () => { + const { resetToken } = useParams(); + const [component, setComponent] = useState(); + + const doReset = (v) => { + new AccountApi().resetPassword({body: {resetToken: resetToken, password: v.password}}) + .then(() => { + setComponent(); + }) + .catch(e => { + setComponent(); + console.log("doReset", e); + }); + } + + useEffect(() => { + setComponent(); + }, [resetToken]); + + return ( + + + + +

z r o k

+ {component} +
+
+
+ ) +} + +export default ResetPassword; \ No newline at end of file diff --git a/ui/src/SecretToggle.tsx b/ui/src/SecretToggle.tsx new file mode 100644 index 00000000..05c043c9 --- /dev/null +++ b/ui/src/SecretToggle.tsx @@ -0,0 +1,48 @@ +import {useState} from "react"; +import HideIcon from "@mui/icons-material/Visibility"; +import ShowIcon from "@mui/icons-material/VisibilityOff"; +import {Grid2} from "@mui/material"; + +interface SecretToggleProps { + secret: string; +} + +const SecretToggle = ({ secret }: SecretToggleProps) => { + const [showSecret, setShowSecret] = useState(false); + + const toggle = () => setShowSecret(!showSecret); + + const secretString = (s): string => { + let out = ""; + for(let i = 0; i < s.length; i++) { + out += " \u2022"; // bullet + } + return out; + } + + if(showSecret) { + return ( + + + {secret} + + + + + + ); + } else { + return ( + + + {secretString(secret)} + + + + + + ); + } +} + +export default SecretToggle; \ No newline at end of file diff --git a/ui/src/ShareMetricsModal.tsx b/ui/src/ShareMetricsModal.tsx new file mode 100644 index 00000000..d7e78087 --- /dev/null +++ b/ui/src/ShareMetricsModal.tsx @@ -0,0 +1,67 @@ +import {User} from "./model/user.ts"; +import {Node} from "@xyflow/react"; +import {useEffect, useState} from "react"; +import {buildMetrics} from "./model/util.ts"; +import {getMetadataApi} from "./model/api.ts"; +import {Box, Grid2, Modal, Typography} from "@mui/material"; +import {modalStyle} from "./styling/theme.ts"; +import MetricsGraph from "./MetricsGraph.tsx"; + +interface ShareMetricsModalProps { + close: () => void; + isOpen: boolean; + user: User; + share: Node; +} + +const ShareMetricsModal = ({ close, isOpen, user, share }: ShareMetricsModalProps) => { + const [metrics30, setMetrics30] = useState(buildMetrics([])); + const [metrics7, setMetrics7] = useState(buildMetrics([])); + const [metrics1, setMetrics1] = useState(buildMetrics([])); + + useEffect(() => { + let metadataApi = getMetadataApi(user); + metadataApi.getShareMetrics({shareToken: share.id}) + .then(d => { + setMetrics30(buildMetrics(d)); + }) + .catch(e => { + e.response.json().then(ex => { + console.log("shareMetricsModal", ex.message); + }); + }); + metadataApi.getShareMetrics({shareToken: share.id, duration: "168h"}) + .then(d => { + setMetrics7(buildMetrics(d)); + }) + .catch(e => { + e.response.json().then(ex => { + console.log("shareMetricsModal", ex.message); + }); + }); + metadataApi.getShareMetrics({shareToken: share.id, duration: "24h"}) + .then(d => { + setMetrics1(buildMetrics(d)); + }) + .catch(e => { + e.response.json().then(ex => { + console.log("shareMetricsModal", ex.message); + }); + }); + }, [isOpen, share]); + + return ( + + + + Share Metrics + + + + + + + ); +} + +export default ShareMetricsModal; \ No newline at end of file diff --git a/ui/src/ShareNode.tsx b/ui/src/ShareNode.tsx new file mode 100644 index 00000000..2f9093af --- /dev/null +++ b/ui/src/ShareNode.tsx @@ -0,0 +1,37 @@ +import {Handle, Position, useUpdateNodeInternals} from "@xyflow/react"; +import {Grid2} from "@mui/material"; +import ShareIcon from "@mui/icons-material/Share"; +import useApiConsoleStore from "./model/store.ts"; +import {SparkLineChart} from "@mui/x-charts"; + +const ShareNode = ({ data }) => { + const sparkdata = useApiConsoleStore((state) => state.sparkdata); + const updateNodeInternals = useUpdateNodeInternals(); + + let shareHandle = <>; + if(data.accessed) { + shareHandle = ; + updateNodeInternals(data.id); + } + + const hiddenSparkline = <>; + const visibleSparkline = ( + + + + ); + + return ( + <> + + {shareHandle} + + + {data.label} + + {sparkdata.get(data.shareToken)?.find(x => x > 0) ? visibleSparkline : hiddenSparkline} + + ); +} + +export default ShareNode; \ No newline at end of file diff --git a/ui/src/SharePanel.tsx b/ui/src/SharePanel.tsx new file mode 100644 index 00000000..917b2d47 --- /dev/null +++ b/ui/src/SharePanel.tsx @@ -0,0 +1,120 @@ +import {Node} from "@xyflow/react"; +import {Button, Grid2, Tooltip, Typography} from "@mui/material"; +import ShareIcon from "@mui/icons-material/Share"; +import {Share} from "./api"; +import React, {useEffect, useState} from "react"; +import PropertyTable from "./PropertyTable.tsx"; +import useApiConsoleStore from "./model/store.ts"; +import DeleteIcon from "@mui/icons-material/Delete"; +import ReleaseShareModal from "./ReleaseShareModal.tsx"; +import {getMetadataApi} from "./model/api.ts"; +import ClipboardText from "./ClipboardText.tsx"; +import MetricsIcon from "@mui/icons-material/QueryStats"; +import ShareMetricsModal from "./ShareMetricsModal.tsx"; +import BandwidthLimitedWarning from "./BandwidthLimitedWarning.tsx"; + +interface SharePanelProps { + share: Node; +} + +const SharePanel = ({ share }: SharePanelProps) => { + const user = useApiConsoleStore((state) => state.user); + const [detail, setDetail] = useState(null); + const [shareMetricsOpen, setShareMetricsOpen] = useState(false); + const openShareMetrics = () => { + setShareMetricsOpen(true); + } + const closeShareMetrics = () => { + setShareMetricsOpen(false); + } + const [releaseShareOpen, setReleaseShareOpen] = useState(false); + const openReleaseShare = () => { + setReleaseShareOpen(true); + } + const closeReleaseShare = () => { + setReleaseShareOpen(false); + } + + const customProperties = { + createdAt: row => new Date(row.value).toLocaleString(), + updatedAt: row => new Date(row.value).toLocaleString(), + frontendEndpoint: row => <> + + + {row.value} + + + + + + , + reserved: row => row.value ? "reserved" : "ephemeral", + shareToken: row => <> + + + {row.value} + + + + + + + } + + const labels = { + backendProxyEndpoint: "Target", + createdAt: "Created", + reserved: "Reservation", + token: "Share Token", + updatedAt: "Updated" + } + + useEffect(() => { + getMetadataApi(user).getShareDetail({ shareToken: share.data!.shareToken! as string }) + .then(d => { + delete d.activity; + delete d.limited; + delete d.zId; + if(d.shareMode === "private") { + delete d.frontendEndpoint; + delete d.frontendSelection; + } + setDetail(d); + }) + .catch(e => { + console.log("SharePanel", e); + }) + }, [share]); + + return ( + <> + + + + {String(share.data.label)} + + +
A {detail ? detail.shareMode : ''}{detail && detail.reserved ? ', reserved ' : ''} {detail?.backendMode} share with the share token {share.id}
+
+ { share.data.limited ? : null } + + + + + + + + + + + + + +
+ + + + ); +} + +export default SharePanel; diff --git a/ui/src/TabularView.tsx b/ui/src/TabularView.tsx new file mode 100644 index 00000000..6eff4837 --- /dev/null +++ b/ui/src/TabularView.tsx @@ -0,0 +1,180 @@ +import {Box, Paper} from "@mui/material"; +import useApiConsoleStore from "./model/store.ts"; +import { + MaterialReactTable, + type MRT_ColumnDef, + MRT_PaginationState, + MRT_RowSelectionState, + MRT_SortingState, + useMaterialReactTable +} from "material-react-table"; +import {useEffect, useMemo, useRef, useState} from "react"; +import {Node} from "@xyflow/react"; +import {bytesToSize} from "./model/util.ts"; + +const TabularView = () => { + const nodes = useApiConsoleStore((state) => state.nodes); + const nodesRef = useRef(); + nodesRef.current = nodes; + const updateNodes = useApiConsoleStore((state) => state.updateNodes); + const selectedNode = useApiConsoleStore((state) => state.selectedNode); + const updateSelectedNode = useApiConsoleStore((state) => state.updateSelectedNode); + const sparkdata = useApiConsoleStore((state) => state.sparkdata); + const storedPagination = useApiConsoleStore((state) => state.pagination); + const updatePagination = useApiConsoleStore((state) => state.updatePagination); + const storedSorting = useApiConsoleStore((state) => state.sorting); + const updateSorting = useApiConsoleStore((state) => state.updateSorting); + const [pagination, setPagination] = useState({} as MRT_PaginationState); + const [rowSelection, setRowSelection] = useState({}); + const [sorting, setSorting] = useState([{id: "data.label", desc: false}] as MRT_SortingState); + const [combined, setCombined] = useState([]); + + useEffect(() => { + let outNodes = new Array(); + nodesRef.current.forEach(node => { + let outNode = { + ...node + }; + outNode.data.activity = sparkdata.get(node.id); + outNodes.push(outNode); + }); + setCombined(outNodes); + }, [nodes, sparkdata]); + + useEffect(() => { + if(selectedNode) { + let selection = {}; + selection[selectedNode.id] = true; + setRowSelection(selection); + } + setPagination(storedPagination); + setSorting(storedSorting); + }, []); + + useEffect(() => { + updatePagination(pagination); + }, [pagination]); + + useEffect(() => { + updateSorting(sorting); + }, [sorting]); + + useEffect(() => { + let sn = nodes.find(node => Object.keys(rowSelection).includes(node.id)); + updateSelectedNode(sn); + updateNodes(nodes.map(node => (sn && node.id === sn.id) ? { ...node, selected: true } : { ...node, selected: false })); + }, [rowSelection]); + + const sparkdataTip = (row) => { + if(row.data && row.data.activity) { + // - 2; - 1 is sometimes undefined? + return row.data.activity[row.data.activity.length - 2]; + } + return 0; + } + + const sparkdataTipFmt = (row) => { + let tip = sparkdataTip(row); + if(tip > 0) { + return bytesToSize(tip); + } + return ""; + }; + + const sparkdataAverage = (row) => { + if(row.data && row.data.activity) { + let average = row.data.activity.reduce((acc, curr) => { return acc + curr }, 0); + average /= row.data.activity.length; + return average; + } + return 0; + } + + const sparkdataAverageFmt = (row) => { + let average = sparkdataAverage(row); + if(average > 0) { + return bytesToSize(average); + } + return ""; + } + + const columns = useMemo[]>( + () => [ + { + accessorKey: 'data.label', + header: 'Label' + }, + { + accessorKey: 'type', + header: 'Type', + }, + { + accessorFn: sparkdataTipFmt, + header: 'Activity', + sortingFn: (rowA, rowB) => { + let tipA = sparkdataTip(rowA.original); + let tipB = sparkdataTip(rowB.original); + return tipA > tipB ? 1 : tipA < tipB ? -1 : 0; + }, + sortDescFirst: true + }, + { + accessorFn: sparkdataAverageFmt, + header: 'Activity 5m', + sortingFn: (rowA, rowB) => { + let avgA = sparkdataAverage(rowA.original); + let avgB = sparkdataAverage(rowB.original); + return avgA > avgB ? 1 : avgA < avgB ? -1 : 0; + }, + sortDescFirst: true + } + ], + [], + ); + + const table = useMaterialReactTable({ + columns: columns, + data: combined, + enableRowSelection: false, + enableMultiRowSelection: false, + getRowId: r => r.id, + onPaginationChange: setPagination, + onRowSelectionChange: setRowSelection, + onSortingChange: setSorting, + state: { pagination, rowSelection, sorting }, + muiTableBodyRowProps: ({ row }) => ({ + onClick: () => { + if(rowSelection[row.id]) { + setRowSelection({}); + } else { + setRowSelection({[row.id]: true}); + } + + }, + selected: rowSelection[row.id], + sx: { + cursor: 'pointer', + }, + }), + muiToolbarAlertBannerProps: { + sx: { + color: "#241775", + backgroundColor: "#f5fde7", + } + }, + positionToolbarAlertBanner: "bottom", + mrtTheme: (theme) => ({ + matchHighlightColor: 'rgba(155, 243, 22, 1)' + }), + }); + + return ( + + + + + + ); +}; + +export default TabularView; \ No newline at end of file diff --git a/ui/src/Visualizer.tsx b/ui/src/Visualizer.tsx new file mode 100644 index 00000000..6aea82b3 --- /dev/null +++ b/ui/src/Visualizer.tsx @@ -0,0 +1,103 @@ +import "@xyflow/react/dist/style.css"; +import "./styling/react-flow.css"; +import { + applyNodeChanges, + Background, + Controls, + MiniMap, + Node, + ReactFlow, + ReactFlowProvider, + useOnViewportChange, + Viewport +} from "@xyflow/react"; +import ShareNode from "./ShareNode.tsx"; +import EnvironmentNode from "./EnvironmentNode.tsx"; +import AccountNode from "./AccountNode.tsx"; +import AccessNode from "./AccessNode.tsx"; +import {Box} from "@mui/material"; +import useApiConsoleStore from "./model/store.ts"; +import AccessEdge from "./AccessEdge.tsx"; + +const edgeTypes = { + access: AccessEdge +}; + +const nodeTypes = { + access: AccessNode, + account: AccountNode, + environment: EnvironmentNode, + share: ShareNode +}; + +const Visualizer = () => { + const updateSelectedNode = useApiConsoleStore((state) => state.updateSelectedNode); + const viewport = useApiConsoleStore((state) => state.viewport); + const updateViewport = useApiConsoleStore((state) => state.updateViewport); + const nodes = useApiConsoleStore((state) => state.nodes); + const updateNodes = useApiConsoleStore((state) => state.updateNodes); + const edges = useApiConsoleStore((state) => state.edges); + + const onNodesChange = (changes) => { + updateNodes(applyNodeChanges(changes, nodes)); + } + + useOnViewportChange({ + onEnd: (viewport: Viewport) => { + updateViewport(viewport); + } + }); + + const onSelectionChange = ({ nodes }) => { + if(nodes.length > 0) { + updateSelectedNode(nodes[0]); + } else { + updateSelectedNode(null as Node); + } + }; + + const nodeColor = (node) => { + if(node.selected) { + return "#9bf316"; + } + return "#241775"; + } + + let fitView = false; + if(viewport.x === 0 && viewport.y === 0 && viewport.zoom === 1) { + fitView = true; + } + + return ( + + + + + + ); +} + +export default () => { + return ( + + + + + + ); +} \ No newline at end of file diff --git a/ui/src/api/.openapi-generator-ignore b/ui/src/api/.openapi-generator-ignore new file mode 100644 index 00000000..7484ee59 --- /dev/null +++ b/ui/src/api/.openapi-generator-ignore @@ -0,0 +1,23 @@ +# OpenAPI Generator Ignore +# Generated by openapi-generator https://github.com/openapitools/openapi-generator + +# Use this file to prevent files from being overwritten by the generator. +# The patterns follow closely to .gitignore or .dockerignore. + +# As an example, the C# client generator defines ApiClient.cs. +# You can make changes and tell OpenAPI Generator to ignore just this file by uncommenting the following line: +#ApiClient.cs + +# You can match any string of characters against a directory, file or extension with a single asterisk (*): +#foo/*/qux +# The above matches foo/bar/qux and foo/baz/qux, but not foo/bar/baz/qux + +# You can recursively match patterns against a directory, file or extension with a double asterisk (**): +#foo/**/qux +# This matches foo/bar/qux, foo/baz/qux, and foo/bar/baz/qux + +# You can also negate patterns with an exclamation (!). +# For example, you can ignore all files in a docs folder with the file extension .md: +#docs/*.md +# Then explicitly reverse the ignore rule for a single file: +#!docs/README.md diff --git a/ui/src/api/.openapi-generator/FILES b/ui/src/api/.openapi-generator/FILES new file mode 100644 index 00000000..5b3a1e76 --- /dev/null +++ b/ui/src/api/.openapi-generator/FILES @@ -0,0 +1,59 @@ +apis/AccountApi.ts +apis/AdminApi.ts +apis/EnvironmentApi.ts +apis/MetadataApi.ts +apis/ShareApi.ts +apis/index.ts +index.ts +models/Access201Response.ts +models/AccessRequest.ts +models/AddOrganizationMemberRequest.ts +models/AuthUser.ts +models/ChangePasswordRequest.ts +models/ClientVersionCheckRequest.ts +models/CreateFrontend201Response.ts +models/CreateFrontendRequest.ts +models/CreateIdentity201Response.ts +models/CreateIdentityRequest.ts +models/CreateOrganization201Response.ts +models/CreateOrganizationRequest.ts +models/DisableRequest.ts +models/EnableRequest.ts +models/Environment.ts +models/EnvironmentAndResources.ts +models/Frontend.ts +models/GetSparklines200Response.ts +models/GetSparklinesRequest.ts +models/InviteRequest.ts +models/InviteTokenGenerateRequest.ts +models/ListFrontends200ResponseInner.ts +models/ListMemberships200Response.ts +models/ListMemberships200ResponseMembershipsInner.ts +models/ListOrganizationMembers200Response.ts +models/ListOrganizationMembers200ResponseMembersInner.ts +models/ListOrganizations200Response.ts +models/ListOrganizations200ResponseOrganizationsInner.ts +models/LoginRequest.ts +models/Metrics.ts +models/MetricsSample.ts +models/ModelConfiguration.ts +models/Overview.ts +models/Principal.ts +models/RegenerateAccountToken200Response.ts +models/RegenerateAccountTokenRequest.ts +models/RegisterRequest.ts +models/RemoveOrganizationMemberRequest.ts +models/ResetPasswordRequest.ts +models/Share.ts +models/ShareRequest.ts +models/ShareResponse.ts +models/SparkDataSample.ts +models/UnaccessRequest.ts +models/UnshareRequest.ts +models/UpdateAccessRequest.ts +models/UpdateFrontendRequest.ts +models/UpdateShareRequest.ts +models/Verify200Response.ts +models/VerifyRequest.ts +models/index.ts +runtime.ts diff --git a/ui/src/api/.openapi-generator/VERSION b/ui/src/api/.openapi-generator/VERSION new file mode 100644 index 00000000..1985849f --- /dev/null +++ b/ui/src/api/.openapi-generator/VERSION @@ -0,0 +1 @@ +7.7.0 diff --git a/ui/src/api/account.js b/ui/src/api/account.js deleted file mode 100644 index 42aaa3ae..00000000 --- a/ui/src/api/account.js +++ /dev/null @@ -1,181 +0,0 @@ -/** @module account */ -// Auto-generated, edits will be overwritten -import * as gateway from './gateway' - -/** - * @param {object} options Optional options - * @param {module:types.changePasswordRequest} [options.body] - * @return {Promise} changed password - */ -export function changePassword(options) { - if (!options) options = {} - const parameters = { - body: { - body: options.body - } - } - return gateway.request(changePasswordOperation, parameters) -} - -/** - * @param {object} options Optional options - * @param {module:types.inviteRequest} [options.body] - * @return {Promise} invitation created - */ -export function invite(options) { - if (!options) options = {} - const parameters = { - body: { - body: options.body - } - } - return gateway.request(inviteOperation, parameters) -} - -/** - * @param {object} options Optional options - * @param {module:types.loginRequest} [options.body] - * @return {Promise} login successful - */ -export function login(options) { - if (!options) options = {} - const parameters = { - body: { - body: options.body - } - } - return gateway.request(loginOperation, parameters) -} - -/** - * @param {object} options Optional options - * @param {object} [options.body] - * @return {Promise} regenerate account token - */ -export function regenerateToken(options) { - if (!options) options = {} - const parameters = { - body: { - body: options.body - } - } - return gateway.request(regenerateTokenOperation, parameters) -} - -/** - * @param {object} options Optional options - * @param {module:types.registerRequest} [options.body] - * @return {Promise} account created - */ -export function register(options) { - if (!options) options = {} - const parameters = { - body: { - body: options.body - } - } - return gateway.request(registerOperation, parameters) -} - -/** - * @param {object} options Optional options - * @param {module:types.resetPasswordRequest} [options.body] - * @return {Promise} password reset - */ -export function resetPassword(options) { - if (!options) options = {} - const parameters = { - body: { - body: options.body - } - } - return gateway.request(resetPasswordOperation, parameters) -} - -/** - * @param {object} options Optional options - * @param {object} [options.body] - * @return {Promise} forgot password request created - */ -export function resetPasswordRequest(options) { - if (!options) options = {} - const parameters = { - body: { - body: options.body - } - } - return gateway.request(resetPasswordRequestOperation, parameters) -} - -/** - * @param {object} options Optional options - * @param {module:types.verifyRequest} [options.body] - * @return {Promise} token ready - */ -export function verify(options) { - if (!options) options = {} - const parameters = { - body: { - body: options.body - } - } - return gateway.request(verifyOperation, parameters) -} - -const changePasswordOperation = { - path: '/changePassword', - contentTypes: ['application/zrok.v1+json'], - method: 'post', - security: [ - { - id: 'key' - } - ] -} - -const inviteOperation = { - path: '/invite', - contentTypes: ['application/zrok.v1+json'], - method: 'post' -} - -const loginOperation = { - path: '/login', - contentTypes: ['application/zrok.v1+json'], - method: 'post' -} - -const regenerateTokenOperation = { - path: '/regenerateToken', - contentTypes: ['application/zrok.v1+json'], - method: 'post', - security: [ - { - id: 'key' - } - ] -} - -const registerOperation = { - path: '/register', - contentTypes: ['application/zrok.v1+json'], - method: 'post' -} - -const resetPasswordOperation = { - path: '/resetPassword', - contentTypes: ['application/zrok.v1+json'], - method: 'post' -} - -const resetPasswordRequestOperation = { - path: '/resetPasswordRequest', - contentTypes: ['application/zrok.v1+json'], - method: 'post' -} - -const verifyOperation = { - path: '/verify', - contentTypes: ['application/zrok.v1+json'], - method: 'post' -} diff --git a/ui/src/api/admin.js b/ui/src/api/admin.js deleted file mode 100644 index bf49d30f..00000000 --- a/ui/src/api/admin.js +++ /dev/null @@ -1,347 +0,0 @@ -/** @module admin */ -// Auto-generated, edits will be overwritten -import * as gateway from './gateway' - -/** - * @param {object} options Optional options - * @param {object} [options.body] - * @return {Promise} created - */ -export function createAccount(options) { - if (!options) options = {} - const parameters = { - body: { - body: options.body - } - } - return gateway.request(createAccountOperation, parameters) -} - -/** - * @param {object} options Optional options - * @param {module:types.createFrontendRequest} [options.body] - * @return {Promise} frontend created - */ -export function createFrontend(options) { - if (!options) options = {} - const parameters = { - body: { - body: options.body - } - } - return gateway.request(createFrontendOperation, parameters) -} - -/** - * @param {object} options Optional options - * @param {module:types.updateFrontendRequest} [options.body] - * @return {Promise} frontend updated - */ -export function updateFrontend(options) { - if (!options) options = {} - const parameters = { - body: { - body: options.body - } - } - return gateway.request(updateFrontendOperation, parameters) -} - -/** - * @param {object} options Optional options - * @param {module:types.deleteFrontendRequest} [options.body] - * @return {Promise} frontend deleted - */ -export function deleteFrontend(options) { - if (!options) options = {} - const parameters = { - body: { - body: options.body - } - } - return gateway.request(deleteFrontendOperation, parameters) -} - -/** - */ -export function listFrontends() { - return gateway.request(listFrontendsOperation) -} - -/** - * @param {object} options Optional options - * @param {object} [options.body] - * @return {Promise} ok - */ -export function grants(options) { - if (!options) options = {} - const parameters = { - body: { - body: options.body - } - } - return gateway.request(grantsOperation, parameters) -} - -/** - * @param {object} options Optional options - * @param {object} [options.body] - * @return {Promise} created - */ -export function createIdentity(options) { - if (!options) options = {} - const parameters = { - body: { - body: options.body - } - } - return gateway.request(createIdentityOperation, parameters) -} - -/** - * @param {object} options Optional options - * @param {module:types.inviteTokenGenerateRequest} [options.body] - * @return {Promise} invitation tokens created - */ -export function inviteTokenGenerate(options) { - if (!options) options = {} - const parameters = { - body: { - body: options.body - } - } - return gateway.request(inviteTokenGenerateOperation, parameters) -} - -/** - * @param {object} options Optional options - * @param {object} [options.body] - * @return {Promise} organization created - */ -export function createOrganization(options) { - if (!options) options = {} - const parameters = { - body: { - body: options.body - } - } - return gateway.request(createOrganizationOperation, parameters) -} - -/** - * @param {object} options Optional options - * @param {object} [options.body] - * @return {Promise} organization deleted - */ -export function deleteOrganization(options) { - if (!options) options = {} - const parameters = { - body: { - body: options.body - } - } - return gateway.request(deleteOrganizationOperation, parameters) -} - -/** - * @param {object} options Optional options - * @param {object} [options.body] - * @return {Promise} member added - */ -export function addOrganizationMember(options) { - if (!options) options = {} - const parameters = { - body: { - body: options.body - } - } - return gateway.request(addOrganizationMemberOperation, parameters) -} - -/** - * @param {object} options Optional options - * @param {object} [options.body] - * @return {Promise} list organization members - */ -export function listOrganizationMembers(options) { - if (!options) options = {} - const parameters = { - body: { - body: options.body - } - } - return gateway.request(listOrganizationMembersOperation, parameters) -} - -/** - * @param {object} options Optional options - * @param {object} [options.body] - * @return {Promise} member removed - */ -export function removeOrganizationMember(options) { - if (!options) options = {} - const parameters = { - body: { - body: options.body - } - } - return gateway.request(removeOrganizationMemberOperation, parameters) -} - -/** - */ -export function listOrganizations() { - return gateway.request(listOrganizationsOperation) -} - -const createAccountOperation = { - path: '/account', - contentTypes: ['application/zrok.v1+json'], - method: 'post', - security: [ - { - id: 'key' - } - ] -} - -const createFrontendOperation = { - path: '/frontend', - contentTypes: ['application/zrok.v1+json'], - method: 'post', - security: [ - { - id: 'key' - } - ] -} - -const updateFrontendOperation = { - path: '/frontend', - contentTypes: ['application/zrok.v1+json'], - method: 'patch', - security: [ - { - id: 'key' - } - ] -} - -const deleteFrontendOperation = { - path: '/frontend', - contentTypes: ['application/zrok.v1+json'], - method: 'delete', - security: [ - { - id: 'key' - } - ] -} - -const listFrontendsOperation = { - path: '/frontends', - method: 'get', - security: [ - { - id: 'key' - } - ] -} - -const grantsOperation = { - path: '/grants', - contentTypes: ['application/zrok.v1+json'], - method: 'post', - security: [ - { - id: 'key' - } - ] -} - -const createIdentityOperation = { - path: '/identity', - contentTypes: ['application/zrok.v1+json'], - method: 'post', - security: [ - { - id: 'key' - } - ] -} - -const inviteTokenGenerateOperation = { - path: '/invite/token/generate', - contentTypes: ['application/zrok.v1+json'], - method: 'post', - security: [ - { - id: 'key' - } - ] -} - -const createOrganizationOperation = { - path: '/organization', - contentTypes: ['application/zrok.v1+json'], - method: 'post', - security: [ - { - id: 'key' - } - ] -} - -const deleteOrganizationOperation = { - path: '/organization', - contentTypes: ['application/zrok.v1+json'], - method: 'delete', - security: [ - { - id: 'key' - } - ] -} - -const addOrganizationMemberOperation = { - path: '/organization/add', - contentTypes: ['application/zrok.v1+json'], - method: 'post', - security: [ - { - id: 'key' - } - ] -} - -const listOrganizationMembersOperation = { - path: '/organization/list', - contentTypes: ['application/zrok.v1+json'], - method: 'post', - security: [ - { - id: 'key' - } - ] -} - -const removeOrganizationMemberOperation = { - path: '/organization/remove', - contentTypes: ['application/zrok.v1+json'], - method: 'post', - security: [ - { - id: 'key' - } - ] -} - -const listOrganizationsOperation = { - path: '/organizations', - method: 'get', - security: [ - { - id: 'key' - } - ] -} diff --git a/sdk/nodejs/sdk/src/zrok/api/apis/AccountApi.ts b/ui/src/api/apis/AccountApi.ts similarity index 60% rename from sdk/nodejs/sdk/src/zrok/api/apis/AccountApi.ts rename to ui/src/api/apis/AccountApi.ts index fea23ff0..e18bfaa2 100644 --- a/sdk/nodejs/sdk/src/zrok/api/apis/AccountApi.ts +++ b/ui/src/api/apis/AccountApi.ts @@ -4,7 +4,7 @@ * zrok * zrok client access * - * The version of the OpenAPI document: 0.3.0 + * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). @@ -15,34 +15,41 @@ import * as runtime from '../runtime'; import type { + ChangePasswordRequest, InviteRequest, LoginRequest, + RegenerateAccountToken200Response, + RegenerateAccountTokenRequest, RegisterRequest, - RegisterResponse, ResetPasswordRequest, - ResetPasswordRequestRequest, + Verify200Response, VerifyRequest, - VerifyResponse, } from '../models/index'; import { + ChangePasswordRequestFromJSON, + ChangePasswordRequestToJSON, InviteRequestFromJSON, InviteRequestToJSON, LoginRequestFromJSON, LoginRequestToJSON, + RegenerateAccountToken200ResponseFromJSON, + RegenerateAccountToken200ResponseToJSON, + RegenerateAccountTokenRequestFromJSON, + RegenerateAccountTokenRequestToJSON, RegisterRequestFromJSON, RegisterRequestToJSON, - RegisterResponseFromJSON, - RegisterResponseToJSON, ResetPasswordRequestFromJSON, ResetPasswordRequestToJSON, - ResetPasswordRequestRequestFromJSON, - ResetPasswordRequestRequestToJSON, + Verify200ResponseFromJSON, + Verify200ResponseToJSON, VerifyRequestFromJSON, VerifyRequestToJSON, - VerifyResponseFromJSON, - VerifyResponseToJSON, } from '../models/index'; +export interface ChangePasswordOperationRequest { + body?: ChangePasswordRequest; +} + export interface InviteOperationRequest { body?: InviteRequest; } @@ -51,6 +58,10 @@ export interface LoginOperationRequest { body?: LoginRequest; } +export interface RegenerateAccountTokenOperationRequest { + body?: RegenerateAccountTokenRequest; +} + export interface RegisterOperationRequest { body?: RegisterRequest; } @@ -59,8 +70,8 @@ export interface ResetPasswordOperationRequest { body?: ResetPasswordRequest; } -export interface ResetPasswordRequestOperationRequest { - body?: ResetPasswordRequestRequest; +export interface ResetPasswordRequestRequest { + body?: RegenerateAccountTokenRequest; } export interface VerifyOperationRequest { @@ -72,6 +83,36 @@ export interface VerifyOperationRequest { */ export class AccountApi extends runtime.BaseAPI { + /** + */ + async changePasswordRaw(requestParameters: ChangePasswordOperationRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + + headerParameters['Content-Type'] = 'application/zrok.v1+json'; + + if (this.configuration && this.configuration.apiKey) { + headerParameters["x-token"] = await this.configuration.apiKey("x-token"); // key authentication + } + + const response = await this.request({ + path: `/changePassword`, + method: 'POST', + headers: headerParameters, + query: queryParameters, + body: ChangePasswordRequestToJSON(requestParameters['body']), + }, initOverrides); + + return new runtime.VoidApiResponse(response); + } + + /** + */ + async changePassword(requestParameters: ChangePasswordOperationRequest = {}, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { + await this.changePasswordRaw(requestParameters, initOverrides); + } + /** */ async inviteRaw(requestParameters: InviteOperationRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { @@ -86,7 +127,7 @@ export class AccountApi extends runtime.BaseAPI { method: 'POST', headers: headerParameters, query: queryParameters, - body: InviteRequestToJSON(requestParameters.body), + body: InviteRequestToJSON(requestParameters['body']), }, initOverrides); return new runtime.VoidApiResponse(response); @@ -112,7 +153,7 @@ export class AccountApi extends runtime.BaseAPI { method: 'POST', headers: headerParameters, query: queryParameters, - body: LoginRequestToJSON(requestParameters.body), + body: LoginRequestToJSON(requestParameters['body']), }, initOverrides); if (this.isJsonMime(response.headers.get('content-type'))) { @@ -131,7 +172,38 @@ export class AccountApi extends runtime.BaseAPI { /** */ - async registerRaw(requestParameters: RegisterOperationRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { + async regenerateAccountTokenRaw(requestParameters: RegenerateAccountTokenOperationRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + + headerParameters['Content-Type'] = 'application/zrok.v1+json'; + + if (this.configuration && this.configuration.apiKey) { + headerParameters["x-token"] = await this.configuration.apiKey("x-token"); // key authentication + } + + const response = await this.request({ + path: `/regenerateAccountToken`, + method: 'POST', + headers: headerParameters, + query: queryParameters, + body: RegenerateAccountTokenRequestToJSON(requestParameters['body']), + }, initOverrides); + + return new runtime.JSONApiResponse(response, (jsonValue) => RegenerateAccountToken200ResponseFromJSON(jsonValue)); + } + + /** + */ + async regenerateAccountToken(requestParameters: RegenerateAccountTokenOperationRequest = {}, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { + const response = await this.regenerateAccountTokenRaw(requestParameters, initOverrides); + return await response.value(); + } + + /** + */ + async registerRaw(requestParameters: RegisterOperationRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { const queryParameters: any = {}; const headerParameters: runtime.HTTPHeaders = {}; @@ -143,15 +215,15 @@ export class AccountApi extends runtime.BaseAPI { method: 'POST', headers: headerParameters, query: queryParameters, - body: RegisterRequestToJSON(requestParameters.body), + body: RegisterRequestToJSON(requestParameters['body']), }, initOverrides); - return new runtime.JSONApiResponse(response, (jsonValue) => RegisterResponseFromJSON(jsonValue)); + return new runtime.JSONApiResponse(response, (jsonValue) => RegenerateAccountToken200ResponseFromJSON(jsonValue)); } /** */ - async register(requestParameters: RegisterOperationRequest = {}, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { + async register(requestParameters: RegisterOperationRequest = {}, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { const response = await this.registerRaw(requestParameters, initOverrides); return await response.value(); } @@ -170,7 +242,7 @@ export class AccountApi extends runtime.BaseAPI { method: 'POST', headers: headerParameters, query: queryParameters, - body: ResetPasswordRequestToJSON(requestParameters.body), + body: ResetPasswordRequestToJSON(requestParameters['body']), }, initOverrides); return new runtime.VoidApiResponse(response); @@ -184,7 +256,7 @@ export class AccountApi extends runtime.BaseAPI { /** */ - async resetPasswordRequestRaw(requestParameters: ResetPasswordRequestOperationRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { + async resetPasswordRequestRaw(requestParameters: ResetPasswordRequestRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { const queryParameters: any = {}; const headerParameters: runtime.HTTPHeaders = {}; @@ -196,7 +268,7 @@ export class AccountApi extends runtime.BaseAPI { method: 'POST', headers: headerParameters, query: queryParameters, - body: ResetPasswordRequestRequestToJSON(requestParameters.body), + body: RegenerateAccountTokenRequestToJSON(requestParameters['body']), }, initOverrides); return new runtime.VoidApiResponse(response); @@ -204,13 +276,13 @@ export class AccountApi extends runtime.BaseAPI { /** */ - async resetPasswordRequest(requestParameters: ResetPasswordRequestOperationRequest = {}, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { + async resetPasswordRequest(requestParameters: ResetPasswordRequestRequest = {}, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { await this.resetPasswordRequestRaw(requestParameters, initOverrides); } /** */ - async verifyRaw(requestParameters: VerifyOperationRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { + async verifyRaw(requestParameters: VerifyOperationRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { const queryParameters: any = {}; const headerParameters: runtime.HTTPHeaders = {}; @@ -222,15 +294,15 @@ export class AccountApi extends runtime.BaseAPI { method: 'POST', headers: headerParameters, query: queryParameters, - body: VerifyRequestToJSON(requestParameters.body), + body: VerifyRequestToJSON(requestParameters['body']), }, initOverrides); - return new runtime.JSONApiResponse(response, (jsonValue) => VerifyResponseFromJSON(jsonValue)); + return new runtime.JSONApiResponse(response, (jsonValue) => Verify200ResponseFromJSON(jsonValue)); } /** */ - async verify(requestParameters: VerifyOperationRequest = {}, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { + async verify(requestParameters: VerifyOperationRequest = {}, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { const response = await this.verifyRaw(requestParameters, initOverrides); return await response.value(); } diff --git a/ui/src/api/apis/AdminApi.ts b/ui/src/api/apis/AdminApi.ts new file mode 100644 index 00000000..92168356 --- /dev/null +++ b/ui/src/api/apis/AdminApi.ts @@ -0,0 +1,544 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * zrok + * zrok client access + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + + +import * as runtime from '../runtime'; +import type { + AddOrganizationMemberRequest, + CreateFrontend201Response, + CreateFrontendRequest, + CreateIdentity201Response, + CreateIdentityRequest, + CreateOrganization201Response, + CreateOrganizationRequest, + InviteTokenGenerateRequest, + ListFrontends200ResponseInner, + ListOrganizationMembers200Response, + ListOrganizations200Response, + LoginRequest, + RegenerateAccountToken200Response, + RemoveOrganizationMemberRequest, + UpdateFrontendRequest, + Verify200Response, +} from '../models/index'; +import { + AddOrganizationMemberRequestFromJSON, + AddOrganizationMemberRequestToJSON, + CreateFrontend201ResponseFromJSON, + CreateFrontend201ResponseToJSON, + CreateFrontendRequestFromJSON, + CreateFrontendRequestToJSON, + CreateIdentity201ResponseFromJSON, + CreateIdentity201ResponseToJSON, + CreateIdentityRequestFromJSON, + CreateIdentityRequestToJSON, + CreateOrganization201ResponseFromJSON, + CreateOrganization201ResponseToJSON, + CreateOrganizationRequestFromJSON, + CreateOrganizationRequestToJSON, + InviteTokenGenerateRequestFromJSON, + InviteTokenGenerateRequestToJSON, + ListFrontends200ResponseInnerFromJSON, + ListFrontends200ResponseInnerToJSON, + ListOrganizationMembers200ResponseFromJSON, + ListOrganizationMembers200ResponseToJSON, + ListOrganizations200ResponseFromJSON, + ListOrganizations200ResponseToJSON, + LoginRequestFromJSON, + LoginRequestToJSON, + RegenerateAccountToken200ResponseFromJSON, + RegenerateAccountToken200ResponseToJSON, + RemoveOrganizationMemberRequestFromJSON, + RemoveOrganizationMemberRequestToJSON, + UpdateFrontendRequestFromJSON, + UpdateFrontendRequestToJSON, + Verify200ResponseFromJSON, + Verify200ResponseToJSON, +} from '../models/index'; + +export interface AddOrganizationMemberOperationRequest { + body?: AddOrganizationMemberRequest; +} + +export interface CreateAccountRequest { + body?: LoginRequest; +} + +export interface CreateFrontendOperationRequest { + body?: CreateFrontendRequest; +} + +export interface CreateIdentityOperationRequest { + body?: CreateIdentityRequest; +} + +export interface CreateOrganizationOperationRequest { + body?: CreateOrganizationRequest; +} + +export interface DeleteFrontendRequest { + body?: CreateFrontend201Response; +} + +export interface DeleteOrganizationRequest { + body?: CreateOrganization201Response; +} + +export interface GrantsRequest { + body?: Verify200Response; +} + +export interface InviteTokenGenerateOperationRequest { + body?: InviteTokenGenerateRequest; +} + +export interface ListOrganizationMembersRequest { + body?: CreateOrganization201Response; +} + +export interface RemoveOrganizationMemberOperationRequest { + body?: RemoveOrganizationMemberRequest; +} + +export interface UpdateFrontendOperationRequest { + body?: UpdateFrontendRequest; +} + +/** + * + */ +export class AdminApi extends runtime.BaseAPI { + + /** + */ + async addOrganizationMemberRaw(requestParameters: AddOrganizationMemberOperationRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + + headerParameters['Content-Type'] = 'application/zrok.v1+json'; + + if (this.configuration && this.configuration.apiKey) { + headerParameters["x-token"] = await this.configuration.apiKey("x-token"); // key authentication + } + + const response = await this.request({ + path: `/organization/add`, + method: 'POST', + headers: headerParameters, + query: queryParameters, + body: AddOrganizationMemberRequestToJSON(requestParameters['body']), + }, initOverrides); + + return new runtime.VoidApiResponse(response); + } + + /** + */ + async addOrganizationMember(requestParameters: AddOrganizationMemberOperationRequest = {}, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { + await this.addOrganizationMemberRaw(requestParameters, initOverrides); + } + + /** + */ + async createAccountRaw(requestParameters: CreateAccountRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + + headerParameters['Content-Type'] = 'application/zrok.v1+json'; + + if (this.configuration && this.configuration.apiKey) { + headerParameters["x-token"] = await this.configuration.apiKey("x-token"); // key authentication + } + + const response = await this.request({ + path: `/account`, + method: 'POST', + headers: headerParameters, + query: queryParameters, + body: LoginRequestToJSON(requestParameters['body']), + }, initOverrides); + + return new runtime.JSONApiResponse(response, (jsonValue) => RegenerateAccountToken200ResponseFromJSON(jsonValue)); + } + + /** + */ + async createAccount(requestParameters: CreateAccountRequest = {}, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { + const response = await this.createAccountRaw(requestParameters, initOverrides); + return await response.value(); + } + + /** + */ + async createFrontendRaw(requestParameters: CreateFrontendOperationRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + + headerParameters['Content-Type'] = 'application/zrok.v1+json'; + + if (this.configuration && this.configuration.apiKey) { + headerParameters["x-token"] = await this.configuration.apiKey("x-token"); // key authentication + } + + const response = await this.request({ + path: `/frontend`, + method: 'POST', + headers: headerParameters, + query: queryParameters, + body: CreateFrontendRequestToJSON(requestParameters['body']), + }, initOverrides); + + return new runtime.JSONApiResponse(response, (jsonValue) => CreateFrontend201ResponseFromJSON(jsonValue)); + } + + /** + */ + async createFrontend(requestParameters: CreateFrontendOperationRequest = {}, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { + const response = await this.createFrontendRaw(requestParameters, initOverrides); + return await response.value(); + } + + /** + */ + async createIdentityRaw(requestParameters: CreateIdentityOperationRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + + headerParameters['Content-Type'] = 'application/zrok.v1+json'; + + if (this.configuration && this.configuration.apiKey) { + headerParameters["x-token"] = await this.configuration.apiKey("x-token"); // key authentication + } + + const response = await this.request({ + path: `/identity`, + method: 'POST', + headers: headerParameters, + query: queryParameters, + body: CreateIdentityRequestToJSON(requestParameters['body']), + }, initOverrides); + + return new runtime.JSONApiResponse(response, (jsonValue) => CreateIdentity201ResponseFromJSON(jsonValue)); + } + + /** + */ + async createIdentity(requestParameters: CreateIdentityOperationRequest = {}, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { + const response = await this.createIdentityRaw(requestParameters, initOverrides); + return await response.value(); + } + + /** + */ + async createOrganizationRaw(requestParameters: CreateOrganizationOperationRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + + headerParameters['Content-Type'] = 'application/zrok.v1+json'; + + if (this.configuration && this.configuration.apiKey) { + headerParameters["x-token"] = await this.configuration.apiKey("x-token"); // key authentication + } + + const response = await this.request({ + path: `/organization`, + method: 'POST', + headers: headerParameters, + query: queryParameters, + body: CreateOrganizationRequestToJSON(requestParameters['body']), + }, initOverrides); + + return new runtime.JSONApiResponse(response, (jsonValue) => CreateOrganization201ResponseFromJSON(jsonValue)); + } + + /** + */ + async createOrganization(requestParameters: CreateOrganizationOperationRequest = {}, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { + const response = await this.createOrganizationRaw(requestParameters, initOverrides); + return await response.value(); + } + + /** + */ + async deleteFrontendRaw(requestParameters: DeleteFrontendRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + + headerParameters['Content-Type'] = 'application/zrok.v1+json'; + + if (this.configuration && this.configuration.apiKey) { + headerParameters["x-token"] = await this.configuration.apiKey("x-token"); // key authentication + } + + const response = await this.request({ + path: `/frontend`, + method: 'DELETE', + headers: headerParameters, + query: queryParameters, + body: CreateFrontend201ResponseToJSON(requestParameters['body']), + }, initOverrides); + + return new runtime.VoidApiResponse(response); + } + + /** + */ + async deleteFrontend(requestParameters: DeleteFrontendRequest = {}, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { + await this.deleteFrontendRaw(requestParameters, initOverrides); + } + + /** + */ + async deleteOrganizationRaw(requestParameters: DeleteOrganizationRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + + headerParameters['Content-Type'] = 'application/zrok.v1+json'; + + if (this.configuration && this.configuration.apiKey) { + headerParameters["x-token"] = await this.configuration.apiKey("x-token"); // key authentication + } + + const response = await this.request({ + path: `/organization`, + method: 'DELETE', + headers: headerParameters, + query: queryParameters, + body: CreateOrganization201ResponseToJSON(requestParameters['body']), + }, initOverrides); + + return new runtime.VoidApiResponse(response); + } + + /** + */ + async deleteOrganization(requestParameters: DeleteOrganizationRequest = {}, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { + await this.deleteOrganizationRaw(requestParameters, initOverrides); + } + + /** + */ + async grantsRaw(requestParameters: GrantsRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + + headerParameters['Content-Type'] = 'application/zrok.v1+json'; + + if (this.configuration && this.configuration.apiKey) { + headerParameters["x-token"] = await this.configuration.apiKey("x-token"); // key authentication + } + + const response = await this.request({ + path: `/grants`, + method: 'POST', + headers: headerParameters, + query: queryParameters, + body: Verify200ResponseToJSON(requestParameters['body']), + }, initOverrides); + + return new runtime.VoidApiResponse(response); + } + + /** + */ + async grants(requestParameters: GrantsRequest = {}, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { + await this.grantsRaw(requestParameters, initOverrides); + } + + /** + */ + async inviteTokenGenerateRaw(requestParameters: InviteTokenGenerateOperationRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + + headerParameters['Content-Type'] = 'application/zrok.v1+json'; + + if (this.configuration && this.configuration.apiKey) { + headerParameters["x-token"] = await this.configuration.apiKey("x-token"); // key authentication + } + + const response = await this.request({ + path: `/invite/token/generate`, + method: 'POST', + headers: headerParameters, + query: queryParameters, + body: InviteTokenGenerateRequestToJSON(requestParameters['body']), + }, initOverrides); + + return new runtime.VoidApiResponse(response); + } + + /** + */ + async inviteTokenGenerate(requestParameters: InviteTokenGenerateOperationRequest = {}, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { + await this.inviteTokenGenerateRaw(requestParameters, initOverrides); + } + + /** + */ + async listFrontendsRaw(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise>> { + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + + if (this.configuration && this.configuration.apiKey) { + headerParameters["x-token"] = await this.configuration.apiKey("x-token"); // key authentication + } + + const response = await this.request({ + path: `/frontends`, + method: 'GET', + headers: headerParameters, + query: queryParameters, + }, initOverrides); + + return new runtime.JSONApiResponse(response, (jsonValue) => jsonValue.map(ListFrontends200ResponseInnerFromJSON)); + } + + /** + */ + async listFrontends(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { + const response = await this.listFrontendsRaw(initOverrides); + return await response.value(); + } + + /** + */ + async listOrganizationMembersRaw(requestParameters: ListOrganizationMembersRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + + headerParameters['Content-Type'] = 'application/zrok.v1+json'; + + if (this.configuration && this.configuration.apiKey) { + headerParameters["x-token"] = await this.configuration.apiKey("x-token"); // key authentication + } + + const response = await this.request({ + path: `/organization/list`, + method: 'POST', + headers: headerParameters, + query: queryParameters, + body: CreateOrganization201ResponseToJSON(requestParameters['body']), + }, initOverrides); + + return new runtime.JSONApiResponse(response, (jsonValue) => ListOrganizationMembers200ResponseFromJSON(jsonValue)); + } + + /** + */ + async listOrganizationMembers(requestParameters: ListOrganizationMembersRequest = {}, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { + const response = await this.listOrganizationMembersRaw(requestParameters, initOverrides); + return await response.value(); + } + + /** + */ + async listOrganizationsRaw(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + + if (this.configuration && this.configuration.apiKey) { + headerParameters["x-token"] = await this.configuration.apiKey("x-token"); // key authentication + } + + const response = await this.request({ + path: `/organizations`, + method: 'GET', + headers: headerParameters, + query: queryParameters, + }, initOverrides); + + return new runtime.JSONApiResponse(response, (jsonValue) => ListOrganizations200ResponseFromJSON(jsonValue)); + } + + /** + */ + async listOrganizations(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { + const response = await this.listOrganizationsRaw(initOverrides); + return await response.value(); + } + + /** + */ + async removeOrganizationMemberRaw(requestParameters: RemoveOrganizationMemberOperationRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + + headerParameters['Content-Type'] = 'application/zrok.v1+json'; + + if (this.configuration && this.configuration.apiKey) { + headerParameters["x-token"] = await this.configuration.apiKey("x-token"); // key authentication + } + + const response = await this.request({ + path: `/organization/remove`, + method: 'POST', + headers: headerParameters, + query: queryParameters, + body: RemoveOrganizationMemberRequestToJSON(requestParameters['body']), + }, initOverrides); + + return new runtime.VoidApiResponse(response); + } + + /** + */ + async removeOrganizationMember(requestParameters: RemoveOrganizationMemberOperationRequest = {}, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { + await this.removeOrganizationMemberRaw(requestParameters, initOverrides); + } + + /** + */ + async updateFrontendRaw(requestParameters: UpdateFrontendOperationRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + + headerParameters['Content-Type'] = 'application/zrok.v1+json'; + + if (this.configuration && this.configuration.apiKey) { + headerParameters["x-token"] = await this.configuration.apiKey("x-token"); // key authentication + } + + const response = await this.request({ + path: `/frontend`, + method: 'PATCH', + headers: headerParameters, + query: queryParameters, + body: UpdateFrontendRequestToJSON(requestParameters['body']), + }, initOverrides); + + return new runtime.VoidApiResponse(response); + } + + /** + */ + async updateFrontend(requestParameters: UpdateFrontendOperationRequest = {}, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { + await this.updateFrontendRaw(requestParameters, initOverrides); + } + +} diff --git a/sdk/nodejs/sdk/src/zrok/api/apis/EnvironmentApi.ts b/ui/src/api/apis/EnvironmentApi.ts similarity index 80% rename from sdk/nodejs/sdk/src/zrok/api/apis/EnvironmentApi.ts rename to ui/src/api/apis/EnvironmentApi.ts index 80f923e9..1e2cf366 100644 --- a/sdk/nodejs/sdk/src/zrok/api/apis/EnvironmentApi.ts +++ b/ui/src/api/apis/EnvironmentApi.ts @@ -4,7 +4,7 @@ * zrok * zrok client access * - * The version of the OpenAPI document: 0.3.0 + * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). @@ -15,17 +15,17 @@ import * as runtime from '../runtime'; import type { + CreateIdentity201Response, DisableRequest, EnableRequest, - EnableResponse, } from '../models/index'; import { + CreateIdentity201ResponseFromJSON, + CreateIdentity201ResponseToJSON, DisableRequestFromJSON, DisableRequestToJSON, EnableRequestFromJSON, EnableRequestToJSON, - EnableResponseFromJSON, - EnableResponseToJSON, } from '../models/index'; export interface DisableOperationRequest { @@ -51,7 +51,7 @@ export class EnvironmentApi extends runtime.BaseAPI { headerParameters['Content-Type'] = 'application/zrok.v1+json'; if (this.configuration && this.configuration.apiKey) { - headerParameters["x-token"] = this.configuration.apiKey("x-token"); // key authentication + headerParameters["x-token"] = await this.configuration.apiKey("x-token"); // key authentication } const response = await this.request({ @@ -59,7 +59,7 @@ export class EnvironmentApi extends runtime.BaseAPI { method: 'POST', headers: headerParameters, query: queryParameters, - body: DisableRequestToJSON(requestParameters.body), + body: DisableRequestToJSON(requestParameters['body']), }, initOverrides); return new runtime.VoidApiResponse(response); @@ -73,7 +73,7 @@ export class EnvironmentApi extends runtime.BaseAPI { /** */ - async enableRaw(requestParameters: EnableOperationRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { + async enableRaw(requestParameters: EnableOperationRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { const queryParameters: any = {}; const headerParameters: runtime.HTTPHeaders = {}; @@ -81,7 +81,7 @@ export class EnvironmentApi extends runtime.BaseAPI { headerParameters['Content-Type'] = 'application/zrok.v1+json'; if (this.configuration && this.configuration.apiKey) { - headerParameters["x-token"] = this.configuration.apiKey("x-token"); // key authentication + headerParameters["x-token"] = await this.configuration.apiKey("x-token"); // key authentication } const response = await this.request({ @@ -89,15 +89,15 @@ export class EnvironmentApi extends runtime.BaseAPI { method: 'POST', headers: headerParameters, query: queryParameters, - body: EnableRequestToJSON(requestParameters.body), + body: EnableRequestToJSON(requestParameters['body']), }, initOverrides); - return new runtime.JSONApiResponse(response, (jsonValue) => EnableResponseFromJSON(jsonValue)); + return new runtime.JSONApiResponse(response, (jsonValue) => CreateIdentity201ResponseFromJSON(jsonValue)); } /** */ - async enable(requestParameters: EnableOperationRequest = {}, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { + async enable(requestParameters: EnableOperationRequest = {}, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { const response = await this.enableRaw(requestParameters, initOverrides); return await response.value(); } diff --git a/sdk/nodejs/sdk/src/zrok/api/apis/MetadataApi.ts b/ui/src/api/apis/MetadataApi.ts similarity index 50% rename from sdk/nodejs/sdk/src/zrok/api/apis/MetadataApi.ts rename to ui/src/api/apis/MetadataApi.ts index 49e3ec35..29b8fb2d 100644 --- a/sdk/nodejs/sdk/src/zrok/api/apis/MetadataApi.ts +++ b/ui/src/api/apis/MetadataApi.ts @@ -4,7 +4,7 @@ * zrok * zrok client access * - * The version of the OpenAPI document: 0.3.0 + * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). @@ -15,21 +15,36 @@ import * as runtime from '../runtime'; import type { + ClientVersionCheckRequest, Environment, EnvironmentAndResources, Frontend, + GetSparklines200Response, + GetSparklinesRequest, + ListMemberships200Response, + ListOrganizationMembers200Response, Metrics, ModelConfiguration, Overview, Share, } from '../models/index'; import { + ClientVersionCheckRequestFromJSON, + ClientVersionCheckRequestToJSON, EnvironmentFromJSON, EnvironmentToJSON, EnvironmentAndResourcesFromJSON, EnvironmentAndResourcesToJSON, FrontendFromJSON, FrontendToJSON, + GetSparklines200ResponseFromJSON, + GetSparklines200ResponseToJSON, + GetSparklinesRequestFromJSON, + GetSparklinesRequestToJSON, + ListMemberships200ResponseFromJSON, + ListMemberships200ResponseToJSON, + ListOrganizationMembers200ResponseFromJSON, + ListOrganizationMembers200ResponseToJSON, MetricsFromJSON, MetricsToJSON, ModelConfigurationFromJSON, @@ -40,6 +55,10 @@ import { ShareToJSON, } from '../models/index'; +export interface ClientVersionCheckOperationRequest { + body?: ClientVersionCheckRequest; +} + export interface GetAccountMetricsRequest { duration?: string; } @@ -54,18 +73,31 @@ export interface GetEnvironmentMetricsRequest { } export interface GetFrontendDetailRequest { - feId: number; + frontendId: number; } export interface GetShareDetailRequest { - shrToken: string; + shareToken: string; } export interface GetShareMetricsRequest { - shrToken: string; + shareToken: string; duration?: string; } +export interface GetSparklinesOperationRequest { + body?: GetSparklinesRequest; +} + +export interface ListOrgMembersRequest { + organizationToken: string; +} + +export interface OrgAccountOverviewRequest { + organizationToken: string; + accountEmail: string; +} + /** * */ @@ -95,6 +127,32 @@ export class MetadataApi extends runtime.BaseAPI { return await response.value(); } + /** + */ + async clientVersionCheckRaw(requestParameters: ClientVersionCheckOperationRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + + headerParameters['Content-Type'] = 'application/zrok.v1+json'; + + const response = await this.request({ + path: `/version`, + method: 'POST', + headers: headerParameters, + query: queryParameters, + body: ClientVersionCheckRequestToJSON(requestParameters['body']), + }, initOverrides); + + return new runtime.VoidApiResponse(response); + } + + /** + */ + async clientVersionCheck(requestParameters: ClientVersionCheckOperationRequest = {}, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { + await this.clientVersionCheckRaw(requestParameters, initOverrides); + } + /** */ async getAccountDetailRaw(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise>> { @@ -103,7 +161,7 @@ export class MetadataApi extends runtime.BaseAPI { const headerParameters: runtime.HTTPHeaders = {}; if (this.configuration && this.configuration.apiKey) { - headerParameters["x-token"] = this.configuration.apiKey("x-token"); // key authentication + headerParameters["x-token"] = await this.configuration.apiKey("x-token"); // key authentication } const response = await this.request({ @@ -128,14 +186,14 @@ export class MetadataApi extends runtime.BaseAPI { async getAccountMetricsRaw(requestParameters: GetAccountMetricsRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { const queryParameters: any = {}; - if (requestParameters.duration !== undefined) { - queryParameters['duration'] = requestParameters.duration; + if (requestParameters['duration'] != null) { + queryParameters['duration'] = requestParameters['duration']; } const headerParameters: runtime.HTTPHeaders = {}; if (this.configuration && this.configuration.apiKey) { - headerParameters["x-token"] = this.configuration.apiKey("x-token"); // key authentication + headerParameters["x-token"] = await this.configuration.apiKey("x-token"); // key authentication } const response = await this.request({ @@ -158,8 +216,11 @@ export class MetadataApi extends runtime.BaseAPI { /** */ async getEnvironmentDetailRaw(requestParameters: GetEnvironmentDetailRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { - if (requestParameters.envZId === null || requestParameters.envZId === undefined) { - throw new runtime.RequiredError('envZId','Required parameter requestParameters.envZId was null or undefined when calling getEnvironmentDetail.'); + if (requestParameters['envZId'] == null) { + throw new runtime.RequiredError( + 'envZId', + 'Required parameter "envZId" was null or undefined when calling getEnvironmentDetail().' + ); } const queryParameters: any = {}; @@ -167,11 +228,11 @@ export class MetadataApi extends runtime.BaseAPI { const headerParameters: runtime.HTTPHeaders = {}; if (this.configuration && this.configuration.apiKey) { - headerParameters["x-token"] = this.configuration.apiKey("x-token"); // key authentication + headerParameters["x-token"] = await this.configuration.apiKey("x-token"); // key authentication } const response = await this.request({ - path: `/detail/environment/{envZId}`.replace(`{${"envZId"}}`, encodeURIComponent(String(requestParameters.envZId))), + path: `/detail/environment/{envZId}`.replace(`{${"envZId"}}`, encodeURIComponent(String(requestParameters['envZId']))), method: 'GET', headers: headerParameters, query: queryParameters, @@ -190,24 +251,27 @@ export class MetadataApi extends runtime.BaseAPI { /** */ async getEnvironmentMetricsRaw(requestParameters: GetEnvironmentMetricsRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { - if (requestParameters.envId === null || requestParameters.envId === undefined) { - throw new runtime.RequiredError('envId','Required parameter requestParameters.envId was null or undefined when calling getEnvironmentMetrics.'); + if (requestParameters['envId'] == null) { + throw new runtime.RequiredError( + 'envId', + 'Required parameter "envId" was null or undefined when calling getEnvironmentMetrics().' + ); } const queryParameters: any = {}; - if (requestParameters.duration !== undefined) { - queryParameters['duration'] = requestParameters.duration; + if (requestParameters['duration'] != null) { + queryParameters['duration'] = requestParameters['duration']; } const headerParameters: runtime.HTTPHeaders = {}; if (this.configuration && this.configuration.apiKey) { - headerParameters["x-token"] = this.configuration.apiKey("x-token"); // key authentication + headerParameters["x-token"] = await this.configuration.apiKey("x-token"); // key authentication } const response = await this.request({ - path: `/metrics/environment/{envId}`.replace(`{${"envId"}}`, encodeURIComponent(String(requestParameters.envId))), + path: `/metrics/environment/{envId}`.replace(`{${"envId"}}`, encodeURIComponent(String(requestParameters['envId']))), method: 'GET', headers: headerParameters, query: queryParameters, @@ -226,8 +290,11 @@ export class MetadataApi extends runtime.BaseAPI { /** */ async getFrontendDetailRaw(requestParameters: GetFrontendDetailRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { - if (requestParameters.feId === null || requestParameters.feId === undefined) { - throw new runtime.RequiredError('feId','Required parameter requestParameters.feId was null or undefined when calling getFrontendDetail.'); + if (requestParameters['frontendId'] == null) { + throw new runtime.RequiredError( + 'frontendId', + 'Required parameter "frontendId" was null or undefined when calling getFrontendDetail().' + ); } const queryParameters: any = {}; @@ -235,11 +302,11 @@ export class MetadataApi extends runtime.BaseAPI { const headerParameters: runtime.HTTPHeaders = {}; if (this.configuration && this.configuration.apiKey) { - headerParameters["x-token"] = this.configuration.apiKey("x-token"); // key authentication + headerParameters["x-token"] = await this.configuration.apiKey("x-token"); // key authentication } const response = await this.request({ - path: `/detail/frontend/{feId}`.replace(`{${"feId"}}`, encodeURIComponent(String(requestParameters.feId))), + path: `/detail/frontend/{frontendId}`.replace(`{${"frontendId"}}`, encodeURIComponent(String(requestParameters['frontendId']))), method: 'GET', headers: headerParameters, query: queryParameters, @@ -258,8 +325,11 @@ export class MetadataApi extends runtime.BaseAPI { /** */ async getShareDetailRaw(requestParameters: GetShareDetailRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { - if (requestParameters.shrToken === null || requestParameters.shrToken === undefined) { - throw new runtime.RequiredError('shrToken','Required parameter requestParameters.shrToken was null or undefined when calling getShareDetail.'); + if (requestParameters['shareToken'] == null) { + throw new runtime.RequiredError( + 'shareToken', + 'Required parameter "shareToken" was null or undefined when calling getShareDetail().' + ); } const queryParameters: any = {}; @@ -267,11 +337,11 @@ export class MetadataApi extends runtime.BaseAPI { const headerParameters: runtime.HTTPHeaders = {}; if (this.configuration && this.configuration.apiKey) { - headerParameters["x-token"] = this.configuration.apiKey("x-token"); // key authentication + headerParameters["x-token"] = await this.configuration.apiKey("x-token"); // key authentication } const response = await this.request({ - path: `/detail/share/{shrToken}`.replace(`{${"shrToken"}}`, encodeURIComponent(String(requestParameters.shrToken))), + path: `/detail/share/{shareToken}`.replace(`{${"shareToken"}}`, encodeURIComponent(String(requestParameters['shareToken']))), method: 'GET', headers: headerParameters, query: queryParameters, @@ -290,24 +360,27 @@ export class MetadataApi extends runtime.BaseAPI { /** */ async getShareMetricsRaw(requestParameters: GetShareMetricsRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { - if (requestParameters.shrToken === null || requestParameters.shrToken === undefined) { - throw new runtime.RequiredError('shrToken','Required parameter requestParameters.shrToken was null or undefined when calling getShareMetrics.'); + if (requestParameters['shareToken'] == null) { + throw new runtime.RequiredError( + 'shareToken', + 'Required parameter "shareToken" was null or undefined when calling getShareMetrics().' + ); } const queryParameters: any = {}; - if (requestParameters.duration !== undefined) { - queryParameters['duration'] = requestParameters.duration; + if (requestParameters['duration'] != null) { + queryParameters['duration'] = requestParameters['duration']; } const headerParameters: runtime.HTTPHeaders = {}; if (this.configuration && this.configuration.apiKey) { - headerParameters["x-token"] = this.configuration.apiKey("x-token"); // key authentication + headerParameters["x-token"] = await this.configuration.apiKey("x-token"); // key authentication } const response = await this.request({ - path: `/metrics/share/{shrToken}`.replace(`{${"shrToken"}}`, encodeURIComponent(String(requestParameters.shrToken))), + path: `/metrics/share/{shareToken}`.replace(`{${"shareToken"}}`, encodeURIComponent(String(requestParameters['shareToken']))), method: 'GET', headers: headerParameters, query: queryParameters, @@ -323,6 +396,142 @@ export class MetadataApi extends runtime.BaseAPI { return await response.value(); } + /** + */ + async getSparklinesRaw(requestParameters: GetSparklinesOperationRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + + headerParameters['Content-Type'] = 'application/zrok.v1+json'; + + if (this.configuration && this.configuration.apiKey) { + headerParameters["x-token"] = await this.configuration.apiKey("x-token"); // key authentication + } + + const response = await this.request({ + path: `/sparklines`, + method: 'POST', + headers: headerParameters, + query: queryParameters, + body: GetSparklinesRequestToJSON(requestParameters['body']), + }, initOverrides); + + return new runtime.JSONApiResponse(response, (jsonValue) => GetSparklines200ResponseFromJSON(jsonValue)); + } + + /** + */ + async getSparklines(requestParameters: GetSparklinesOperationRequest = {}, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { + const response = await this.getSparklinesRaw(requestParameters, initOverrides); + return await response.value(); + } + + /** + */ + async listMembershipsRaw(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + + if (this.configuration && this.configuration.apiKey) { + headerParameters["x-token"] = await this.configuration.apiKey("x-token"); // key authentication + } + + const response = await this.request({ + path: `/memberships`, + method: 'GET', + headers: headerParameters, + query: queryParameters, + }, initOverrides); + + return new runtime.JSONApiResponse(response, (jsonValue) => ListMemberships200ResponseFromJSON(jsonValue)); + } + + /** + */ + async listMemberships(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { + const response = await this.listMembershipsRaw(initOverrides); + return await response.value(); + } + + /** + */ + async listOrgMembersRaw(requestParameters: ListOrgMembersRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { + if (requestParameters['organizationToken'] == null) { + throw new runtime.RequiredError( + 'organizationToken', + 'Required parameter "organizationToken" was null or undefined when calling listOrgMembers().' + ); + } + + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + + if (this.configuration && this.configuration.apiKey) { + headerParameters["x-token"] = await this.configuration.apiKey("x-token"); // key authentication + } + + const response = await this.request({ + path: `/members/{organizationToken}`.replace(`{${"organizationToken"}}`, encodeURIComponent(String(requestParameters['organizationToken']))), + method: 'GET', + headers: headerParameters, + query: queryParameters, + }, initOverrides); + + return new runtime.JSONApiResponse(response, (jsonValue) => ListOrganizationMembers200ResponseFromJSON(jsonValue)); + } + + /** + */ + async listOrgMembers(requestParameters: ListOrgMembersRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { + const response = await this.listOrgMembersRaw(requestParameters, initOverrides); + return await response.value(); + } + + /** + */ + async orgAccountOverviewRaw(requestParameters: OrgAccountOverviewRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { + if (requestParameters['organizationToken'] == null) { + throw new runtime.RequiredError( + 'organizationToken', + 'Required parameter "organizationToken" was null or undefined when calling orgAccountOverview().' + ); + } + + if (requestParameters['accountEmail'] == null) { + throw new runtime.RequiredError( + 'accountEmail', + 'Required parameter "accountEmail" was null or undefined when calling orgAccountOverview().' + ); + } + + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + + if (this.configuration && this.configuration.apiKey) { + headerParameters["x-token"] = await this.configuration.apiKey("x-token"); // key authentication + } + + const response = await this.request({ + path: `/overview/{organizationToken}/{accountEmail}`.replace(`{${"organizationToken"}}`, encodeURIComponent(String(requestParameters['organizationToken']))).replace(`{${"accountEmail"}}`, encodeURIComponent(String(requestParameters['accountEmail']))), + method: 'GET', + headers: headerParameters, + query: queryParameters, + }, initOverrides); + + return new runtime.JSONApiResponse(response, (jsonValue) => OverviewFromJSON(jsonValue)); + } + + /** + */ + async orgAccountOverview(requestParameters: OrgAccountOverviewRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { + const response = await this.orgAccountOverviewRaw(requestParameters, initOverrides); + return await response.value(); + } + /** */ async overviewRaw(initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { @@ -331,7 +540,7 @@ export class MetadataApi extends runtime.BaseAPI { const headerParameters: runtime.HTTPHeaders = {}; if (this.configuration && this.configuration.apiKey) { - headerParameters["x-token"] = this.configuration.apiKey("x-token"); // key authentication + headerParameters["x-token"] = await this.configuration.apiKey("x-token"); // key authentication } const response = await this.request({ diff --git a/sdk/nodejs/sdk/src/zrok/api/apis/ShareApi.ts b/ui/src/api/apis/ShareApi.ts similarity index 71% rename from sdk/nodejs/sdk/src/zrok/api/apis/ShareApi.ts rename to ui/src/api/apis/ShareApi.ts index 16cfce4d..67811acb 100644 --- a/sdk/nodejs/sdk/src/zrok/api/apis/ShareApi.ts +++ b/ui/src/api/apis/ShareApi.ts @@ -4,7 +4,7 @@ * zrok * zrok client access * - * The version of the OpenAPI document: 0.3.0 + * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). @@ -15,19 +15,20 @@ import * as runtime from '../runtime'; import type { + Access201Response, AccessRequest, - AccessResponse, ShareRequest, ShareResponse, UnaccessRequest, UnshareRequest, + UpdateAccessRequest, UpdateShareRequest, } from '../models/index'; import { + Access201ResponseFromJSON, + Access201ResponseToJSON, AccessRequestFromJSON, AccessRequestToJSON, - AccessResponseFromJSON, - AccessResponseToJSON, ShareRequestFromJSON, ShareRequestToJSON, ShareResponseFromJSON, @@ -36,6 +37,8 @@ import { UnaccessRequestToJSON, UnshareRequestFromJSON, UnshareRequestToJSON, + UpdateAccessRequestFromJSON, + UpdateAccessRequestToJSON, UpdateShareRequestFromJSON, UpdateShareRequestToJSON, } from '../models/index'; @@ -56,6 +59,10 @@ export interface UnshareOperationRequest { body?: UnshareRequest; } +export interface UpdateAccessOperationRequest { + body?: UpdateAccessRequest; +} + export interface UpdateShareOperationRequest { body?: UpdateShareRequest; } @@ -67,7 +74,7 @@ export class ShareApi extends runtime.BaseAPI { /** */ - async accessRaw(requestParameters: AccessOperationRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { + async accessRaw(requestParameters: AccessOperationRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { const queryParameters: any = {}; const headerParameters: runtime.HTTPHeaders = {}; @@ -75,7 +82,7 @@ export class ShareApi extends runtime.BaseAPI { headerParameters['Content-Type'] = 'application/zrok.v1+json'; if (this.configuration && this.configuration.apiKey) { - headerParameters["x-token"] = this.configuration.apiKey("x-token"); // key authentication + headerParameters["x-token"] = await this.configuration.apiKey("x-token"); // key authentication } const response = await this.request({ @@ -83,15 +90,15 @@ export class ShareApi extends runtime.BaseAPI { method: 'POST', headers: headerParameters, query: queryParameters, - body: AccessRequestToJSON(requestParameters.body), + body: AccessRequestToJSON(requestParameters['body']), }, initOverrides); - return new runtime.JSONApiResponse(response, (jsonValue) => AccessResponseFromJSON(jsonValue)); + return new runtime.JSONApiResponse(response, (jsonValue) => Access201ResponseFromJSON(jsonValue)); } /** */ - async access(requestParameters: AccessOperationRequest = {}, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { + async access(requestParameters: AccessOperationRequest = {}, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { const response = await this.accessRaw(requestParameters, initOverrides); return await response.value(); } @@ -106,7 +113,7 @@ export class ShareApi extends runtime.BaseAPI { headerParameters['Content-Type'] = 'application/zrok.v1+json'; if (this.configuration && this.configuration.apiKey) { - headerParameters["x-token"] = this.configuration.apiKey("x-token"); // key authentication + headerParameters["x-token"] = await this.configuration.apiKey("x-token"); // key authentication } const response = await this.request({ @@ -114,7 +121,7 @@ export class ShareApi extends runtime.BaseAPI { method: 'POST', headers: headerParameters, query: queryParameters, - body: ShareRequestToJSON(requestParameters.body), + body: ShareRequestToJSON(requestParameters['body']), }, initOverrides); return new runtime.JSONApiResponse(response, (jsonValue) => ShareResponseFromJSON(jsonValue)); @@ -137,7 +144,7 @@ export class ShareApi extends runtime.BaseAPI { headerParameters['Content-Type'] = 'application/zrok.v1+json'; if (this.configuration && this.configuration.apiKey) { - headerParameters["x-token"] = this.configuration.apiKey("x-token"); // key authentication + headerParameters["x-token"] = await this.configuration.apiKey("x-token"); // key authentication } const response = await this.request({ @@ -145,7 +152,7 @@ export class ShareApi extends runtime.BaseAPI { method: 'DELETE', headers: headerParameters, query: queryParameters, - body: UnaccessRequestToJSON(requestParameters.body), + body: UnaccessRequestToJSON(requestParameters['body']), }, initOverrides); return new runtime.VoidApiResponse(response); @@ -167,7 +174,7 @@ export class ShareApi extends runtime.BaseAPI { headerParameters['Content-Type'] = 'application/zrok.v1+json'; if (this.configuration && this.configuration.apiKey) { - headerParameters["x-token"] = this.configuration.apiKey("x-token"); // key authentication + headerParameters["x-token"] = await this.configuration.apiKey("x-token"); // key authentication } const response = await this.request({ @@ -175,7 +182,7 @@ export class ShareApi extends runtime.BaseAPI { method: 'DELETE', headers: headerParameters, query: queryParameters, - body: UnshareRequestToJSON(requestParameters.body), + body: UnshareRequestToJSON(requestParameters['body']), }, initOverrides); return new runtime.VoidApiResponse(response); @@ -187,6 +194,36 @@ export class ShareApi extends runtime.BaseAPI { await this.unshareRaw(requestParameters, initOverrides); } + /** + */ + async updateAccessRaw(requestParameters: UpdateAccessOperationRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { + const queryParameters: any = {}; + + const headerParameters: runtime.HTTPHeaders = {}; + + headerParameters['Content-Type'] = 'application/zrok.v1+json'; + + if (this.configuration && this.configuration.apiKey) { + headerParameters["x-token"] = await this.configuration.apiKey("x-token"); // key authentication + } + + const response = await this.request({ + path: `/access`, + method: 'PATCH', + headers: headerParameters, + query: queryParameters, + body: UpdateAccessRequestToJSON(requestParameters['body']), + }, initOverrides); + + return new runtime.VoidApiResponse(response); + } + + /** + */ + async updateAccess(requestParameters: UpdateAccessOperationRequest = {}, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise { + await this.updateAccessRaw(requestParameters, initOverrides); + } + /** */ async updateShareRaw(requestParameters: UpdateShareOperationRequest, initOverrides?: RequestInit | runtime.InitOverrideFunction): Promise> { @@ -197,7 +234,7 @@ export class ShareApi extends runtime.BaseAPI { headerParameters['Content-Type'] = 'application/zrok.v1+json'; if (this.configuration && this.configuration.apiKey) { - headerParameters["x-token"] = this.configuration.apiKey("x-token"); // key authentication + headerParameters["x-token"] = await this.configuration.apiKey("x-token"); // key authentication } const response = await this.request({ @@ -205,7 +242,7 @@ export class ShareApi extends runtime.BaseAPI { method: 'PATCH', headers: headerParameters, query: queryParameters, - body: UpdateShareRequestToJSON(requestParameters.body), + body: UpdateShareRequestToJSON(requestParameters['body']), }, initOverrides); return new runtime.VoidApiResponse(response); diff --git a/sdk/nodejs/sdk/src/zrok/api/apis/index.ts b/ui/src/api/apis/index.ts similarity index 100% rename from sdk/nodejs/sdk/src/zrok/api/apis/index.ts rename to ui/src/api/apis/index.ts diff --git a/ui/src/api/environment.js b/ui/src/api/environment.js deleted file mode 100644 index 99c503cc..00000000 --- a/ui/src/api/environment.js +++ /dev/null @@ -1,55 +0,0 @@ -/** @module environment */ -// Auto-generated, edits will be overwritten -import * as gateway from './gateway' - -/** - * @param {object} options Optional options - * @param {module:types.enableRequest} [options.body] - * @return {Promise} environment enabled - */ -export function enable(options) { - if (!options) options = {} - const parameters = { - body: { - body: options.body - } - } - return gateway.request(enableOperation, parameters) -} - -/** - * @param {object} options Optional options - * @param {module:types.disableRequest} [options.body] - * @return {Promise} environment disabled - */ -export function disable(options) { - if (!options) options = {} - const parameters = { - body: { - body: options.body - } - } - return gateway.request(disableOperation, parameters) -} - -const enableOperation = { - path: '/enable', - contentTypes: ['application/zrok.v1+json'], - method: 'post', - security: [ - { - id: 'key' - } - ] -} - -const disableOperation = { - path: '/disable', - contentTypes: ['application/zrok.v1+json'], - method: 'post', - security: [ - { - id: 'key' - } - ] -} diff --git a/ui/src/api/gateway/index.js b/ui/src/api/gateway/index.js deleted file mode 100644 index 881798d7..00000000 --- a/ui/src/api/gateway/index.js +++ /dev/null @@ -1,281 +0,0 @@ -// Auto-generated, edits will be overwritten -import spec from './spec' - -export class ServiceError extends Error {} - -let options = {} - -export function init(serviceOptions) { - options = serviceOptions -} - -export function request(op, parameters, attempt) { - if (!attempt) attempt = 1; - return acquireRights(op, spec, options) - .then(rights => { - parameters = parameters || {} - const baseUrl = getBaseUrl(spec) - let reqInfo = { parameters, baseUrl } - if (options.processRequest) { - reqInfo = options.processRequest(op, reqInfo) - } - const req = buildRequest(op, reqInfo.baseUrl, reqInfo.parameters, rights) - return makeFetchRequest(req) - .then(res => processResponse(req, res, attempt, options), e => processError(req, e)) - .then(outcome => outcome.retry ? request(op, parameters, attempt + 1) : outcome.res) - }) -} - -function acquireRights(op, spec, options) { - if (op.security && options.getAuthorization) { - return op.security.reduce((promise, security) => { - return promise.then(rights => { - const securityDefinition = spec.securityDefinitions[security.id] - return options.getAuthorization(security, securityDefinition, op) - .then(auth => { - rights[security.id] = auth - return rights - }) - }) - }, Promise.resolve({})) - } - return Promise.resolve({}) -} - -function makeFetchRequest(req) { - let fetchOptions = { - compress: true, - method: (req.method || 'get').toUpperCase(), - headers: req.headers, - body: req.body ? JSON.stringify(req.body) : undefined - } - - if (options.fetchOptions) { - const opts = options.fetchOptions - const headers = opts.headers - ? Object.assign(fetchOptions.headers, opts.headers) - : fetchOptions.headers - - fetchOptions = Object.assign({}, fetchOptions, opts) - fetchOptions.headers = headers - } - - let promise = fetch(req.url, fetchOptions) - return promise -} - -function buildRequest(op, baseUrl, parameters, rights) { - let paramGroups = groupParams(op, parameters) - paramGroups = applyAuthorization(paramGroups, rights, spec) - const url = buildUrl(op, baseUrl, paramGroups, spec) - const headers = buildHeaders(op, paramGroups) - const body = buildBody(parameters.body) - return { - method: op.method, - url, - headers, - body - } -} - -function groupParams(op, parameters) { - const groups = ['header', 'path', 'query', 'formData'].reduce((groups, name) => { - groups[name] = formatParamsGroup(groups[name]) - return groups - }, parameters) - if (!groups.header) groups.header = {} - return groups -} - -function formatParamsGroup(groups) { - return Object.keys(groups || {}).reduce((g, name) => { - const param = groups[name] - if (param !== undefined) { - g[name] = formatParam(param) - } - return g - }, {}) -} - -function formatParam(param) { - if (param === undefined || param === null) return '' - else if (param instanceof Date) return param.toJSON() - else if (Array.isArray(param)) return param - else return param.toString() -} - -function buildUrl(op, baseUrl, parameters, spec) { - let url = `${baseUrl}${op.path}` - if (parameters.path) { - url = Object.keys(parameters.path) - .reduce((url, name) => url.replace(`{${name}}`, parameters.path[name]), url) - } - const query = createQueryString(parameters.query) - return url + query -} - -function getBaseUrl(spec) { - return options.url || `${spec.schemes[0] || 'https'}://${spec.host}${spec.basePath}` -} - -function createQueryParam(name, value) { - const v = formatParam(value) - if (v && typeof v === 'string') return `${name}=${encodeURIComponent(v)}` - return name; -} - -function createQueryString(query) { - const names = Object.keys(query || {}) - if (!names.length) return '' - const params = names.map(name => ({name, value: query[name]})) - .reduce((acc, value) => { - if (Array.isArray(value.value)) { - return acc.concat(value.value) - } else { - acc.push(createQueryParam(value.name, value.value)) - return acc - } - }, []) - return '?' + params.sort().join('&') -} - -function buildHeaders(op, parameters) { - const headers = {} - - let accepts - if (op.accepts && op.accepts.length) accepts = op.accepts - else if (spec.accepts && spec.accepts.length) accepts = spec.accepts - else accepts = [ 'application/json' ] - - headers.Accept = accepts.join(', ') - - let contentType - if (op.contentTypes && op.contentTypes[0]) contentType = op.contentTypes[0] - else if (spec.contentTypes && spec.contentTypes[0]) contentType = spec.contentTypes[0] - if (contentType) headers['Content-Type'] = contentType - - return Object.assign(headers, parameters.header) -} - -function buildBody(bodyParams) { - if (bodyParams) { - if (bodyParams.body) return bodyParams.body - const key = Object.keys(bodyParams)[0] - if (key) return bodyParams[key] - } - return undefined -} - -function resolveAuthHeaderName(headerName){ - if (options.authorizationHeader && headerName.toLowerCase() === 'authorization') { - return options.authorizationHeader - } else { - return headerName - } -} - -function applyAuthorization(req, rights, spec) { - Object.keys(rights).forEach(name => { - const rightsInfo = rights[name] - const definition = spec.securityDefinitions[name] - switch (definition.type) { - case 'basic': - const creds = `${rightsInfo.username}:${rightsInfo.password}` - const token = (typeof window !== 'undefined' && window.btoa) - ? window.btoa(creds) - : new Buffer(creds).toString('base64') - req.header[resolveAuthHeaderName('Authorization')] = `Basic ${token}` - break - case 'oauth2': - req.header[resolveAuthHeaderName('Authorization')] = `Bearer ${rightsInfo.token}` - break - case 'apiKey': - if (definition.in === 'header') { - req.header[resolveAuthHeaderName(definition.name)] = rightsInfo.apiKey - } else if (definition.in === 'query') { - req.query[definition.name] = rightsInfo.apiKey - } else { - throw new Error(`Api key must be in header or query not '${definition.in}'`) - } - break - default: - throw new Error(`Security definition type '${definition.type}' not supported`) - } - }) - return req -} - -function processResponse(req, response, attempt, options) { - const format = response.ok ? formatResponse : formatServiceError - const contentType = response.headers.get('content-type') || '' - - let parse - if (response.status === 204) { - parse = Promise.resolve() - } else if (~contentType.indexOf('json')) { - parse = response.json() - } else if (~contentType.indexOf('octet-stream')) { - parse = response.blob() - } else if (~contentType.indexOf('text')) { - parse = response.text() - } else { - parse = Promise.resolve() - } - - return parse - .then(data => format(response, data, options)) - .then(res => { - if (options.processResponse) return options.processResponse(req, res, attempt) - else return Promise.resolve({ res }) - }) -} - -function formatResponse(response, data, options) { - return { raw: response, data } -} - -function formatServiceError(response, data, options) { - if (options.formatServiceError) { - data = options.formatServiceError(response, data) - } else { - const serviceError = new ServiceError() - if (data) { - if (typeof data === 'string') serviceError.message = data - else { - if (data.message) serviceError.message = data.message - if (data.body) serviceError.body = data.body - else serviceError.body = data - } - - if (data.code) serviceError.code = data.code - } else { - serviceError.message = response.statusText - } - serviceError.status = response.status - data = serviceError - } - return { raw: response, data, error: true } -} - -function processError(req, error) { - const { processError } = options - const res = { res: { raw: {}, data: error, error: true } } - - return Promise.resolve(processError ? processError(req, res) : res) -} - -const COLLECTION_DELIM = { csv: ',', multi: '&', pipes: '|', ssv: ' ', tsv: '\t' } - -export function formatArrayParam(array, format, name) { - if (!array) return - if (format === 'multi') return array.map(value => createQueryParam(name, value)) - const delim = COLLECTION_DELIM[format] - if (!delim) throw new Error(`Invalid collection format '${format}'`) - return array.map(formatParam).join(delim) -} - -export function formatDate(date, format) { - if (!date) return - const str = date.toISOString() - return (format === 'date') ? str.split('T')[0] : str -} diff --git a/ui/src/api/gateway/spec.js b/ui/src/api/gateway/spec.js deleted file mode 100644 index 1e69e5a3..00000000 --- a/ui/src/api/gateway/spec.js +++ /dev/null @@ -1,23 +0,0 @@ - -// Auto-generated, edits will be overwritten -const spec = { - 'host': 'localhost', - 'schemes': [ - 'http' - ], - 'basePath': '/api/v1', - 'contentTypes': [ - 'application/zrok.v1+json' - ], - 'accepts': [ - 'application/zrok.v1+json' - ], - 'securityDefinitions': { - 'key': { - 'type': 'apiKey', - 'in': 'header', - 'name': 'x-token' - } - } -} -export default spec diff --git a/ui/src/api/index.ts b/ui/src/api/index.ts new file mode 100644 index 00000000..bebe8bbb --- /dev/null +++ b/ui/src/api/index.ts @@ -0,0 +1,5 @@ +/* tslint:disable */ +/* eslint-disable */ +export * from './runtime'; +export * from './apis/index'; +export * from './models/index'; diff --git a/ui/src/api/metadata.js b/ui/src/api/metadata.js deleted file mode 100644 index ba1a02e9..00000000 --- a/ui/src/api/metadata.js +++ /dev/null @@ -1,273 +0,0 @@ -/** @module metadata */ -// Auto-generated, edits will be overwritten -import * as gateway from './gateway' - -/** - */ -export function configuration() { - return gateway.request(configurationOperation) -} - -/** - */ -export function getAccountDetail() { - return gateway.request(getAccountDetailOperation) -} - -/** - * @param {string} envZId - * @return {Promise} ok - */ -export function getEnvironmentDetail(envZId) { - const parameters = { - path: { - envZId - } - } - return gateway.request(getEnvironmentDetailOperation, parameters) -} - -/** - * @param {number} feId - * @return {Promise} ok - */ -export function getFrontendDetail(feId) { - const parameters = { - path: { - feId - } - } - return gateway.request(getFrontendDetailOperation, parameters) -} - -/** - * @param {string} shrToken - * @return {Promise} ok - */ -export function getShareDetail(shrToken) { - const parameters = { - path: { - shrToken - } - } - return gateway.request(getShareDetailOperation, parameters) -} - -/** - * @param {string} organizationToken - * @return {Promise} ok - */ -export function listOrgMembers(organizationToken) { - const parameters = { - path: { - organizationToken - } - } - return gateway.request(listOrgMembersOperation, parameters) -} - -/** - */ -export function listMemberships() { - return gateway.request(listMembershipsOperation) -} - -/** - */ -export function overview() { - return gateway.request(overviewOperation) -} - -/** - * @param {string} organizationToken - * @param {string} accountEmail - * @return {Promise} ok - */ -export function orgAccountOverview(organizationToken, accountEmail) { - const parameters = { - path: { - organizationToken, - accountEmail - } - } - return gateway.request(orgAccountOverviewOperation, parameters) -} - -/** - * @param {object} options Optional options - * @param {string} [options.duration] - * @return {Promise} account metrics - */ -export function getAccountMetrics(options) { - if (!options) options = {} - const parameters = { - query: { - duration: options.duration - } - } - return gateway.request(getAccountMetricsOperation, parameters) -} - -/** - * @param {string} envId - * @param {object} options Optional options - * @param {string} [options.duration] - * @return {Promise} environment metrics - */ -export function getEnvironmentMetrics(envId, options) { - if (!options) options = {} - const parameters = { - path: { - envId - }, - query: { - duration: options.duration - } - } - return gateway.request(getEnvironmentMetricsOperation, parameters) -} - -/** - * @param {string} shrToken - * @param {object} options Optional options - * @param {string} [options.duration] - * @return {Promise} share metrics - */ -export function getShareMetrics(shrToken, options) { - if (!options) options = {} - const parameters = { - path: { - shrToken - }, - query: { - duration: options.duration - } - } - return gateway.request(getShareMetricsOperation, parameters) -} - -/** - */ -export function version() { - return gateway.request(versionOperation) -} - -const configurationOperation = { - path: '/configuration', - method: 'get' -} - -const getAccountDetailOperation = { - path: '/detail/account', - method: 'get', - security: [ - { - id: 'key' - } - ] -} - -const getEnvironmentDetailOperation = { - path: '/detail/environment/{envZId}', - method: 'get', - security: [ - { - id: 'key' - } - ] -} - -const getFrontendDetailOperation = { - path: '/detail/frontend/{feId}', - method: 'get', - security: [ - { - id: 'key' - } - ] -} - -const getShareDetailOperation = { - path: '/detail/share/{shrToken}', - method: 'get', - security: [ - { - id: 'key' - } - ] -} - -const listOrgMembersOperation = { - path: '/members/{organizationToken}', - method: 'get', - security: [ - { - id: 'key' - } - ] -} - -const listMembershipsOperation = { - path: '/memberships', - method: 'get', - security: [ - { - id: 'key' - } - ] -} - -const overviewOperation = { - path: '/overview', - method: 'get', - security: [ - { - id: 'key' - } - ] -} - -const orgAccountOverviewOperation = { - path: '/overview/{organizationToken}/{accountEmail}', - method: 'get', - security: [ - { - id: 'key' - } - ] -} - -const getAccountMetricsOperation = { - path: '/metrics/account', - method: 'get', - security: [ - { - id: 'key' - } - ] -} - -const getEnvironmentMetricsOperation = { - path: '/metrics/environment/{envId}', - method: 'get', - security: [ - { - id: 'key' - } - ] -} - -const getShareMetricsOperation = { - path: '/metrics/share/{shrToken}', - method: 'get', - security: [ - { - id: 'key' - } - ] -} - -const versionOperation = { - path: '/version', - method: 'get' -} diff --git a/ui/src/api/models/Access201Response.ts b/ui/src/api/models/Access201Response.ts new file mode 100644 index 00000000..bd8e241a --- /dev/null +++ b/ui/src/api/models/Access201Response.ts @@ -0,0 +1,68 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * zrok + * zrok client access + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +import { mapValues } from '../runtime'; +/** + * + * @export + * @interface Access201Response + */ +export interface Access201Response { + /** + * + * @type {string} + * @memberof Access201Response + */ + frontendToken?: string; + /** + * + * @type {string} + * @memberof Access201Response + */ + backendMode?: string; +} + +/** + * Check if a given object implements the Access201Response interface. + */ +export function instanceOfAccess201Response(value: object): value is Access201Response { + return true; +} + +export function Access201ResponseFromJSON(json: any): Access201Response { + return Access201ResponseFromJSONTyped(json, false); +} + +export function Access201ResponseFromJSONTyped(json: any, ignoreDiscriminator: boolean): Access201Response { + if (json == null) { + return json; + } + return { + + 'frontendToken': json['frontendToken'] == null ? undefined : json['frontendToken'], + 'backendMode': json['backendMode'] == null ? undefined : json['backendMode'], + }; +} + +export function Access201ResponseToJSON(value?: Access201Response | null): any { + if (value == null) { + return value; + } + return { + + 'frontendToken': value['frontendToken'], + 'backendMode': value['backendMode'], + }; +} + diff --git a/sdk/nodejs/sdk/src/zrok/api/models/AccessRequest.ts b/ui/src/api/models/AccessRequest.ts similarity index 50% rename from sdk/nodejs/sdk/src/zrok/api/models/AccessRequest.ts rename to ui/src/api/models/AccessRequest.ts index 1d7ac265..0ac0ca11 100644 --- a/sdk/nodejs/sdk/src/zrok/api/models/AccessRequest.ts +++ b/ui/src/api/models/AccessRequest.ts @@ -4,7 +4,7 @@ * zrok * zrok client access * - * The version of the OpenAPI document: 0.3.0 + * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). @@ -12,7 +12,7 @@ * Do not edit the class manually. */ -import { exists, mapValues } from '../runtime'; +import { mapValues } from '../runtime'; /** * * @export @@ -30,16 +30,26 @@ export interface AccessRequest { * @type {string} * @memberof AccessRequest */ - shrToken?: string; + shareToken?: string; + /** + * + * @type {string} + * @memberof AccessRequest + */ + bindAddress?: string; + /** + * + * @type {string} + * @memberof AccessRequest + */ + description?: string; } /** * Check if a given object implements the AccessRequest interface. */ -export function instanceOfAccessRequest(value: object): boolean { - let isInstance = true; - - return isInstance; +export function instanceOfAccessRequest(value: object): value is AccessRequest { + return true; } export function AccessRequestFromJSON(json: any): AccessRequest { @@ -47,27 +57,28 @@ export function AccessRequestFromJSON(json: any): AccessRequest { } export function AccessRequestFromJSONTyped(json: any, ignoreDiscriminator: boolean): AccessRequest { - if ((json === undefined) || (json === null)) { + if (json == null) { return json; } return { - 'envZId': !exists(json, 'envZId') ? undefined : json['envZId'], - 'shrToken': !exists(json, 'shrToken') ? undefined : json['shrToken'], + 'envZId': json['envZId'] == null ? undefined : json['envZId'], + 'shareToken': json['shareToken'] == null ? undefined : json['shareToken'], + 'bindAddress': json['bindAddress'] == null ? undefined : json['bindAddress'], + 'description': json['description'] == null ? undefined : json['description'], }; } export function AccessRequestToJSON(value?: AccessRequest | null): any { - if (value === undefined) { - return undefined; - } - if (value === null) { - return null; + if (value == null) { + return value; } return { - 'envZId': value.envZId, - 'shrToken': value.shrToken, + 'envZId': value['envZId'], + 'shareToken': value['shareToken'], + 'bindAddress': value['bindAddress'], + 'description': value['description'], }; } diff --git a/sdk/nodejs/sdk/src/zrok/api/models/AccessResponse.ts b/ui/src/api/models/AccessResponse.ts similarity index 61% rename from sdk/nodejs/sdk/src/zrok/api/models/AccessResponse.ts rename to ui/src/api/models/AccessResponse.ts index b78b5ab5..60999066 100644 --- a/sdk/nodejs/sdk/src/zrok/api/models/AccessResponse.ts +++ b/ui/src/api/models/AccessResponse.ts @@ -4,7 +4,7 @@ * zrok * zrok client access * - * The version of the OpenAPI document: 0.3.0 + * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). @@ -12,7 +12,7 @@ * Do not edit the class manually. */ -import { exists, mapValues } from '../runtime'; +import { mapValues } from '../runtime'; /** * * @export @@ -36,10 +36,8 @@ export interface AccessResponse { /** * Check if a given object implements the AccessResponse interface. */ -export function instanceOfAccessResponse(value: object): boolean { - let isInstance = true; - - return isInstance; +export function instanceOfAccessResponse(value: object): value is AccessResponse { + return true; } export function AccessResponseFromJSON(json: any): AccessResponse { @@ -47,27 +45,24 @@ export function AccessResponseFromJSON(json: any): AccessResponse { } export function AccessResponseFromJSONTyped(json: any, ignoreDiscriminator: boolean): AccessResponse { - if ((json === undefined) || (json === null)) { + if (json == null) { return json; } return { - 'frontendToken': !exists(json, 'frontendToken') ? undefined : json['frontendToken'], - 'backendMode': !exists(json, 'backendMode') ? undefined : json['backendMode'], + 'frontendToken': json['frontendToken'] == null ? undefined : json['frontendToken'], + 'backendMode': json['backendMode'] == null ? undefined : json['backendMode'], }; } export function AccessResponseToJSON(value?: AccessResponse | null): any { - if (value === undefined) { - return undefined; - } - if (value === null) { - return null; + if (value == null) { + return value; } return { - 'frontendToken': value.frontendToken, - 'backendMode': value.backendMode, + 'frontendToken': value['frontendToken'], + 'backendMode': value['backendMode'], }; } diff --git a/ui/src/api/models/AddOrganizationMemberRequest.ts b/ui/src/api/models/AddOrganizationMemberRequest.ts new file mode 100644 index 00000000..04fb56f3 --- /dev/null +++ b/ui/src/api/models/AddOrganizationMemberRequest.ts @@ -0,0 +1,76 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * zrok + * zrok client access + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +import { mapValues } from '../runtime'; +/** + * + * @export + * @interface AddOrganizationMemberRequest + */ +export interface AddOrganizationMemberRequest { + /** + * + * @type {string} + * @memberof AddOrganizationMemberRequest + */ + organizationToken?: string; + /** + * + * @type {string} + * @memberof AddOrganizationMemberRequest + */ + email?: string; + /** + * + * @type {boolean} + * @memberof AddOrganizationMemberRequest + */ + admin?: boolean; +} + +/** + * Check if a given object implements the AddOrganizationMemberRequest interface. + */ +export function instanceOfAddOrganizationMemberRequest(value: object): value is AddOrganizationMemberRequest { + return true; +} + +export function AddOrganizationMemberRequestFromJSON(json: any): AddOrganizationMemberRequest { + return AddOrganizationMemberRequestFromJSONTyped(json, false); +} + +export function AddOrganizationMemberRequestFromJSONTyped(json: any, ignoreDiscriminator: boolean): AddOrganizationMemberRequest { + if (json == null) { + return json; + } + return { + + 'organizationToken': json['organizationToken'] == null ? undefined : json['organizationToken'], + 'email': json['email'] == null ? undefined : json['email'], + 'admin': json['admin'] == null ? undefined : json['admin'], + }; +} + +export function AddOrganizationMemberRequestToJSON(value?: AddOrganizationMemberRequest | null): any { + if (value == null) { + return value; + } + return { + + 'organizationToken': value['organizationToken'], + 'email': value['email'], + 'admin': value['admin'], + }; +} + diff --git a/sdk/nodejs/sdk/src/zrok/api/models/AuthUser.ts b/ui/src/api/models/AuthUser.ts similarity index 61% rename from sdk/nodejs/sdk/src/zrok/api/models/AuthUser.ts rename to ui/src/api/models/AuthUser.ts index 3e2f7374..55698d24 100644 --- a/sdk/nodejs/sdk/src/zrok/api/models/AuthUser.ts +++ b/ui/src/api/models/AuthUser.ts @@ -4,7 +4,7 @@ * zrok * zrok client access * - * The version of the OpenAPI document: 0.3.0 + * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). @@ -12,7 +12,7 @@ * Do not edit the class manually. */ -import { exists, mapValues } from '../runtime'; +import { mapValues } from '../runtime'; /** * * @export @@ -36,10 +36,8 @@ export interface AuthUser { /** * Check if a given object implements the AuthUser interface. */ -export function instanceOfAuthUser(value: object): boolean { - let isInstance = true; - - return isInstance; +export function instanceOfAuthUser(value: object): value is AuthUser { + return true; } export function AuthUserFromJSON(json: any): AuthUser { @@ -47,27 +45,24 @@ export function AuthUserFromJSON(json: any): AuthUser { } export function AuthUserFromJSONTyped(json: any, ignoreDiscriminator: boolean): AuthUser { - if ((json === undefined) || (json === null)) { + if (json == null) { return json; } return { - 'username': !exists(json, 'username') ? undefined : json['username'], - 'password': !exists(json, 'password') ? undefined : json['password'], + 'username': json['username'] == null ? undefined : json['username'], + 'password': json['password'] == null ? undefined : json['password'], }; } export function AuthUserToJSON(value?: AuthUser | null): any { - if (value === undefined) { - return undefined; - } - if (value === null) { - return null; + if (value == null) { + return value; } return { - 'username': value.username, - 'password': value.password, + 'username': value['username'], + 'password': value['password'], }; } diff --git a/ui/src/api/models/ChangePasswordRequest.ts b/ui/src/api/models/ChangePasswordRequest.ts new file mode 100644 index 00000000..453e7a06 --- /dev/null +++ b/ui/src/api/models/ChangePasswordRequest.ts @@ -0,0 +1,76 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * zrok + * zrok client access + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +import { mapValues } from '../runtime'; +/** + * + * @export + * @interface ChangePasswordRequest + */ +export interface ChangePasswordRequest { + /** + * + * @type {string} + * @memberof ChangePasswordRequest + */ + email?: string; + /** + * + * @type {string} + * @memberof ChangePasswordRequest + */ + oldPassword?: string; + /** + * + * @type {string} + * @memberof ChangePasswordRequest + */ + newPassword?: string; +} + +/** + * Check if a given object implements the ChangePasswordRequest interface. + */ +export function instanceOfChangePasswordRequest(value: object): value is ChangePasswordRequest { + return true; +} + +export function ChangePasswordRequestFromJSON(json: any): ChangePasswordRequest { + return ChangePasswordRequestFromJSONTyped(json, false); +} + +export function ChangePasswordRequestFromJSONTyped(json: any, ignoreDiscriminator: boolean): ChangePasswordRequest { + if (json == null) { + return json; + } + return { + + 'email': json['email'] == null ? undefined : json['email'], + 'oldPassword': json['oldPassword'] == null ? undefined : json['oldPassword'], + 'newPassword': json['newPassword'] == null ? undefined : json['newPassword'], + }; +} + +export function ChangePasswordRequestToJSON(value?: ChangePasswordRequest | null): any { + if (value == null) { + return value; + } + return { + + 'email': value['email'], + 'oldPassword': value['oldPassword'], + 'newPassword': value['newPassword'], + }; +} + diff --git a/ui/src/api/models/ClientVersionCheck400Response.ts b/ui/src/api/models/ClientVersionCheck400Response.ts new file mode 100644 index 00000000..01c92aed --- /dev/null +++ b/ui/src/api/models/ClientVersionCheck400Response.ts @@ -0,0 +1,60 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * zrok + * zrok client access + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +import { mapValues } from '../runtime'; +/** + * + * @export + * @interface ClientVersionCheck400Response + */ +export interface ClientVersionCheck400Response { + /** + * + * @type {string} + * @memberof ClientVersionCheck400Response + */ + message?: string; +} + +/** + * Check if a given object implements the ClientVersionCheck400Response interface. + */ +export function instanceOfClientVersionCheck400Response(value: object): value is ClientVersionCheck400Response { + return true; +} + +export function ClientVersionCheck400ResponseFromJSON(json: any): ClientVersionCheck400Response { + return ClientVersionCheck400ResponseFromJSONTyped(json, false); +} + +export function ClientVersionCheck400ResponseFromJSONTyped(json: any, ignoreDiscriminator: boolean): ClientVersionCheck400Response { + if (json == null) { + return json; + } + return { + + 'message': json['message'] == null ? undefined : json['message'], + }; +} + +export function ClientVersionCheck400ResponseToJSON(value?: ClientVersionCheck400Response | null): any { + if (value == null) { + return value; + } + return { + + 'message': value['message'], + }; +} + diff --git a/ui/src/api/models/ClientVersionCheckRequest.ts b/ui/src/api/models/ClientVersionCheckRequest.ts new file mode 100644 index 00000000..4918ce89 --- /dev/null +++ b/ui/src/api/models/ClientVersionCheckRequest.ts @@ -0,0 +1,60 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * zrok + * zrok client access + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +import { mapValues } from '../runtime'; +/** + * + * @export + * @interface ClientVersionCheckRequest + */ +export interface ClientVersionCheckRequest { + /** + * + * @type {string} + * @memberof ClientVersionCheckRequest + */ + clientVersion?: string; +} + +/** + * Check if a given object implements the ClientVersionCheckRequest interface. + */ +export function instanceOfClientVersionCheckRequest(value: object): value is ClientVersionCheckRequest { + return true; +} + +export function ClientVersionCheckRequestFromJSON(json: any): ClientVersionCheckRequest { + return ClientVersionCheckRequestFromJSONTyped(json, false); +} + +export function ClientVersionCheckRequestFromJSONTyped(json: any, ignoreDiscriminator: boolean): ClientVersionCheckRequest { + if (json == null) { + return json; + } + return { + + 'clientVersion': json['clientVersion'] == null ? undefined : json['clientVersion'], + }; +} + +export function ClientVersionCheckRequestToJSON(value?: ClientVersionCheckRequest | null): any { + if (value == null) { + return value; + } + return { + + 'clientVersion': value['clientVersion'], + }; +} + diff --git a/ui/src/api/models/CreateAccountRequest.ts b/ui/src/api/models/CreateAccountRequest.ts new file mode 100644 index 00000000..8acc9ca0 --- /dev/null +++ b/ui/src/api/models/CreateAccountRequest.ts @@ -0,0 +1,68 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * zrok + * zrok client access + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +import { mapValues } from '../runtime'; +/** + * + * @export + * @interface CreateAccountRequest + */ +export interface CreateAccountRequest { + /** + * + * @type {string} + * @memberof CreateAccountRequest + */ + email?: string; + /** + * + * @type {string} + * @memberof CreateAccountRequest + */ + password?: string; +} + +/** + * Check if a given object implements the CreateAccountRequest interface. + */ +export function instanceOfCreateAccountRequest(value: object): value is CreateAccountRequest { + return true; +} + +export function CreateAccountRequestFromJSON(json: any): CreateAccountRequest { + return CreateAccountRequestFromJSONTyped(json, false); +} + +export function CreateAccountRequestFromJSONTyped(json: any, ignoreDiscriminator: boolean): CreateAccountRequest { + if (json == null) { + return json; + } + return { + + 'email': json['email'] == null ? undefined : json['email'], + 'password': json['password'] == null ? undefined : json['password'], + }; +} + +export function CreateAccountRequestToJSON(value?: CreateAccountRequest | null): any { + if (value == null) { + return value; + } + return { + + 'email': value['email'], + 'password': value['password'], + }; +} + diff --git a/ui/src/api/models/CreateFrontend201Response.ts b/ui/src/api/models/CreateFrontend201Response.ts new file mode 100644 index 00000000..3ea2816d --- /dev/null +++ b/ui/src/api/models/CreateFrontend201Response.ts @@ -0,0 +1,60 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * zrok + * zrok client access + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +import { mapValues } from '../runtime'; +/** + * + * @export + * @interface CreateFrontend201Response + */ +export interface CreateFrontend201Response { + /** + * + * @type {string} + * @memberof CreateFrontend201Response + */ + frontendToken?: string; +} + +/** + * Check if a given object implements the CreateFrontend201Response interface. + */ +export function instanceOfCreateFrontend201Response(value: object): value is CreateFrontend201Response { + return true; +} + +export function CreateFrontend201ResponseFromJSON(json: any): CreateFrontend201Response { + return CreateFrontend201ResponseFromJSONTyped(json, false); +} + +export function CreateFrontend201ResponseFromJSONTyped(json: any, ignoreDiscriminator: boolean): CreateFrontend201Response { + if (json == null) { + return json; + } + return { + + 'frontendToken': json['frontendToken'] == null ? undefined : json['frontendToken'], + }; +} + +export function CreateFrontend201ResponseToJSON(value?: CreateFrontend201Response | null): any { + if (value == null) { + return value; + } + return { + + 'frontendToken': value['frontendToken'], + }; +} + diff --git a/sdk/nodejs/sdk/src/zrok/api/models/CreateFrontendRequest.ts b/ui/src/api/models/CreateFrontendRequest.ts similarity index 52% rename from sdk/nodejs/sdk/src/zrok/api/models/CreateFrontendRequest.ts rename to ui/src/api/models/CreateFrontendRequest.ts index 86f6fa98..613b1bf8 100644 --- a/sdk/nodejs/sdk/src/zrok/api/models/CreateFrontendRequest.ts +++ b/ui/src/api/models/CreateFrontendRequest.ts @@ -4,7 +4,7 @@ * zrok * zrok client access * - * The version of the OpenAPI document: 0.3.0 + * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). @@ -12,7 +12,7 @@ * Do not edit the class manually. */ -import { exists, mapValues } from '../runtime'; +import { mapValues } from '../runtime'; /** * * @export @@ -37,15 +37,30 @@ export interface CreateFrontendRequest { * @memberof CreateFrontendRequest */ publicName?: string; + /** + * + * @type {string} + * @memberof CreateFrontendRequest + */ + permissionMode?: CreateFrontendRequestPermissionModeEnum; } + +/** + * @export + */ +export const CreateFrontendRequestPermissionModeEnum = { + Open: 'open', + Closed: 'closed' +} as const; +export type CreateFrontendRequestPermissionModeEnum = typeof CreateFrontendRequestPermissionModeEnum[keyof typeof CreateFrontendRequestPermissionModeEnum]; + + /** * Check if a given object implements the CreateFrontendRequest interface. */ -export function instanceOfCreateFrontendRequest(value: object): boolean { - let isInstance = true; - - return isInstance; +export function instanceOfCreateFrontendRequest(value: object): value is CreateFrontendRequest { + return true; } export function CreateFrontendRequestFromJSON(json: any): CreateFrontendRequest { @@ -53,29 +68,28 @@ export function CreateFrontendRequestFromJSON(json: any): CreateFrontendRequest } export function CreateFrontendRequestFromJSONTyped(json: any, ignoreDiscriminator: boolean): CreateFrontendRequest { - if ((json === undefined) || (json === null)) { + if (json == null) { return json; } return { - 'zId': !exists(json, 'zId') ? undefined : json['zId'], - 'urlTemplate': !exists(json, 'url_template') ? undefined : json['url_template'], - 'publicName': !exists(json, 'public_name') ? undefined : json['public_name'], + 'zId': json['zId'] == null ? undefined : json['zId'], + 'urlTemplate': json['url_template'] == null ? undefined : json['url_template'], + 'publicName': json['public_name'] == null ? undefined : json['public_name'], + 'permissionMode': json['permissionMode'] == null ? undefined : json['permissionMode'], }; } export function CreateFrontendRequestToJSON(value?: CreateFrontendRequest | null): any { - if (value === undefined) { - return undefined; - } - if (value === null) { - return null; + if (value == null) { + return value; } return { - 'zId': value.zId, - 'url_template': value.urlTemplate, - 'public_name': value.publicName, + 'zId': value['zId'], + 'url_template': value['urlTemplate'], + 'public_name': value['publicName'], + 'permissionMode': value['permissionMode'], }; } diff --git a/sdk/nodejs/sdk/src/zrok/api/models/CreateFrontendResponse.ts b/ui/src/api/models/CreateFrontendResponse.ts similarity index 72% rename from sdk/nodejs/sdk/src/zrok/api/models/CreateFrontendResponse.ts rename to ui/src/api/models/CreateFrontendResponse.ts index 5b8af999..5fe5576d 100644 --- a/sdk/nodejs/sdk/src/zrok/api/models/CreateFrontendResponse.ts +++ b/ui/src/api/models/CreateFrontendResponse.ts @@ -4,7 +4,7 @@ * zrok * zrok client access * - * The version of the OpenAPI document: 0.3.0 + * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). @@ -12,7 +12,7 @@ * Do not edit the class manually. */ -import { exists, mapValues } from '../runtime'; +import { mapValues } from '../runtime'; /** * * @export @@ -30,10 +30,8 @@ export interface CreateFrontendResponse { /** * Check if a given object implements the CreateFrontendResponse interface. */ -export function instanceOfCreateFrontendResponse(value: object): boolean { - let isInstance = true; - - return isInstance; +export function instanceOfCreateFrontendResponse(value: object): value is CreateFrontendResponse { + return true; } export function CreateFrontendResponseFromJSON(json: any): CreateFrontendResponse { @@ -41,25 +39,22 @@ export function CreateFrontendResponseFromJSON(json: any): CreateFrontendRespons } export function CreateFrontendResponseFromJSONTyped(json: any, ignoreDiscriminator: boolean): CreateFrontendResponse { - if ((json === undefined) || (json === null)) { + if (json == null) { return json; } return { - 'token': !exists(json, 'token') ? undefined : json['token'], + 'token': json['token'] == null ? undefined : json['token'], }; } export function CreateFrontendResponseToJSON(value?: CreateFrontendResponse | null): any { - if (value === undefined) { - return undefined; - } - if (value === null) { - return null; + if (value == null) { + return value; } return { - 'token': value.token, + 'token': value['token'], }; } diff --git a/sdk/nodejs/sdk/src/zrok/api/models/CreateIdentity201Response.ts b/ui/src/api/models/CreateIdentity201Response.ts similarity index 69% rename from sdk/nodejs/sdk/src/zrok/api/models/CreateIdentity201Response.ts rename to ui/src/api/models/CreateIdentity201Response.ts index e69f934e..c57fe883 100644 --- a/sdk/nodejs/sdk/src/zrok/api/models/CreateIdentity201Response.ts +++ b/ui/src/api/models/CreateIdentity201Response.ts @@ -4,7 +4,7 @@ * zrok * zrok client access * - * The version of the OpenAPI document: 0.3.0 + * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). @@ -12,7 +12,7 @@ * Do not edit the class manually. */ -import { exists, mapValues } from '../runtime'; +import { mapValues } from '../runtime'; /** * * @export @@ -36,10 +36,8 @@ export interface CreateIdentity201Response { /** * Check if a given object implements the CreateIdentity201Response interface. */ -export function instanceOfCreateIdentity201Response(value: object): boolean { - let isInstance = true; - - return isInstance; +export function instanceOfCreateIdentity201Response(value: object): value is CreateIdentity201Response { + return true; } export function CreateIdentity201ResponseFromJSON(json: any): CreateIdentity201Response { @@ -47,27 +45,24 @@ export function CreateIdentity201ResponseFromJSON(json: any): CreateIdentity201R } export function CreateIdentity201ResponseFromJSONTyped(json: any, ignoreDiscriminator: boolean): CreateIdentity201Response { - if ((json === undefined) || (json === null)) { + if (json == null) { return json; } return { - 'identity': !exists(json, 'identity') ? undefined : json['identity'], - 'cfg': !exists(json, 'cfg') ? undefined : json['cfg'], + 'identity': json['identity'] == null ? undefined : json['identity'], + 'cfg': json['cfg'] == null ? undefined : json['cfg'], }; } export function CreateIdentity201ResponseToJSON(value?: CreateIdentity201Response | null): any { - if (value === undefined) { - return undefined; - } - if (value === null) { - return null; + if (value == null) { + return value; } return { - 'identity': value.identity, - 'cfg': value.cfg, + 'identity': value['identity'], + 'cfg': value['cfg'], }; } diff --git a/sdk/nodejs/sdk/src/zrok/api/models/CreateIdentityRequest.ts b/ui/src/api/models/CreateIdentityRequest.ts similarity index 72% rename from sdk/nodejs/sdk/src/zrok/api/models/CreateIdentityRequest.ts rename to ui/src/api/models/CreateIdentityRequest.ts index cc3ce7da..ec80ea92 100644 --- a/sdk/nodejs/sdk/src/zrok/api/models/CreateIdentityRequest.ts +++ b/ui/src/api/models/CreateIdentityRequest.ts @@ -4,7 +4,7 @@ * zrok * zrok client access * - * The version of the OpenAPI document: 0.3.0 + * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). @@ -12,7 +12,7 @@ * Do not edit the class manually. */ -import { exists, mapValues } from '../runtime'; +import { mapValues } from '../runtime'; /** * * @export @@ -30,10 +30,8 @@ export interface CreateIdentityRequest { /** * Check if a given object implements the CreateIdentityRequest interface. */ -export function instanceOfCreateIdentityRequest(value: object): boolean { - let isInstance = true; - - return isInstance; +export function instanceOfCreateIdentityRequest(value: object): value is CreateIdentityRequest { + return true; } export function CreateIdentityRequestFromJSON(json: any): CreateIdentityRequest { @@ -41,25 +39,22 @@ export function CreateIdentityRequestFromJSON(json: any): CreateIdentityRequest } export function CreateIdentityRequestFromJSONTyped(json: any, ignoreDiscriminator: boolean): CreateIdentityRequest { - if ((json === undefined) || (json === null)) { + if (json == null) { return json; } return { - 'name': !exists(json, 'name') ? undefined : json['name'], + 'name': json['name'] == null ? undefined : json['name'], }; } export function CreateIdentityRequestToJSON(value?: CreateIdentityRequest | null): any { - if (value === undefined) { - return undefined; - } - if (value === null) { - return null; + if (value == null) { + return value; } return { - 'name': value.name, + 'name': value['name'], }; } diff --git a/ui/src/api/models/CreateOrganization201Response.ts b/ui/src/api/models/CreateOrganization201Response.ts new file mode 100644 index 00000000..41f1b4a6 --- /dev/null +++ b/ui/src/api/models/CreateOrganization201Response.ts @@ -0,0 +1,60 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * zrok + * zrok client access + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +import { mapValues } from '../runtime'; +/** + * + * @export + * @interface CreateOrganization201Response + */ +export interface CreateOrganization201Response { + /** + * + * @type {string} + * @memberof CreateOrganization201Response + */ + organizationToken?: string; +} + +/** + * Check if a given object implements the CreateOrganization201Response interface. + */ +export function instanceOfCreateOrganization201Response(value: object): value is CreateOrganization201Response { + return true; +} + +export function CreateOrganization201ResponseFromJSON(json: any): CreateOrganization201Response { + return CreateOrganization201ResponseFromJSONTyped(json, false); +} + +export function CreateOrganization201ResponseFromJSONTyped(json: any, ignoreDiscriminator: boolean): CreateOrganization201Response { + if (json == null) { + return json; + } + return { + + 'organizationToken': json['organizationToken'] == null ? undefined : json['organizationToken'], + }; +} + +export function CreateOrganization201ResponseToJSON(value?: CreateOrganization201Response | null): any { + if (value == null) { + return value; + } + return { + + 'organizationToken': value['organizationToken'], + }; +} + diff --git a/ui/src/api/models/CreateOrganizationRequest.ts b/ui/src/api/models/CreateOrganizationRequest.ts new file mode 100644 index 00000000..f866b94b --- /dev/null +++ b/ui/src/api/models/CreateOrganizationRequest.ts @@ -0,0 +1,60 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * zrok + * zrok client access + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +import { mapValues } from '../runtime'; +/** + * + * @export + * @interface CreateOrganizationRequest + */ +export interface CreateOrganizationRequest { + /** + * + * @type {string} + * @memberof CreateOrganizationRequest + */ + description?: string; +} + +/** + * Check if a given object implements the CreateOrganizationRequest interface. + */ +export function instanceOfCreateOrganizationRequest(value: object): value is CreateOrganizationRequest { + return true; +} + +export function CreateOrganizationRequestFromJSON(json: any): CreateOrganizationRequest { + return CreateOrganizationRequestFromJSONTyped(json, false); +} + +export function CreateOrganizationRequestFromJSONTyped(json: any, ignoreDiscriminator: boolean): CreateOrganizationRequest { + if (json == null) { + return json; + } + return { + + 'description': json['description'] == null ? undefined : json['description'], + }; +} + +export function CreateOrganizationRequestToJSON(value?: CreateOrganizationRequest | null): any { + if (value == null) { + return value; + } + return { + + 'description': value['description'], + }; +} + diff --git a/sdk/nodejs/sdk/src/zrok/api/models/DeleteFrontendRequest.ts b/ui/src/api/models/DeleteFrontendRequest.ts similarity index 70% rename from sdk/nodejs/sdk/src/zrok/api/models/DeleteFrontendRequest.ts rename to ui/src/api/models/DeleteFrontendRequest.ts index b5f827f5..c1ceb5c6 100644 --- a/sdk/nodejs/sdk/src/zrok/api/models/DeleteFrontendRequest.ts +++ b/ui/src/api/models/DeleteFrontendRequest.ts @@ -4,7 +4,7 @@ * zrok * zrok client access * - * The version of the OpenAPI document: 0.3.0 + * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). @@ -12,7 +12,7 @@ * Do not edit the class manually. */ -import { exists, mapValues } from '../runtime'; +import { mapValues } from '../runtime'; /** * * @export @@ -30,10 +30,8 @@ export interface DeleteFrontendRequest { /** * Check if a given object implements the DeleteFrontendRequest interface. */ -export function instanceOfDeleteFrontendRequest(value: object): boolean { - let isInstance = true; - - return isInstance; +export function instanceOfDeleteFrontendRequest(value: object): value is DeleteFrontendRequest { + return true; } export function DeleteFrontendRequestFromJSON(json: any): DeleteFrontendRequest { @@ -41,25 +39,22 @@ export function DeleteFrontendRequestFromJSON(json: any): DeleteFrontendRequest } export function DeleteFrontendRequestFromJSONTyped(json: any, ignoreDiscriminator: boolean): DeleteFrontendRequest { - if ((json === undefined) || (json === null)) { + if (json == null) { return json; } return { - 'frontendToken': !exists(json, 'frontendToken') ? undefined : json['frontendToken'], + 'frontendToken': json['frontendToken'] == null ? undefined : json['frontendToken'], }; } export function DeleteFrontendRequestToJSON(value?: DeleteFrontendRequest | null): any { - if (value === undefined) { - return undefined; - } - if (value === null) { - return null; + if (value == null) { + return value; } return { - 'frontendToken': value.frontendToken, + 'frontendToken': value['frontendToken'], }; } diff --git a/sdk/nodejs/sdk/src/zrok/api/models/DisableRequest.ts b/ui/src/api/models/DisableRequest.ts similarity index 65% rename from sdk/nodejs/sdk/src/zrok/api/models/DisableRequest.ts rename to ui/src/api/models/DisableRequest.ts index a87c43a6..5098a015 100644 --- a/sdk/nodejs/sdk/src/zrok/api/models/DisableRequest.ts +++ b/ui/src/api/models/DisableRequest.ts @@ -4,7 +4,7 @@ * zrok * zrok client access * - * The version of the OpenAPI document: 0.3.0 + * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). @@ -12,7 +12,7 @@ * Do not edit the class manually. */ -import { exists, mapValues } from '../runtime'; +import { mapValues } from '../runtime'; /** * * @export @@ -30,10 +30,8 @@ export interface DisableRequest { /** * Check if a given object implements the DisableRequest interface. */ -export function instanceOfDisableRequest(value: object): boolean { - let isInstance = true; - - return isInstance; +export function instanceOfDisableRequest(value: object): value is DisableRequest { + return true; } export function DisableRequestFromJSON(json: any): DisableRequest { @@ -41,25 +39,22 @@ export function DisableRequestFromJSON(json: any): DisableRequest { } export function DisableRequestFromJSONTyped(json: any, ignoreDiscriminator: boolean): DisableRequest { - if ((json === undefined) || (json === null)) { + if (json == null) { return json; } return { - 'identity': !exists(json, 'identity') ? undefined : json['identity'], + 'identity': json['identity'] == null ? undefined : json['identity'], }; } export function DisableRequestToJSON(value?: DisableRequest | null): any { - if (value === undefined) { - return undefined; - } - if (value === null) { - return null; + if (value == null) { + return value; } return { - 'identity': value.identity, + 'identity': value['identity'], }; } diff --git a/sdk/nodejs/sdk/src/zrok/api/models/EnableRequest.ts b/ui/src/api/models/EnableRequest.ts similarity index 62% rename from sdk/nodejs/sdk/src/zrok/api/models/EnableRequest.ts rename to ui/src/api/models/EnableRequest.ts index 3b58fa3f..a34a55ba 100644 --- a/sdk/nodejs/sdk/src/zrok/api/models/EnableRequest.ts +++ b/ui/src/api/models/EnableRequest.ts @@ -4,7 +4,7 @@ * zrok * zrok client access * - * The version of the OpenAPI document: 0.3.0 + * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). @@ -12,7 +12,7 @@ * Do not edit the class manually. */ -import { exists, mapValues } from '../runtime'; +import { mapValues } from '../runtime'; /** * * @export @@ -36,10 +36,8 @@ export interface EnableRequest { /** * Check if a given object implements the EnableRequest interface. */ -export function instanceOfEnableRequest(value: object): boolean { - let isInstance = true; - - return isInstance; +export function instanceOfEnableRequest(value: object): value is EnableRequest { + return true; } export function EnableRequestFromJSON(json: any): EnableRequest { @@ -47,27 +45,24 @@ export function EnableRequestFromJSON(json: any): EnableRequest { } export function EnableRequestFromJSONTyped(json: any, ignoreDiscriminator: boolean): EnableRequest { - if ((json === undefined) || (json === null)) { + if (json == null) { return json; } return { - 'description': !exists(json, 'description') ? undefined : json['description'], - 'host': !exists(json, 'host') ? undefined : json['host'], + 'description': json['description'] == null ? undefined : json['description'], + 'host': json['host'] == null ? undefined : json['host'], }; } export function EnableRequestToJSON(value?: EnableRequest | null): any { - if (value === undefined) { - return undefined; - } - if (value === null) { - return null; + if (value == null) { + return value; } return { - 'description': value.description, - 'host': value.host, + 'description': value['description'], + 'host': value['host'], }; } diff --git a/sdk/nodejs/sdk/src/zrok/api/models/EnableResponse.ts b/ui/src/api/models/EnableResponse.ts similarity index 63% rename from sdk/nodejs/sdk/src/zrok/api/models/EnableResponse.ts rename to ui/src/api/models/EnableResponse.ts index 0f614930..80c98e92 100644 --- a/sdk/nodejs/sdk/src/zrok/api/models/EnableResponse.ts +++ b/ui/src/api/models/EnableResponse.ts @@ -4,7 +4,7 @@ * zrok * zrok client access * - * The version of the OpenAPI document: 0.3.0 + * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). @@ -12,7 +12,7 @@ * Do not edit the class manually. */ -import { exists, mapValues } from '../runtime'; +import { mapValues } from '../runtime'; /** * * @export @@ -36,10 +36,8 @@ export interface EnableResponse { /** * Check if a given object implements the EnableResponse interface. */ -export function instanceOfEnableResponse(value: object): boolean { - let isInstance = true; - - return isInstance; +export function instanceOfEnableResponse(value: object): value is EnableResponse { + return true; } export function EnableResponseFromJSON(json: any): EnableResponse { @@ -47,27 +45,24 @@ export function EnableResponseFromJSON(json: any): EnableResponse { } export function EnableResponseFromJSONTyped(json: any, ignoreDiscriminator: boolean): EnableResponse { - if ((json === undefined) || (json === null)) { + if (json == null) { return json; } return { - 'identity': !exists(json, 'identity') ? undefined : json['identity'], - 'cfg': !exists(json, 'cfg') ? undefined : json['cfg'], + 'identity': json['identity'] == null ? undefined : json['identity'], + 'cfg': json['cfg'] == null ? undefined : json['cfg'], }; } export function EnableResponseToJSON(value?: EnableResponse | null): any { - if (value === undefined) { - return undefined; - } - if (value === null) { - return null; + if (value == null) { + return value; } return { - 'identity': value.identity, - 'cfg': value.cfg, + 'identity': value['identity'], + 'cfg': value['cfg'], }; } diff --git a/sdk/nodejs/sdk/src/zrok/api/models/Environment.ts b/ui/src/api/models/Environment.ts similarity index 56% rename from sdk/nodejs/sdk/src/zrok/api/models/Environment.ts rename to ui/src/api/models/Environment.ts index bbf0d824..16c24a36 100644 --- a/sdk/nodejs/sdk/src/zrok/api/models/Environment.ts +++ b/ui/src/api/models/Environment.ts @@ -4,7 +4,7 @@ * zrok * zrok client access * - * The version of the OpenAPI document: 0.3.0 + * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). @@ -12,7 +12,7 @@ * Do not edit the class manually. */ -import { exists, mapValues } from '../runtime'; +import { mapValues } from '../runtime'; import type { SparkDataSample } from './SparkDataSample'; import { SparkDataSampleFromJSON, @@ -79,10 +79,8 @@ export interface Environment { /** * Check if a given object implements the Environment interface. */ -export function instanceOfEnvironment(value: object): boolean { - let isInstance = true; - - return isInstance; +export function instanceOfEnvironment(value: object): value is Environment { + return true; } export function EnvironmentFromJSON(json: any): Environment { @@ -90,39 +88,36 @@ export function EnvironmentFromJSON(json: any): Environment { } export function EnvironmentFromJSONTyped(json: any, ignoreDiscriminator: boolean): Environment { - if ((json === undefined) || (json === null)) { + if (json == null) { return json; } return { - 'description': !exists(json, 'description') ? undefined : json['description'], - 'host': !exists(json, 'host') ? undefined : json['host'], - 'address': !exists(json, 'address') ? undefined : json['address'], - 'zId': !exists(json, 'zId') ? undefined : json['zId'], - 'activity': !exists(json, 'activity') ? undefined : ((json['activity'] as Array).map(SparkDataSampleFromJSON)), - 'limited': !exists(json, 'limited') ? undefined : json['limited'], - 'createdAt': !exists(json, 'createdAt') ? undefined : json['createdAt'], - 'updatedAt': !exists(json, 'updatedAt') ? undefined : json['updatedAt'], + 'description': json['description'] == null ? undefined : json['description'], + 'host': json['host'] == null ? undefined : json['host'], + 'address': json['address'] == null ? undefined : json['address'], + 'zId': json['zId'] == null ? undefined : json['zId'], + 'activity': json['activity'] == null ? undefined : ((json['activity'] as Array).map(SparkDataSampleFromJSON)), + 'limited': json['limited'] == null ? undefined : json['limited'], + 'createdAt': json['createdAt'] == null ? undefined : json['createdAt'], + 'updatedAt': json['updatedAt'] == null ? undefined : json['updatedAt'], }; } export function EnvironmentToJSON(value?: Environment | null): any { - if (value === undefined) { - return undefined; - } - if (value === null) { - return null; + if (value == null) { + return value; } return { - 'description': value.description, - 'host': value.host, - 'address': value.address, - 'zId': value.zId, - 'activity': value.activity === undefined ? undefined : ((value.activity as Array).map(SparkDataSampleToJSON)), - 'limited': value.limited, - 'createdAt': value.createdAt, - 'updatedAt': value.updatedAt, + 'description': value['description'], + 'host': value['host'], + 'address': value['address'], + 'zId': value['zId'], + 'activity': value['activity'] == null ? undefined : ((value['activity'] as Array).map(SparkDataSampleToJSON)), + 'limited': value['limited'], + 'createdAt': value['createdAt'], + 'updatedAt': value['updatedAt'], }; } diff --git a/sdk/nodejs/sdk/src/zrok/api/models/EnvironmentAndResources.ts b/ui/src/api/models/EnvironmentAndResources.ts similarity index 65% rename from sdk/nodejs/sdk/src/zrok/api/models/EnvironmentAndResources.ts rename to ui/src/api/models/EnvironmentAndResources.ts index 7705547c..967aaed9 100644 --- a/sdk/nodejs/sdk/src/zrok/api/models/EnvironmentAndResources.ts +++ b/ui/src/api/models/EnvironmentAndResources.ts @@ -4,7 +4,7 @@ * zrok * zrok client access * - * The version of the OpenAPI document: 0.3.0 + * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). @@ -12,19 +12,19 @@ * Do not edit the class manually. */ -import { exists, mapValues } from '../runtime'; -import type { Environment } from './Environment'; -import { - EnvironmentFromJSON, - EnvironmentFromJSONTyped, - EnvironmentToJSON, -} from './Environment'; +import { mapValues } from '../runtime'; import type { Frontend } from './Frontend'; import { FrontendFromJSON, FrontendFromJSONTyped, FrontendToJSON, } from './Frontend'; +import type { Environment } from './Environment'; +import { + EnvironmentFromJSON, + EnvironmentFromJSONTyped, + EnvironmentToJSON, +} from './Environment'; import type { Share } from './Share'; import { ShareFromJSON, @@ -61,10 +61,8 @@ export interface EnvironmentAndResources { /** * Check if a given object implements the EnvironmentAndResources interface. */ -export function instanceOfEnvironmentAndResources(value: object): boolean { - let isInstance = true; - - return isInstance; +export function instanceOfEnvironmentAndResources(value: object): value is EnvironmentAndResources { + return true; } export function EnvironmentAndResourcesFromJSON(json: any): EnvironmentAndResources { @@ -72,29 +70,26 @@ export function EnvironmentAndResourcesFromJSON(json: any): EnvironmentAndResour } export function EnvironmentAndResourcesFromJSONTyped(json: any, ignoreDiscriminator: boolean): EnvironmentAndResources { - if ((json === undefined) || (json === null)) { + if (json == null) { return json; } return { - 'environment': !exists(json, 'environment') ? undefined : EnvironmentFromJSON(json['environment']), - 'frontends': !exists(json, 'frontends') ? undefined : ((json['frontends'] as Array).map(FrontendFromJSON)), - 'shares': !exists(json, 'shares') ? undefined : ((json['shares'] as Array).map(ShareFromJSON)), + 'environment': json['environment'] == null ? undefined : EnvironmentFromJSON(json['environment']), + 'frontends': json['frontends'] == null ? undefined : ((json['frontends'] as Array).map(FrontendFromJSON)), + 'shares': json['shares'] == null ? undefined : ((json['shares'] as Array).map(ShareFromJSON)), }; } export function EnvironmentAndResourcesToJSON(value?: EnvironmentAndResources | null): any { - if (value === undefined) { - return undefined; - } - if (value === null) { - return null; + if (value == null) { + return value; } return { - 'environment': EnvironmentToJSON(value.environment), - 'frontends': value.frontends === undefined ? undefined : ((value.frontends as Array).map(FrontendToJSON)), - 'shares': value.shares === undefined ? undefined : ((value.shares as Array).map(ShareToJSON)), + 'environment': EnvironmentToJSON(value['environment']), + 'frontends': value['frontends'] == null ? undefined : ((value['frontends'] as Array).map(FrontendToJSON)), + 'shares': value['shares'] == null ? undefined : ((value['shares'] as Array).map(ShareToJSON)), }; } diff --git a/ui/src/api/models/Frontend.ts b/ui/src/api/models/Frontend.ts new file mode 100644 index 00000000..9c2885c4 --- /dev/null +++ b/ui/src/api/models/Frontend.ts @@ -0,0 +1,124 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * zrok + * zrok client access + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +import { mapValues } from '../runtime'; +/** + * + * @export + * @interface Frontend + */ +export interface Frontend { + /** + * + * @type {number} + * @memberof Frontend + */ + id?: number; + /** + * + * @type {string} + * @memberof Frontend + */ + frontendToken?: string; + /** + * + * @type {string} + * @memberof Frontend + */ + shareToken?: string; + /** + * + * @type {string} + * @memberof Frontend + */ + backendMode?: string; + /** + * + * @type {string} + * @memberof Frontend + */ + bindAddress?: string; + /** + * + * @type {string} + * @memberof Frontend + */ + description?: string; + /** + * + * @type {string} + * @memberof Frontend + */ + zId?: string; + /** + * + * @type {number} + * @memberof Frontend + */ + createdAt?: number; + /** + * + * @type {number} + * @memberof Frontend + */ + updatedAt?: number; +} + +/** + * Check if a given object implements the Frontend interface. + */ +export function instanceOfFrontend(value: object): value is Frontend { + return true; +} + +export function FrontendFromJSON(json: any): Frontend { + return FrontendFromJSONTyped(json, false); +} + +export function FrontendFromJSONTyped(json: any, ignoreDiscriminator: boolean): Frontend { + if (json == null) { + return json; + } + return { + + 'id': json['id'] == null ? undefined : json['id'], + 'frontendToken': json['frontendToken'] == null ? undefined : json['frontendToken'], + 'shareToken': json['shareToken'] == null ? undefined : json['shareToken'], + 'backendMode': json['backendMode'] == null ? undefined : json['backendMode'], + 'bindAddress': json['bindAddress'] == null ? undefined : json['bindAddress'], + 'description': json['description'] == null ? undefined : json['description'], + 'zId': json['zId'] == null ? undefined : json['zId'], + 'createdAt': json['createdAt'] == null ? undefined : json['createdAt'], + 'updatedAt': json['updatedAt'] == null ? undefined : json['updatedAt'], + }; +} + +export function FrontendToJSON(value?: Frontend | null): any { + if (value == null) { + return value; + } + return { + + 'id': value['id'], + 'frontendToken': value['frontendToken'], + 'shareToken': value['shareToken'], + 'backendMode': value['backendMode'], + 'bindAddress': value['bindAddress'], + 'description': value['description'], + 'zId': value['zId'], + 'createdAt': value['createdAt'], + 'updatedAt': value['updatedAt'], + }; +} + diff --git a/ui/src/api/models/GetSparklines200Response.ts b/ui/src/api/models/GetSparklines200Response.ts new file mode 100644 index 00000000..6815fb3d --- /dev/null +++ b/ui/src/api/models/GetSparklines200Response.ts @@ -0,0 +1,67 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * zrok + * zrok client access + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +import { mapValues } from '../runtime'; +import type { Metrics } from './Metrics'; +import { + MetricsFromJSON, + MetricsFromJSONTyped, + MetricsToJSON, +} from './Metrics'; + +/** + * + * @export + * @interface GetSparklines200Response + */ +export interface GetSparklines200Response { + /** + * + * @type {Array} + * @memberof GetSparklines200Response + */ + sparklines?: Array; +} + +/** + * Check if a given object implements the GetSparklines200Response interface. + */ +export function instanceOfGetSparklines200Response(value: object): value is GetSparklines200Response { + return true; +} + +export function GetSparklines200ResponseFromJSON(json: any): GetSparklines200Response { + return GetSparklines200ResponseFromJSONTyped(json, false); +} + +export function GetSparklines200ResponseFromJSONTyped(json: any, ignoreDiscriminator: boolean): GetSparklines200Response { + if (json == null) { + return json; + } + return { + + 'sparklines': json['sparklines'] == null ? undefined : ((json['sparklines'] as Array).map(MetricsFromJSON)), + }; +} + +export function GetSparklines200ResponseToJSON(value?: GetSparklines200Response | null): any { + if (value == null) { + return value; + } + return { + + 'sparklines': value['sparklines'] == null ? undefined : ((value['sparklines'] as Array).map(MetricsToJSON)), + }; +} + diff --git a/ui/src/api/models/GetSparklinesRequest.ts b/ui/src/api/models/GetSparklinesRequest.ts new file mode 100644 index 00000000..f7873e4c --- /dev/null +++ b/ui/src/api/models/GetSparklinesRequest.ts @@ -0,0 +1,76 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * zrok + * zrok client access + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +import { mapValues } from '../runtime'; +/** + * + * @export + * @interface GetSparklinesRequest + */ +export interface GetSparklinesRequest { + /** + * + * @type {boolean} + * @memberof GetSparklinesRequest + */ + account?: boolean; + /** + * + * @type {Array} + * @memberof GetSparklinesRequest + */ + environments?: Array; + /** + * + * @type {Array} + * @memberof GetSparklinesRequest + */ + shares?: Array; +} + +/** + * Check if a given object implements the GetSparklinesRequest interface. + */ +export function instanceOfGetSparklinesRequest(value: object): value is GetSparklinesRequest { + return true; +} + +export function GetSparklinesRequestFromJSON(json: any): GetSparklinesRequest { + return GetSparklinesRequestFromJSONTyped(json, false); +} + +export function GetSparklinesRequestFromJSONTyped(json: any, ignoreDiscriminator: boolean): GetSparklinesRequest { + if (json == null) { + return json; + } + return { + + 'account': json['account'] == null ? undefined : json['account'], + 'environments': json['environments'] == null ? undefined : json['environments'], + 'shares': json['shares'] == null ? undefined : json['shares'], + }; +} + +export function GetSparklinesRequestToJSON(value?: GetSparklinesRequest | null): any { + if (value == null) { + return value; + } + return { + + 'account': value['account'], + 'environments': value['environments'], + 'shares': value['shares'], + }; +} + diff --git a/ui/src/api/models/GrantsRequest.ts b/ui/src/api/models/GrantsRequest.ts new file mode 100644 index 00000000..76983038 --- /dev/null +++ b/ui/src/api/models/GrantsRequest.ts @@ -0,0 +1,60 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * zrok + * zrok client access + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +import { mapValues } from '../runtime'; +/** + * + * @export + * @interface GrantsRequest + */ +export interface GrantsRequest { + /** + * + * @type {string} + * @memberof GrantsRequest + */ + email?: string; +} + +/** + * Check if a given object implements the GrantsRequest interface. + */ +export function instanceOfGrantsRequest(value: object): value is GrantsRequest { + return true; +} + +export function GrantsRequestFromJSON(json: any): GrantsRequest { + return GrantsRequestFromJSONTyped(json, false); +} + +export function GrantsRequestFromJSONTyped(json: any, ignoreDiscriminator: boolean): GrantsRequest { + if (json == null) { + return json; + } + return { + + 'email': json['email'] == null ? undefined : json['email'], + }; +} + +export function GrantsRequestToJSON(value?: GrantsRequest | null): any { + if (value == null) { + return value; + } + return { + + 'email': value['email'], + }; +} + diff --git a/sdk/nodejs/sdk/src/zrok/api/models/InviteRequest.ts b/ui/src/api/models/InviteRequest.ts similarity index 62% rename from sdk/nodejs/sdk/src/zrok/api/models/InviteRequest.ts rename to ui/src/api/models/InviteRequest.ts index 8551d3c4..216e0988 100644 --- a/sdk/nodejs/sdk/src/zrok/api/models/InviteRequest.ts +++ b/ui/src/api/models/InviteRequest.ts @@ -4,7 +4,7 @@ * zrok * zrok client access * - * The version of the OpenAPI document: 0.3.0 + * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). @@ -12,7 +12,7 @@ * Do not edit the class manually. */ -import { exists, mapValues } from '../runtime'; +import { mapValues } from '../runtime'; /** * * @export @@ -30,16 +30,14 @@ export interface InviteRequest { * @type {string} * @memberof InviteRequest */ - token?: string; + inviteToken?: string; } /** * Check if a given object implements the InviteRequest interface. */ -export function instanceOfInviteRequest(value: object): boolean { - let isInstance = true; - - return isInstance; +export function instanceOfInviteRequest(value: object): value is InviteRequest { + return true; } export function InviteRequestFromJSON(json: any): InviteRequest { @@ -47,27 +45,24 @@ export function InviteRequestFromJSON(json: any): InviteRequest { } export function InviteRequestFromJSONTyped(json: any, ignoreDiscriminator: boolean): InviteRequest { - if ((json === undefined) || (json === null)) { + if (json == null) { return json; } return { - 'email': !exists(json, 'email') ? undefined : json['email'], - 'token': !exists(json, 'token') ? undefined : json['token'], + 'email': json['email'] == null ? undefined : json['email'], + 'inviteToken': json['inviteToken'] == null ? undefined : json['inviteToken'], }; } export function InviteRequestToJSON(value?: InviteRequest | null): any { - if (value === undefined) { - return undefined; - } - if (value === null) { - return null; + if (value == null) { + return value; } return { - 'email': value.email, - 'token': value.token, + 'email': value['email'], + 'inviteToken': value['inviteToken'], }; } diff --git a/sdk/nodejs/sdk/src/zrok/api/models/InviteTokenGenerateRequest.ts b/ui/src/api/models/InviteTokenGenerateRequest.ts similarity index 70% rename from sdk/nodejs/sdk/src/zrok/api/models/InviteTokenGenerateRequest.ts rename to ui/src/api/models/InviteTokenGenerateRequest.ts index 0e06af03..e3492b64 100644 --- a/sdk/nodejs/sdk/src/zrok/api/models/InviteTokenGenerateRequest.ts +++ b/ui/src/api/models/InviteTokenGenerateRequest.ts @@ -4,7 +4,7 @@ * zrok * zrok client access * - * The version of the OpenAPI document: 0.3.0 + * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). @@ -12,7 +12,7 @@ * Do not edit the class manually. */ -import { exists, mapValues } from '../runtime'; +import { mapValues } from '../runtime'; /** * * @export @@ -24,16 +24,14 @@ export interface InviteTokenGenerateRequest { * @type {Array} * @memberof InviteTokenGenerateRequest */ - tokens?: Array; + inviteTokens?: Array; } /** * Check if a given object implements the InviteTokenGenerateRequest interface. */ -export function instanceOfInviteTokenGenerateRequest(value: object): boolean { - let isInstance = true; - - return isInstance; +export function instanceOfInviteTokenGenerateRequest(value: object): value is InviteTokenGenerateRequest { + return true; } export function InviteTokenGenerateRequestFromJSON(json: any): InviteTokenGenerateRequest { @@ -41,25 +39,22 @@ export function InviteTokenGenerateRequestFromJSON(json: any): InviteTokenGenera } export function InviteTokenGenerateRequestFromJSONTyped(json: any, ignoreDiscriminator: boolean): InviteTokenGenerateRequest { - if ((json === undefined) || (json === null)) { + if (json == null) { return json; } return { - 'tokens': !exists(json, 'tokens') ? undefined : json['tokens'], + 'inviteTokens': json['inviteTokens'] == null ? undefined : json['inviteTokens'], }; } export function InviteTokenGenerateRequestToJSON(value?: InviteTokenGenerateRequest | null): any { - if (value === undefined) { - return undefined; - } - if (value === null) { - return null; + if (value == null) { + return value; } return { - 'tokens': value.tokens, + 'inviteTokens': value['inviteTokens'], }; } diff --git a/ui/src/api/models/ListFrontends200ResponseInner.ts b/ui/src/api/models/ListFrontends200ResponseInner.ts new file mode 100644 index 00000000..b4683e2a --- /dev/null +++ b/ui/src/api/models/ListFrontends200ResponseInner.ts @@ -0,0 +1,100 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * zrok + * zrok client access + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +import { mapValues } from '../runtime'; +/** + * + * @export + * @interface ListFrontends200ResponseInner + */ +export interface ListFrontends200ResponseInner { + /** + * + * @type {string} + * @memberof ListFrontends200ResponseInner + */ + frontendToken?: string; + /** + * + * @type {string} + * @memberof ListFrontends200ResponseInner + */ + zId?: string; + /** + * + * @type {string} + * @memberof ListFrontends200ResponseInner + */ + urlTemplate?: string; + /** + * + * @type {string} + * @memberof ListFrontends200ResponseInner + */ + publicName?: string; + /** + * + * @type {number} + * @memberof ListFrontends200ResponseInner + */ + createdAt?: number; + /** + * + * @type {number} + * @memberof ListFrontends200ResponseInner + */ + updatedAt?: number; +} + +/** + * Check if a given object implements the ListFrontends200ResponseInner interface. + */ +export function instanceOfListFrontends200ResponseInner(value: object): value is ListFrontends200ResponseInner { + return true; +} + +export function ListFrontends200ResponseInnerFromJSON(json: any): ListFrontends200ResponseInner { + return ListFrontends200ResponseInnerFromJSONTyped(json, false); +} + +export function ListFrontends200ResponseInnerFromJSONTyped(json: any, ignoreDiscriminator: boolean): ListFrontends200ResponseInner { + if (json == null) { + return json; + } + return { + + 'frontendToken': json['frontendToken'] == null ? undefined : json['frontendToken'], + 'zId': json['zId'] == null ? undefined : json['zId'], + 'urlTemplate': json['urlTemplate'] == null ? undefined : json['urlTemplate'], + 'publicName': json['publicName'] == null ? undefined : json['publicName'], + 'createdAt': json['createdAt'] == null ? undefined : json['createdAt'], + 'updatedAt': json['updatedAt'] == null ? undefined : json['updatedAt'], + }; +} + +export function ListFrontends200ResponseInnerToJSON(value?: ListFrontends200ResponseInner | null): any { + if (value == null) { + return value; + } + return { + + 'frontendToken': value['frontendToken'], + 'zId': value['zId'], + 'urlTemplate': value['urlTemplate'], + 'publicName': value['publicName'], + 'createdAt': value['createdAt'], + 'updatedAt': value['updatedAt'], + }; +} + diff --git a/ui/src/api/models/ListMemberships200Response.ts b/ui/src/api/models/ListMemberships200Response.ts new file mode 100644 index 00000000..3e6b1500 --- /dev/null +++ b/ui/src/api/models/ListMemberships200Response.ts @@ -0,0 +1,67 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * zrok + * zrok client access + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +import { mapValues } from '../runtime'; +import type { ListMemberships200ResponseMembershipsInner } from './ListMemberships200ResponseMembershipsInner'; +import { + ListMemberships200ResponseMembershipsInnerFromJSON, + ListMemberships200ResponseMembershipsInnerFromJSONTyped, + ListMemberships200ResponseMembershipsInnerToJSON, +} from './ListMemberships200ResponseMembershipsInner'; + +/** + * + * @export + * @interface ListMemberships200Response + */ +export interface ListMemberships200Response { + /** + * + * @type {Array} + * @memberof ListMemberships200Response + */ + memberships?: Array; +} + +/** + * Check if a given object implements the ListMemberships200Response interface. + */ +export function instanceOfListMemberships200Response(value: object): value is ListMemberships200Response { + return true; +} + +export function ListMemberships200ResponseFromJSON(json: any): ListMemberships200Response { + return ListMemberships200ResponseFromJSONTyped(json, false); +} + +export function ListMemberships200ResponseFromJSONTyped(json: any, ignoreDiscriminator: boolean): ListMemberships200Response { + if (json == null) { + return json; + } + return { + + 'memberships': json['memberships'] == null ? undefined : ((json['memberships'] as Array).map(ListMemberships200ResponseMembershipsInnerFromJSON)), + }; +} + +export function ListMemberships200ResponseToJSON(value?: ListMemberships200Response | null): any { + if (value == null) { + return value; + } + return { + + 'memberships': value['memberships'] == null ? undefined : ((value['memberships'] as Array).map(ListMemberships200ResponseMembershipsInnerToJSON)), + }; +} + diff --git a/ui/src/api/models/ListMemberships200ResponseMembershipsInner.ts b/ui/src/api/models/ListMemberships200ResponseMembershipsInner.ts new file mode 100644 index 00000000..9d39779e --- /dev/null +++ b/ui/src/api/models/ListMemberships200ResponseMembershipsInner.ts @@ -0,0 +1,76 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * zrok + * zrok client access + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +import { mapValues } from '../runtime'; +/** + * + * @export + * @interface ListMemberships200ResponseMembershipsInner + */ +export interface ListMemberships200ResponseMembershipsInner { + /** + * + * @type {string} + * @memberof ListMemberships200ResponseMembershipsInner + */ + organizationToken?: string; + /** + * + * @type {string} + * @memberof ListMemberships200ResponseMembershipsInner + */ + description?: string; + /** + * + * @type {boolean} + * @memberof ListMemberships200ResponseMembershipsInner + */ + admin?: boolean; +} + +/** + * Check if a given object implements the ListMemberships200ResponseMembershipsInner interface. + */ +export function instanceOfListMemberships200ResponseMembershipsInner(value: object): value is ListMemberships200ResponseMembershipsInner { + return true; +} + +export function ListMemberships200ResponseMembershipsInnerFromJSON(json: any): ListMemberships200ResponseMembershipsInner { + return ListMemberships200ResponseMembershipsInnerFromJSONTyped(json, false); +} + +export function ListMemberships200ResponseMembershipsInnerFromJSONTyped(json: any, ignoreDiscriminator: boolean): ListMemberships200ResponseMembershipsInner { + if (json == null) { + return json; + } + return { + + 'organizationToken': json['organizationToken'] == null ? undefined : json['organizationToken'], + 'description': json['description'] == null ? undefined : json['description'], + 'admin': json['admin'] == null ? undefined : json['admin'], + }; +} + +export function ListMemberships200ResponseMembershipsInnerToJSON(value?: ListMemberships200ResponseMembershipsInner | null): any { + if (value == null) { + return value; + } + return { + + 'organizationToken': value['organizationToken'], + 'description': value['description'], + 'admin': value['admin'], + }; +} + diff --git a/ui/src/api/models/ListOrganizationMembers200Response.ts b/ui/src/api/models/ListOrganizationMembers200Response.ts new file mode 100644 index 00000000..d3488775 --- /dev/null +++ b/ui/src/api/models/ListOrganizationMembers200Response.ts @@ -0,0 +1,67 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * zrok + * zrok client access + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +import { mapValues } from '../runtime'; +import type { ListOrganizationMembers200ResponseMembersInner } from './ListOrganizationMembers200ResponseMembersInner'; +import { + ListOrganizationMembers200ResponseMembersInnerFromJSON, + ListOrganizationMembers200ResponseMembersInnerFromJSONTyped, + ListOrganizationMembers200ResponseMembersInnerToJSON, +} from './ListOrganizationMembers200ResponseMembersInner'; + +/** + * + * @export + * @interface ListOrganizationMembers200Response + */ +export interface ListOrganizationMembers200Response { + /** + * + * @type {Array} + * @memberof ListOrganizationMembers200Response + */ + members?: Array; +} + +/** + * Check if a given object implements the ListOrganizationMembers200Response interface. + */ +export function instanceOfListOrganizationMembers200Response(value: object): value is ListOrganizationMembers200Response { + return true; +} + +export function ListOrganizationMembers200ResponseFromJSON(json: any): ListOrganizationMembers200Response { + return ListOrganizationMembers200ResponseFromJSONTyped(json, false); +} + +export function ListOrganizationMembers200ResponseFromJSONTyped(json: any, ignoreDiscriminator: boolean): ListOrganizationMembers200Response { + if (json == null) { + return json; + } + return { + + 'members': json['members'] == null ? undefined : ((json['members'] as Array).map(ListOrganizationMembers200ResponseMembersInnerFromJSON)), + }; +} + +export function ListOrganizationMembers200ResponseToJSON(value?: ListOrganizationMembers200Response | null): any { + if (value == null) { + return value; + } + return { + + 'members': value['members'] == null ? undefined : ((value['members'] as Array).map(ListOrganizationMembers200ResponseMembersInnerToJSON)), + }; +} + diff --git a/ui/src/api/models/ListOrganizationMembers200ResponseMembersInner.ts b/ui/src/api/models/ListOrganizationMembers200ResponseMembersInner.ts new file mode 100644 index 00000000..b9fcb57c --- /dev/null +++ b/ui/src/api/models/ListOrganizationMembers200ResponseMembersInner.ts @@ -0,0 +1,68 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * zrok + * zrok client access + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +import { mapValues } from '../runtime'; +/** + * + * @export + * @interface ListOrganizationMembers200ResponseMembersInner + */ +export interface ListOrganizationMembers200ResponseMembersInner { + /** + * + * @type {string} + * @memberof ListOrganizationMembers200ResponseMembersInner + */ + email?: string; + /** + * + * @type {boolean} + * @memberof ListOrganizationMembers200ResponseMembersInner + */ + admin?: boolean; +} + +/** + * Check if a given object implements the ListOrganizationMembers200ResponseMembersInner interface. + */ +export function instanceOfListOrganizationMembers200ResponseMembersInner(value: object): value is ListOrganizationMembers200ResponseMembersInner { + return true; +} + +export function ListOrganizationMembers200ResponseMembersInnerFromJSON(json: any): ListOrganizationMembers200ResponseMembersInner { + return ListOrganizationMembers200ResponseMembersInnerFromJSONTyped(json, false); +} + +export function ListOrganizationMembers200ResponseMembersInnerFromJSONTyped(json: any, ignoreDiscriminator: boolean): ListOrganizationMembers200ResponseMembersInner { + if (json == null) { + return json; + } + return { + + 'email': json['email'] == null ? undefined : json['email'], + 'admin': json['admin'] == null ? undefined : json['admin'], + }; +} + +export function ListOrganizationMembers200ResponseMembersInnerToJSON(value?: ListOrganizationMembers200ResponseMembersInner | null): any { + if (value == null) { + return value; + } + return { + + 'email': value['email'], + 'admin': value['admin'], + }; +} + diff --git a/ui/src/api/models/ListOrganizations200Response.ts b/ui/src/api/models/ListOrganizations200Response.ts new file mode 100644 index 00000000..dfbf8369 --- /dev/null +++ b/ui/src/api/models/ListOrganizations200Response.ts @@ -0,0 +1,67 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * zrok + * zrok client access + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +import { mapValues } from '../runtime'; +import type { ListOrganizations200ResponseOrganizationsInner } from './ListOrganizations200ResponseOrganizationsInner'; +import { + ListOrganizations200ResponseOrganizationsInnerFromJSON, + ListOrganizations200ResponseOrganizationsInnerFromJSONTyped, + ListOrganizations200ResponseOrganizationsInnerToJSON, +} from './ListOrganizations200ResponseOrganizationsInner'; + +/** + * + * @export + * @interface ListOrganizations200Response + */ +export interface ListOrganizations200Response { + /** + * + * @type {Array} + * @memberof ListOrganizations200Response + */ + organizations?: Array; +} + +/** + * Check if a given object implements the ListOrganizations200Response interface. + */ +export function instanceOfListOrganizations200Response(value: object): value is ListOrganizations200Response { + return true; +} + +export function ListOrganizations200ResponseFromJSON(json: any): ListOrganizations200Response { + return ListOrganizations200ResponseFromJSONTyped(json, false); +} + +export function ListOrganizations200ResponseFromJSONTyped(json: any, ignoreDiscriminator: boolean): ListOrganizations200Response { + if (json == null) { + return json; + } + return { + + 'organizations': json['organizations'] == null ? undefined : ((json['organizations'] as Array).map(ListOrganizations200ResponseOrganizationsInnerFromJSON)), + }; +} + +export function ListOrganizations200ResponseToJSON(value?: ListOrganizations200Response | null): any { + if (value == null) { + return value; + } + return { + + 'organizations': value['organizations'] == null ? undefined : ((value['organizations'] as Array).map(ListOrganizations200ResponseOrganizationsInnerToJSON)), + }; +} + diff --git a/ui/src/api/models/ListOrganizations200ResponseOrganizationsInner.ts b/ui/src/api/models/ListOrganizations200ResponseOrganizationsInner.ts new file mode 100644 index 00000000..59fe49c5 --- /dev/null +++ b/ui/src/api/models/ListOrganizations200ResponseOrganizationsInner.ts @@ -0,0 +1,68 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * zrok + * zrok client access + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +import { mapValues } from '../runtime'; +/** + * + * @export + * @interface ListOrganizations200ResponseOrganizationsInner + */ +export interface ListOrganizations200ResponseOrganizationsInner { + /** + * + * @type {string} + * @memberof ListOrganizations200ResponseOrganizationsInner + */ + organizationToken?: string; + /** + * + * @type {string} + * @memberof ListOrganizations200ResponseOrganizationsInner + */ + description?: string; +} + +/** + * Check if a given object implements the ListOrganizations200ResponseOrganizationsInner interface. + */ +export function instanceOfListOrganizations200ResponseOrganizationsInner(value: object): value is ListOrganizations200ResponseOrganizationsInner { + return true; +} + +export function ListOrganizations200ResponseOrganizationsInnerFromJSON(json: any): ListOrganizations200ResponseOrganizationsInner { + return ListOrganizations200ResponseOrganizationsInnerFromJSONTyped(json, false); +} + +export function ListOrganizations200ResponseOrganizationsInnerFromJSONTyped(json: any, ignoreDiscriminator: boolean): ListOrganizations200ResponseOrganizationsInner { + if (json == null) { + return json; + } + return { + + 'organizationToken': json['organizationToken'] == null ? undefined : json['organizationToken'], + 'description': json['description'] == null ? undefined : json['description'], + }; +} + +export function ListOrganizations200ResponseOrganizationsInnerToJSON(value?: ListOrganizations200ResponseOrganizationsInner | null): any { + if (value == null) { + return value; + } + return { + + 'organizationToken': value['organizationToken'], + 'description': value['description'], + }; +} + diff --git a/sdk/nodejs/sdk/src/zrok/api/models/LoginRequest.ts b/ui/src/api/models/LoginRequest.ts similarity index 63% rename from sdk/nodejs/sdk/src/zrok/api/models/LoginRequest.ts rename to ui/src/api/models/LoginRequest.ts index cfe3ef53..d82a6282 100644 --- a/sdk/nodejs/sdk/src/zrok/api/models/LoginRequest.ts +++ b/ui/src/api/models/LoginRequest.ts @@ -4,7 +4,7 @@ * zrok * zrok client access * - * The version of the OpenAPI document: 0.3.0 + * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). @@ -12,7 +12,7 @@ * Do not edit the class manually. */ -import { exists, mapValues } from '../runtime'; +import { mapValues } from '../runtime'; /** * * @export @@ -36,10 +36,8 @@ export interface LoginRequest { /** * Check if a given object implements the LoginRequest interface. */ -export function instanceOfLoginRequest(value: object): boolean { - let isInstance = true; - - return isInstance; +export function instanceOfLoginRequest(value: object): value is LoginRequest { + return true; } export function LoginRequestFromJSON(json: any): LoginRequest { @@ -47,27 +45,24 @@ export function LoginRequestFromJSON(json: any): LoginRequest { } export function LoginRequestFromJSONTyped(json: any, ignoreDiscriminator: boolean): LoginRequest { - if ((json === undefined) || (json === null)) { + if (json == null) { return json; } return { - 'email': !exists(json, 'email') ? undefined : json['email'], - 'password': !exists(json, 'password') ? undefined : json['password'], + 'email': json['email'] == null ? undefined : json['email'], + 'password': json['password'] == null ? undefined : json['password'], }; } export function LoginRequestToJSON(value?: LoginRequest | null): any { - if (value === undefined) { - return undefined; - } - if (value === null) { - return null; + if (value == null) { + return value; } return { - 'email': value.email, - 'password': value.password, + 'email': value['email'], + 'password': value['password'], }; } diff --git a/sdk/nodejs/sdk/src/zrok/api/models/Metrics.ts b/ui/src/api/models/Metrics.ts similarity index 59% rename from sdk/nodejs/sdk/src/zrok/api/models/Metrics.ts rename to ui/src/api/models/Metrics.ts index 21519d50..e39820b2 100644 --- a/sdk/nodejs/sdk/src/zrok/api/models/Metrics.ts +++ b/ui/src/api/models/Metrics.ts @@ -4,7 +4,7 @@ * zrok * zrok client access * - * The version of the OpenAPI document: 0.3.0 + * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). @@ -12,7 +12,7 @@ * Do not edit the class manually. */ -import { exists, mapValues } from '../runtime'; +import { mapValues } from '../runtime'; import type { MetricsSample } from './MetricsSample'; import { MetricsSampleFromJSON, @@ -55,10 +55,8 @@ export interface Metrics { /** * Check if a given object implements the Metrics interface. */ -export function instanceOfMetrics(value: object): boolean { - let isInstance = true; - - return isInstance; +export function instanceOfMetrics(value: object): value is Metrics { + return true; } export function MetricsFromJSON(json: any): Metrics { @@ -66,31 +64,28 @@ export function MetricsFromJSON(json: any): Metrics { } export function MetricsFromJSONTyped(json: any, ignoreDiscriminator: boolean): Metrics { - if ((json === undefined) || (json === null)) { + if (json == null) { return json; } return { - 'scope': !exists(json, 'scope') ? undefined : json['scope'], - 'id': !exists(json, 'id') ? undefined : json['id'], - 'period': !exists(json, 'period') ? undefined : json['period'], - 'samples': !exists(json, 'samples') ? undefined : ((json['samples'] as Array).map(MetricsSampleFromJSON)), + 'scope': json['scope'] == null ? undefined : json['scope'], + 'id': json['id'] == null ? undefined : json['id'], + 'period': json['period'] == null ? undefined : json['period'], + 'samples': json['samples'] == null ? undefined : ((json['samples'] as Array).map(MetricsSampleFromJSON)), }; } export function MetricsToJSON(value?: Metrics | null): any { - if (value === undefined) { - return undefined; - } - if (value === null) { - return null; + if (value == null) { + return value; } return { - 'scope': value.scope, - 'id': value.id, - 'period': value.period, - 'samples': value.samples === undefined ? undefined : ((value.samples as Array).map(MetricsSampleToJSON)), + 'scope': value['scope'], + 'id': value['id'], + 'period': value['period'], + 'samples': value['samples'] == null ? undefined : ((value['samples'] as Array).map(MetricsSampleToJSON)), }; } diff --git a/sdk/nodejs/sdk/src/zrok/api/models/MetricsSample.ts b/ui/src/api/models/MetricsSample.ts similarity index 62% rename from sdk/nodejs/sdk/src/zrok/api/models/MetricsSample.ts rename to ui/src/api/models/MetricsSample.ts index 72e7ee7b..5abf6e2e 100644 --- a/sdk/nodejs/sdk/src/zrok/api/models/MetricsSample.ts +++ b/ui/src/api/models/MetricsSample.ts @@ -4,7 +4,7 @@ * zrok * zrok client access * - * The version of the OpenAPI document: 0.3.0 + * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). @@ -12,7 +12,7 @@ * Do not edit the class manually. */ -import { exists, mapValues } from '../runtime'; +import { mapValues } from '../runtime'; /** * * @export @@ -42,10 +42,8 @@ export interface MetricsSample { /** * Check if a given object implements the MetricsSample interface. */ -export function instanceOfMetricsSample(value: object): boolean { - let isInstance = true; - - return isInstance; +export function instanceOfMetricsSample(value: object): value is MetricsSample { + return true; } export function MetricsSampleFromJSON(json: any): MetricsSample { @@ -53,29 +51,26 @@ export function MetricsSampleFromJSON(json: any): MetricsSample { } export function MetricsSampleFromJSONTyped(json: any, ignoreDiscriminator: boolean): MetricsSample { - if ((json === undefined) || (json === null)) { + if (json == null) { return json; } return { - 'rx': !exists(json, 'rx') ? undefined : json['rx'], - 'tx': !exists(json, 'tx') ? undefined : json['tx'], - 'timestamp': !exists(json, 'timestamp') ? undefined : json['timestamp'], + 'rx': json['rx'] == null ? undefined : json['rx'], + 'tx': json['tx'] == null ? undefined : json['tx'], + 'timestamp': json['timestamp'] == null ? undefined : json['timestamp'], }; } export function MetricsSampleToJSON(value?: MetricsSample | null): any { - if (value === undefined) { - return undefined; - } - if (value === null) { - return null; + if (value == null) { + return value; } return { - 'rx': value.rx, - 'tx': value.tx, - 'timestamp': value.timestamp, + 'rx': value['rx'], + 'tx': value['tx'], + 'timestamp': value['timestamp'], }; } diff --git a/ui/src/api/models/ModelConfiguration.ts b/ui/src/api/models/ModelConfiguration.ts new file mode 100644 index 00000000..6bf22433 --- /dev/null +++ b/ui/src/api/models/ModelConfiguration.ts @@ -0,0 +1,92 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * zrok + * zrok client access + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +import { mapValues } from '../runtime'; +/** + * + * @export + * @interface ModelConfiguration + */ +export interface ModelConfiguration { + /** + * + * @type {string} + * @memberof ModelConfiguration + */ + version?: string; + /** + * + * @type {string} + * @memberof ModelConfiguration + */ + touLink?: string; + /** + * + * @type {boolean} + * @memberof ModelConfiguration + */ + invitesOpen?: boolean; + /** + * + * @type {boolean} + * @memberof ModelConfiguration + */ + requiresInviteToken?: boolean; + /** + * + * @type {string} + * @memberof ModelConfiguration + */ + inviteTokenContact?: string; +} + +/** + * Check if a given object implements the ModelConfiguration interface. + */ +export function instanceOfModelConfiguration(value: object): value is ModelConfiguration { + return true; +} + +export function ModelConfigurationFromJSON(json: any): ModelConfiguration { + return ModelConfigurationFromJSONTyped(json, false); +} + +export function ModelConfigurationFromJSONTyped(json: any, ignoreDiscriminator: boolean): ModelConfiguration { + if (json == null) { + return json; + } + return { + + 'version': json['version'] == null ? undefined : json['version'], + 'touLink': json['touLink'] == null ? undefined : json['touLink'], + 'invitesOpen': json['invitesOpen'] == null ? undefined : json['invitesOpen'], + 'requiresInviteToken': json['requiresInviteToken'] == null ? undefined : json['requiresInviteToken'], + 'inviteTokenContact': json['inviteTokenContact'] == null ? undefined : json['inviteTokenContact'], + }; +} + +export function ModelConfigurationToJSON(value?: ModelConfiguration | null): any { + if (value == null) { + return value; + } + return { + + 'version': value['version'], + 'touLink': value['touLink'], + 'invitesOpen': value['invitesOpen'], + 'requiresInviteToken': value['requiresInviteToken'], + 'inviteTokenContact': value['inviteTokenContact'], + }; +} + diff --git a/sdk/nodejs/sdk/src/zrok/api/models/Overview.ts b/ui/src/api/models/Overview.ts similarity index 61% rename from sdk/nodejs/sdk/src/zrok/api/models/Overview.ts rename to ui/src/api/models/Overview.ts index 66fcbcea..5141c95e 100644 --- a/sdk/nodejs/sdk/src/zrok/api/models/Overview.ts +++ b/ui/src/api/models/Overview.ts @@ -4,7 +4,7 @@ * zrok * zrok client access * - * The version of the OpenAPI document: 0.3.0 + * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). @@ -12,7 +12,7 @@ * Do not edit the class manually. */ -import { exists, mapValues } from '../runtime'; +import { mapValues } from '../runtime'; import type { EnvironmentAndResources } from './EnvironmentAndResources'; import { EnvironmentAndResourcesFromJSON, @@ -43,10 +43,8 @@ export interface Overview { /** * Check if a given object implements the Overview interface. */ -export function instanceOfOverview(value: object): boolean { - let isInstance = true; - - return isInstance; +export function instanceOfOverview(value: object): value is Overview { + return true; } export function OverviewFromJSON(json: any): Overview { @@ -54,27 +52,24 @@ export function OverviewFromJSON(json: any): Overview { } export function OverviewFromJSONTyped(json: any, ignoreDiscriminator: boolean): Overview { - if ((json === undefined) || (json === null)) { + if (json == null) { return json; } return { - 'accountLimited': !exists(json, 'accountLimited') ? undefined : json['accountLimited'], - 'environments': !exists(json, 'environments') ? undefined : ((json['environments'] as Array).map(EnvironmentAndResourcesFromJSON)), + 'accountLimited': json['accountLimited'] == null ? undefined : json['accountLimited'], + 'environments': json['environments'] == null ? undefined : ((json['environments'] as Array).map(EnvironmentAndResourcesFromJSON)), }; } export function OverviewToJSON(value?: Overview | null): any { - if (value === undefined) { - return undefined; - } - if (value === null) { - return null; + if (value == null) { + return value; } return { - 'accountLimited': value.accountLimited, - 'environments': value.environments === undefined ? undefined : ((value.environments as Array).map(EnvironmentAndResourcesToJSON)), + 'accountLimited': value['accountLimited'], + 'environments': value['environments'] == null ? undefined : ((value['environments'] as Array).map(EnvironmentAndResourcesToJSON)), }; } diff --git a/sdk/nodejs/sdk/src/zrok/api/models/PasswordRequirements.ts b/ui/src/api/models/PasswordRequirements.ts similarity index 56% rename from sdk/nodejs/sdk/src/zrok/api/models/PasswordRequirements.ts rename to ui/src/api/models/PasswordRequirements.ts index d31bbdbe..c2eed9c8 100644 --- a/sdk/nodejs/sdk/src/zrok/api/models/PasswordRequirements.ts +++ b/ui/src/api/models/PasswordRequirements.ts @@ -4,7 +4,7 @@ * zrok * zrok client access * - * The version of the OpenAPI document: 0.3.0 + * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). @@ -12,7 +12,7 @@ * Do not edit the class manually. */ -import { exists, mapValues } from '../runtime'; +import { mapValues } from '../runtime'; /** * * @export @@ -54,10 +54,8 @@ export interface PasswordRequirements { /** * Check if a given object implements the PasswordRequirements interface. */ -export function instanceOfPasswordRequirements(value: object): boolean { - let isInstance = true; - - return isInstance; +export function instanceOfPasswordRequirements(value: object): value is PasswordRequirements { + return true; } export function PasswordRequirementsFromJSON(json: any): PasswordRequirements { @@ -65,33 +63,30 @@ export function PasswordRequirementsFromJSON(json: any): PasswordRequirements { } export function PasswordRequirementsFromJSONTyped(json: any, ignoreDiscriminator: boolean): PasswordRequirements { - if ((json === undefined) || (json === null)) { + if (json == null) { return json; } return { - 'length': !exists(json, 'length') ? undefined : json['length'], - 'requireCapital': !exists(json, 'requireCapital') ? undefined : json['requireCapital'], - 'requireNumeric': !exists(json, 'requireNumeric') ? undefined : json['requireNumeric'], - 'requireSpecial': !exists(json, 'requireSpecial') ? undefined : json['requireSpecial'], - 'validSpecialCharacters': !exists(json, 'validSpecialCharacters') ? undefined : json['validSpecialCharacters'], + 'length': json['length'] == null ? undefined : json['length'], + 'requireCapital': json['requireCapital'] == null ? undefined : json['requireCapital'], + 'requireNumeric': json['requireNumeric'] == null ? undefined : json['requireNumeric'], + 'requireSpecial': json['requireSpecial'] == null ? undefined : json['requireSpecial'], + 'validSpecialCharacters': json['validSpecialCharacters'] == null ? undefined : json['validSpecialCharacters'], }; } export function PasswordRequirementsToJSON(value?: PasswordRequirements | null): any { - if (value === undefined) { - return undefined; - } - if (value === null) { - return null; + if (value == null) { + return value; } return { - 'length': value.length, - 'requireCapital': value.requireCapital, - 'requireNumeric': value.requireNumeric, - 'requireSpecial': value.requireSpecial, - 'validSpecialCharacters': value.validSpecialCharacters, + 'length': value['length'], + 'requireCapital': value['requireCapital'], + 'requireNumeric': value['requireNumeric'], + 'requireSpecial': value['requireSpecial'], + 'validSpecialCharacters': value['validSpecialCharacters'], }; } diff --git a/sdk/nodejs/sdk/src/zrok/api/models/Principal.ts b/ui/src/api/models/Principal.ts similarity index 58% rename from sdk/nodejs/sdk/src/zrok/api/models/Principal.ts rename to ui/src/api/models/Principal.ts index a949bccf..4a9d72db 100644 --- a/sdk/nodejs/sdk/src/zrok/api/models/Principal.ts +++ b/ui/src/api/models/Principal.ts @@ -4,7 +4,7 @@ * zrok * zrok client access * - * The version of the OpenAPI document: 0.3.0 + * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). @@ -12,7 +12,7 @@ * Do not edit the class manually. */ -import { exists, mapValues } from '../runtime'; +import { mapValues } from '../runtime'; /** * * @export @@ -54,10 +54,8 @@ export interface Principal { /** * Check if a given object implements the Principal interface. */ -export function instanceOfPrincipal(value: object): boolean { - let isInstance = true; - - return isInstance; +export function instanceOfPrincipal(value: object): value is Principal { + return true; } export function PrincipalFromJSON(json: any): Principal { @@ -65,33 +63,30 @@ export function PrincipalFromJSON(json: any): Principal { } export function PrincipalFromJSONTyped(json: any, ignoreDiscriminator: boolean): Principal { - if ((json === undefined) || (json === null)) { + if (json == null) { return json; } return { - 'id': !exists(json, 'id') ? undefined : json['id'], - 'email': !exists(json, 'email') ? undefined : json['email'], - 'token': !exists(json, 'token') ? undefined : json['token'], - 'limitless': !exists(json, 'limitless') ? undefined : json['limitless'], - 'admin': !exists(json, 'admin') ? undefined : json['admin'], + 'id': json['id'] == null ? undefined : json['id'], + 'email': json['email'] == null ? undefined : json['email'], + 'token': json['token'] == null ? undefined : json['token'], + 'limitless': json['limitless'] == null ? undefined : json['limitless'], + 'admin': json['admin'] == null ? undefined : json['admin'], }; } export function PrincipalToJSON(value?: Principal | null): any { - if (value === undefined) { - return undefined; - } - if (value === null) { - return null; + if (value == null) { + return value; } return { - 'id': value.id, - 'email': value.email, - 'token': value.token, - 'limitless': value.limitless, - 'admin': value.admin, + 'id': value['id'], + 'email': value['email'], + 'token': value['token'], + 'limitless': value['limitless'], + 'admin': value['admin'], }; } diff --git a/sdk/nodejs/sdk/src/zrok/api/models/PublicFrontend.ts b/ui/src/api/models/PublicFrontend.ts similarity index 57% rename from sdk/nodejs/sdk/src/zrok/api/models/PublicFrontend.ts rename to ui/src/api/models/PublicFrontend.ts index 5bd7bb95..f2d11206 100644 --- a/sdk/nodejs/sdk/src/zrok/api/models/PublicFrontend.ts +++ b/ui/src/api/models/PublicFrontend.ts @@ -4,7 +4,7 @@ * zrok * zrok client access * - * The version of the OpenAPI document: 0.3.0 + * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). @@ -12,7 +12,7 @@ * Do not edit the class manually. */ -import { exists, mapValues } from '../runtime'; +import { mapValues } from '../runtime'; /** * * @export @@ -60,10 +60,8 @@ export interface PublicFrontend { /** * Check if a given object implements the PublicFrontend interface. */ -export function instanceOfPublicFrontend(value: object): boolean { - let isInstance = true; - - return isInstance; +export function instanceOfPublicFrontend(value: object): value is PublicFrontend { + return true; } export function PublicFrontendFromJSON(json: any): PublicFrontend { @@ -71,35 +69,32 @@ export function PublicFrontendFromJSON(json: any): PublicFrontend { } export function PublicFrontendFromJSONTyped(json: any, ignoreDiscriminator: boolean): PublicFrontend { - if ((json === undefined) || (json === null)) { + if (json == null) { return json; } return { - 'token': !exists(json, 'token') ? undefined : json['token'], - 'zId': !exists(json, 'zId') ? undefined : json['zId'], - 'urlTemplate': !exists(json, 'urlTemplate') ? undefined : json['urlTemplate'], - 'publicName': !exists(json, 'publicName') ? undefined : json['publicName'], - 'createdAt': !exists(json, 'createdAt') ? undefined : json['createdAt'], - 'updatedAt': !exists(json, 'updatedAt') ? undefined : json['updatedAt'], + 'token': json['token'] == null ? undefined : json['token'], + 'zId': json['zId'] == null ? undefined : json['zId'], + 'urlTemplate': json['urlTemplate'] == null ? undefined : json['urlTemplate'], + 'publicName': json['publicName'] == null ? undefined : json['publicName'], + 'createdAt': json['createdAt'] == null ? undefined : json['createdAt'], + 'updatedAt': json['updatedAt'] == null ? undefined : json['updatedAt'], }; } export function PublicFrontendToJSON(value?: PublicFrontend | null): any { - if (value === undefined) { - return undefined; - } - if (value === null) { - return null; + if (value == null) { + return value; } return { - 'token': value.token, - 'zId': value.zId, - 'urlTemplate': value.urlTemplate, - 'publicName': value.publicName, - 'createdAt': value.createdAt, - 'updatedAt': value.updatedAt, + 'token': value['token'], + 'zId': value['zId'], + 'urlTemplate': value['urlTemplate'], + 'publicName': value['publicName'], + 'createdAt': value['createdAt'], + 'updatedAt': value['updatedAt'], }; } diff --git a/ui/src/api/models/RegenerateAccountToken200Response.ts b/ui/src/api/models/RegenerateAccountToken200Response.ts new file mode 100644 index 00000000..b2f6bee0 --- /dev/null +++ b/ui/src/api/models/RegenerateAccountToken200Response.ts @@ -0,0 +1,60 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * zrok + * zrok client access + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +import { mapValues } from '../runtime'; +/** + * + * @export + * @interface RegenerateAccountToken200Response + */ +export interface RegenerateAccountToken200Response { + /** + * + * @type {string} + * @memberof RegenerateAccountToken200Response + */ + accountToken?: string; +} + +/** + * Check if a given object implements the RegenerateAccountToken200Response interface. + */ +export function instanceOfRegenerateAccountToken200Response(value: object): value is RegenerateAccountToken200Response { + return true; +} + +export function RegenerateAccountToken200ResponseFromJSON(json: any): RegenerateAccountToken200Response { + return RegenerateAccountToken200ResponseFromJSONTyped(json, false); +} + +export function RegenerateAccountToken200ResponseFromJSONTyped(json: any, ignoreDiscriminator: boolean): RegenerateAccountToken200Response { + if (json == null) { + return json; + } + return { + + 'accountToken': json['accountToken'] == null ? undefined : json['accountToken'], + }; +} + +export function RegenerateAccountToken200ResponseToJSON(value?: RegenerateAccountToken200Response | null): any { + if (value == null) { + return value; + } + return { + + 'accountToken': value['accountToken'], + }; +} + diff --git a/ui/src/api/models/RegenerateAccountTokenRequest.ts b/ui/src/api/models/RegenerateAccountTokenRequest.ts new file mode 100644 index 00000000..87aa3a06 --- /dev/null +++ b/ui/src/api/models/RegenerateAccountTokenRequest.ts @@ -0,0 +1,60 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * zrok + * zrok client access + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +import { mapValues } from '../runtime'; +/** + * + * @export + * @interface RegenerateAccountTokenRequest + */ +export interface RegenerateAccountTokenRequest { + /** + * + * @type {string} + * @memberof RegenerateAccountTokenRequest + */ + emailAddress?: string; +} + +/** + * Check if a given object implements the RegenerateAccountTokenRequest interface. + */ +export function instanceOfRegenerateAccountTokenRequest(value: object): value is RegenerateAccountTokenRequest { + return true; +} + +export function RegenerateAccountTokenRequestFromJSON(json: any): RegenerateAccountTokenRequest { + return RegenerateAccountTokenRequestFromJSONTyped(json, false); +} + +export function RegenerateAccountTokenRequestFromJSONTyped(json: any, ignoreDiscriminator: boolean): RegenerateAccountTokenRequest { + if (json == null) { + return json; + } + return { + + 'emailAddress': json['emailAddress'] == null ? undefined : json['emailAddress'], + }; +} + +export function RegenerateAccountTokenRequestToJSON(value?: RegenerateAccountTokenRequest | null): any { + if (value == null) { + return value; + } + return { + + 'emailAddress': value['emailAddress'], + }; +} + diff --git a/ui/src/api/models/RegenerateToken200Response.ts b/ui/src/api/models/RegenerateToken200Response.ts new file mode 100644 index 00000000..8a060ddd --- /dev/null +++ b/ui/src/api/models/RegenerateToken200Response.ts @@ -0,0 +1,60 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * zrok + * zrok client access + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +import { mapValues } from '../runtime'; +/** + * + * @export + * @interface RegenerateToken200Response + */ +export interface RegenerateToken200Response { + /** + * + * @type {string} + * @memberof RegenerateToken200Response + */ + token?: string; +} + +/** + * Check if a given object implements the RegenerateToken200Response interface. + */ +export function instanceOfRegenerateToken200Response(value: object): value is RegenerateToken200Response { + return true; +} + +export function RegenerateToken200ResponseFromJSON(json: any): RegenerateToken200Response { + return RegenerateToken200ResponseFromJSONTyped(json, false); +} + +export function RegenerateToken200ResponseFromJSONTyped(json: any, ignoreDiscriminator: boolean): RegenerateToken200Response { + if (json == null) { + return json; + } + return { + + 'token': json['token'] == null ? undefined : json['token'], + }; +} + +export function RegenerateToken200ResponseToJSON(value?: RegenerateToken200Response | null): any { + if (value == null) { + return value; + } + return { + + 'token': value['token'], + }; +} + diff --git a/ui/src/api/models/RegenerateTokenRequest.ts b/ui/src/api/models/RegenerateTokenRequest.ts new file mode 100644 index 00000000..4e0256bf --- /dev/null +++ b/ui/src/api/models/RegenerateTokenRequest.ts @@ -0,0 +1,60 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * zrok + * zrok client access + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +import { mapValues } from '../runtime'; +/** + * + * @export + * @interface RegenerateTokenRequest + */ +export interface RegenerateTokenRequest { + /** + * + * @type {string} + * @memberof RegenerateTokenRequest + */ + emailAddress?: string; +} + +/** + * Check if a given object implements the RegenerateTokenRequest interface. + */ +export function instanceOfRegenerateTokenRequest(value: object): value is RegenerateTokenRequest { + return true; +} + +export function RegenerateTokenRequestFromJSON(json: any): RegenerateTokenRequest { + return RegenerateTokenRequestFromJSONTyped(json, false); +} + +export function RegenerateTokenRequestFromJSONTyped(json: any, ignoreDiscriminator: boolean): RegenerateTokenRequest { + if (json == null) { + return json; + } + return { + + 'emailAddress': json['emailAddress'] == null ? undefined : json['emailAddress'], + }; +} + +export function RegenerateTokenRequestToJSON(value?: RegenerateTokenRequest | null): any { + if (value == null) { + return value; + } + return { + + 'emailAddress': value['emailAddress'], + }; +} + diff --git a/ui/src/api/models/Register200Response.ts b/ui/src/api/models/Register200Response.ts new file mode 100644 index 00000000..c61ea78f --- /dev/null +++ b/ui/src/api/models/Register200Response.ts @@ -0,0 +1,60 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * zrok + * zrok client access + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +import { mapValues } from '../runtime'; +/** + * + * @export + * @interface Register200Response + */ +export interface Register200Response { + /** + * + * @type {string} + * @memberof Register200Response + */ + token?: string; +} + +/** + * Check if a given object implements the Register200Response interface. + */ +export function instanceOfRegister200Response(value: object): value is Register200Response { + return true; +} + +export function Register200ResponseFromJSON(json: any): Register200Response { + return Register200ResponseFromJSONTyped(json, false); +} + +export function Register200ResponseFromJSONTyped(json: any, ignoreDiscriminator: boolean): Register200Response { + if (json == null) { + return json; + } + return { + + 'token': json['token'] == null ? undefined : json['token'], + }; +} + +export function Register200ResponseToJSON(value?: Register200Response | null): any { + if (value == null) { + return value; + } + return { + + 'token': value['token'], + }; +} + diff --git a/sdk/nodejs/sdk/src/zrok/api/models/RegisterRequest.ts b/ui/src/api/models/RegisterRequest.ts similarity index 62% rename from sdk/nodejs/sdk/src/zrok/api/models/RegisterRequest.ts rename to ui/src/api/models/RegisterRequest.ts index b541aea0..a8df6417 100644 --- a/sdk/nodejs/sdk/src/zrok/api/models/RegisterRequest.ts +++ b/ui/src/api/models/RegisterRequest.ts @@ -4,7 +4,7 @@ * zrok * zrok client access * - * The version of the OpenAPI document: 0.3.0 + * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). @@ -12,7 +12,7 @@ * Do not edit the class manually. */ -import { exists, mapValues } from '../runtime'; +import { mapValues } from '../runtime'; /** * * @export @@ -24,7 +24,7 @@ export interface RegisterRequest { * @type {string} * @memberof RegisterRequest */ - token?: string; + registerToken?: string; /** * * @type {string} @@ -36,10 +36,8 @@ export interface RegisterRequest { /** * Check if a given object implements the RegisterRequest interface. */ -export function instanceOfRegisterRequest(value: object): boolean { - let isInstance = true; - - return isInstance; +export function instanceOfRegisterRequest(value: object): value is RegisterRequest { + return true; } export function RegisterRequestFromJSON(json: any): RegisterRequest { @@ -47,27 +45,24 @@ export function RegisterRequestFromJSON(json: any): RegisterRequest { } export function RegisterRequestFromJSONTyped(json: any, ignoreDiscriminator: boolean): RegisterRequest { - if ((json === undefined) || (json === null)) { + if (json == null) { return json; } return { - 'token': !exists(json, 'token') ? undefined : json['token'], - 'password': !exists(json, 'password') ? undefined : json['password'], + 'registerToken': json['registerToken'] == null ? undefined : json['registerToken'], + 'password': json['password'] == null ? undefined : json['password'], }; } export function RegisterRequestToJSON(value?: RegisterRequest | null): any { - if (value === undefined) { - return undefined; - } - if (value === null) { - return null; + if (value == null) { + return value; } return { - 'token': value.token, - 'password': value.password, + 'registerToken': value['registerToken'], + 'password': value['password'], }; } diff --git a/sdk/nodejs/sdk/src/zrok/api/models/RegisterResponse.ts b/ui/src/api/models/RegisterResponse.ts similarity index 66% rename from sdk/nodejs/sdk/src/zrok/api/models/RegisterResponse.ts rename to ui/src/api/models/RegisterResponse.ts index 614d1ba1..8999163b 100644 --- a/sdk/nodejs/sdk/src/zrok/api/models/RegisterResponse.ts +++ b/ui/src/api/models/RegisterResponse.ts @@ -4,7 +4,7 @@ * zrok * zrok client access * - * The version of the OpenAPI document: 0.3.0 + * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). @@ -12,7 +12,7 @@ * Do not edit the class manually. */ -import { exists, mapValues } from '../runtime'; +import { mapValues } from '../runtime'; /** * * @export @@ -30,10 +30,8 @@ export interface RegisterResponse { /** * Check if a given object implements the RegisterResponse interface. */ -export function instanceOfRegisterResponse(value: object): boolean { - let isInstance = true; - - return isInstance; +export function instanceOfRegisterResponse(value: object): value is RegisterResponse { + return true; } export function RegisterResponseFromJSON(json: any): RegisterResponse { @@ -41,25 +39,22 @@ export function RegisterResponseFromJSON(json: any): RegisterResponse { } export function RegisterResponseFromJSONTyped(json: any, ignoreDiscriminator: boolean): RegisterResponse { - if ((json === undefined) || (json === null)) { + if (json == null) { return json; } return { - 'token': !exists(json, 'token') ? undefined : json['token'], + 'token': json['token'] == null ? undefined : json['token'], }; } export function RegisterResponseToJSON(value?: RegisterResponse | null): any { - if (value === undefined) { - return undefined; - } - if (value === null) { - return null; + if (value == null) { + return value; } return { - 'token': value.token, + 'token': value['token'], }; } diff --git a/ui/src/api/models/RemoveOrganizationMemberRequest.ts b/ui/src/api/models/RemoveOrganizationMemberRequest.ts new file mode 100644 index 00000000..03130c20 --- /dev/null +++ b/ui/src/api/models/RemoveOrganizationMemberRequest.ts @@ -0,0 +1,68 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * zrok + * zrok client access + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +import { mapValues } from '../runtime'; +/** + * + * @export + * @interface RemoveOrganizationMemberRequest + */ +export interface RemoveOrganizationMemberRequest { + /** + * + * @type {string} + * @memberof RemoveOrganizationMemberRequest + */ + organizationToken?: string; + /** + * + * @type {string} + * @memberof RemoveOrganizationMemberRequest + */ + email?: string; +} + +/** + * Check if a given object implements the RemoveOrganizationMemberRequest interface. + */ +export function instanceOfRemoveOrganizationMemberRequest(value: object): value is RemoveOrganizationMemberRequest { + return true; +} + +export function RemoveOrganizationMemberRequestFromJSON(json: any): RemoveOrganizationMemberRequest { + return RemoveOrganizationMemberRequestFromJSONTyped(json, false); +} + +export function RemoveOrganizationMemberRequestFromJSONTyped(json: any, ignoreDiscriminator: boolean): RemoveOrganizationMemberRequest { + if (json == null) { + return json; + } + return { + + 'organizationToken': json['organizationToken'] == null ? undefined : json['organizationToken'], + 'email': json['email'] == null ? undefined : json['email'], + }; +} + +export function RemoveOrganizationMemberRequestToJSON(value?: RemoveOrganizationMemberRequest | null): any { + if (value == null) { + return value; + } + return { + + 'organizationToken': value['organizationToken'], + 'email': value['email'], + }; +} + diff --git a/sdk/nodejs/sdk/src/zrok/api/models/ResetPasswordRequest.ts b/ui/src/api/models/ResetPasswordRequest.ts similarity index 63% rename from sdk/nodejs/sdk/src/zrok/api/models/ResetPasswordRequest.ts rename to ui/src/api/models/ResetPasswordRequest.ts index ea59992f..321d44ee 100644 --- a/sdk/nodejs/sdk/src/zrok/api/models/ResetPasswordRequest.ts +++ b/ui/src/api/models/ResetPasswordRequest.ts @@ -4,7 +4,7 @@ * zrok * zrok client access * - * The version of the OpenAPI document: 0.3.0 + * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). @@ -12,7 +12,7 @@ * Do not edit the class manually. */ -import { exists, mapValues } from '../runtime'; +import { mapValues } from '../runtime'; /** * * @export @@ -24,7 +24,7 @@ export interface ResetPasswordRequest { * @type {string} * @memberof ResetPasswordRequest */ - token?: string; + resetToken?: string; /** * * @type {string} @@ -36,10 +36,8 @@ export interface ResetPasswordRequest { /** * Check if a given object implements the ResetPasswordRequest interface. */ -export function instanceOfResetPasswordRequest(value: object): boolean { - let isInstance = true; - - return isInstance; +export function instanceOfResetPasswordRequest(value: object): value is ResetPasswordRequest { + return true; } export function ResetPasswordRequestFromJSON(json: any): ResetPasswordRequest { @@ -47,27 +45,24 @@ export function ResetPasswordRequestFromJSON(json: any): ResetPasswordRequest { } export function ResetPasswordRequestFromJSONTyped(json: any, ignoreDiscriminator: boolean): ResetPasswordRequest { - if ((json === undefined) || (json === null)) { + if (json == null) { return json; } return { - 'token': !exists(json, 'token') ? undefined : json['token'], - 'password': !exists(json, 'password') ? undefined : json['password'], + 'resetToken': json['resetToken'] == null ? undefined : json['resetToken'], + 'password': json['password'] == null ? undefined : json['password'], }; } export function ResetPasswordRequestToJSON(value?: ResetPasswordRequest | null): any { - if (value === undefined) { - return undefined; - } - if (value === null) { - return null; + if (value == null) { + return value; } return { - 'token': value.token, - 'password': value.password, + 'resetToken': value['resetToken'], + 'password': value['password'], }; } diff --git a/sdk/nodejs/sdk/src/zrok/api/models/Share.ts b/ui/src/api/models/Share.ts similarity index 50% rename from sdk/nodejs/sdk/src/zrok/api/models/Share.ts rename to ui/src/api/models/Share.ts index baad04d6..88c06280 100644 --- a/sdk/nodejs/sdk/src/zrok/api/models/Share.ts +++ b/ui/src/api/models/Share.ts @@ -4,7 +4,7 @@ * zrok * zrok client access * - * The version of the OpenAPI document: 0.3.0 + * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). @@ -12,7 +12,7 @@ * Do not edit the class manually. */ -import { exists, mapValues } from '../runtime'; +import { mapValues } from '../runtime'; import type { SparkDataSample } from './SparkDataSample'; import { SparkDataSampleFromJSON, @@ -31,7 +31,7 @@ export interface Share { * @type {string} * @memberof Share */ - token?: string; + shareToken?: string; /** * * @type {string} @@ -103,10 +103,8 @@ export interface Share { /** * Check if a given object implements the Share interface. */ -export function instanceOfShare(value: object): boolean { - let isInstance = true; - - return isInstance; +export function instanceOfShare(value: object): value is Share { + return true; } export function ShareFromJSON(json: any): Share { @@ -114,47 +112,44 @@ export function ShareFromJSON(json: any): Share { } export function ShareFromJSONTyped(json: any, ignoreDiscriminator: boolean): Share { - if ((json === undefined) || (json === null)) { + if (json == null) { return json; } return { - 'token': !exists(json, 'token') ? undefined : json['token'], - 'zId': !exists(json, 'zId') ? undefined : json['zId'], - 'shareMode': !exists(json, 'shareMode') ? undefined : json['shareMode'], - 'backendMode': !exists(json, 'backendMode') ? undefined : json['backendMode'], - 'frontendSelection': !exists(json, 'frontendSelection') ? undefined : json['frontendSelection'], - 'frontendEndpoint': !exists(json, 'frontendEndpoint') ? undefined : json['frontendEndpoint'], - 'backendProxyEndpoint': !exists(json, 'backendProxyEndpoint') ? undefined : json['backendProxyEndpoint'], - 'reserved': !exists(json, 'reserved') ? undefined : json['reserved'], - 'activity': !exists(json, 'activity') ? undefined : ((json['activity'] as Array).map(SparkDataSampleFromJSON)), - 'limited': !exists(json, 'limited') ? undefined : json['limited'], - 'createdAt': !exists(json, 'createdAt') ? undefined : json['createdAt'], - 'updatedAt': !exists(json, 'updatedAt') ? undefined : json['updatedAt'], + 'shareToken': json['shareToken'] == null ? undefined : json['shareToken'], + 'zId': json['zId'] == null ? undefined : json['zId'], + 'shareMode': json['shareMode'] == null ? undefined : json['shareMode'], + 'backendMode': json['backendMode'] == null ? undefined : json['backendMode'], + 'frontendSelection': json['frontendSelection'] == null ? undefined : json['frontendSelection'], + 'frontendEndpoint': json['frontendEndpoint'] == null ? undefined : json['frontendEndpoint'], + 'backendProxyEndpoint': json['backendProxyEndpoint'] == null ? undefined : json['backendProxyEndpoint'], + 'reserved': json['reserved'] == null ? undefined : json['reserved'], + 'activity': json['activity'] == null ? undefined : ((json['activity'] as Array).map(SparkDataSampleFromJSON)), + 'limited': json['limited'] == null ? undefined : json['limited'], + 'createdAt': json['createdAt'] == null ? undefined : json['createdAt'], + 'updatedAt': json['updatedAt'] == null ? undefined : json['updatedAt'], }; } export function ShareToJSON(value?: Share | null): any { - if (value === undefined) { - return undefined; - } - if (value === null) { - return null; + if (value == null) { + return value; } return { - 'token': value.token, - 'zId': value.zId, - 'shareMode': value.shareMode, - 'backendMode': value.backendMode, - 'frontendSelection': value.frontendSelection, - 'frontendEndpoint': value.frontendEndpoint, - 'backendProxyEndpoint': value.backendProxyEndpoint, - 'reserved': value.reserved, - 'activity': value.activity === undefined ? undefined : ((value.activity as Array).map(SparkDataSampleToJSON)), - 'limited': value.limited, - 'createdAt': value.createdAt, - 'updatedAt': value.updatedAt, + 'shareToken': value['shareToken'], + 'zId': value['zId'], + 'shareMode': value['shareMode'], + 'backendMode': value['backendMode'], + 'frontendSelection': value['frontendSelection'], + 'frontendEndpoint': value['frontendEndpoint'], + 'backendProxyEndpoint': value['backendProxyEndpoint'], + 'reserved': value['reserved'], + 'activity': value['activity'] == null ? undefined : ((value['activity'] as Array).map(SparkDataSampleToJSON)), + 'limited': value['limited'], + 'createdAt': value['createdAt'], + 'updatedAt': value['updatedAt'], }; } diff --git a/ui/src/api/models/ShareRequest.ts b/ui/src/api/models/ShareRequest.ts new file mode 100644 index 00000000..479a5f20 --- /dev/null +++ b/ui/src/api/models/ShareRequest.ts @@ -0,0 +1,215 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * zrok + * zrok client access + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +import { mapValues } from '../runtime'; +import type { AuthUser } from './AuthUser'; +import { + AuthUserFromJSON, + AuthUserFromJSONTyped, + AuthUserToJSON, +} from './AuthUser'; + +/** + * + * @export + * @interface ShareRequest + */ +export interface ShareRequest { + /** + * + * @type {string} + * @memberof ShareRequest + */ + envZId?: string; + /** + * + * @type {string} + * @memberof ShareRequest + */ + shareMode?: ShareRequestShareModeEnum; + /** + * + * @type {Array} + * @memberof ShareRequest + */ + frontendSelection?: Array; + /** + * + * @type {string} + * @memberof ShareRequest + */ + backendMode?: ShareRequestBackendModeEnum; + /** + * + * @type {string} + * @memberof ShareRequest + */ + backendProxyEndpoint?: string; + /** + * + * @type {string} + * @memberof ShareRequest + */ + authScheme?: string; + /** + * + * @type {Array} + * @memberof ShareRequest + */ + authUsers?: Array; + /** + * + * @type {string} + * @memberof ShareRequest + */ + oauthProvider?: ShareRequestOauthProviderEnum; + /** + * + * @type {Array} + * @memberof ShareRequest + */ + oauthEmailDomains?: Array; + /** + * + * @type {string} + * @memberof ShareRequest + */ + oauthAuthorizationCheckInterval?: string; + /** + * + * @type {boolean} + * @memberof ShareRequest + */ + reserved?: boolean; + /** + * + * @type {string} + * @memberof ShareRequest + */ + permissionMode?: ShareRequestPermissionModeEnum; + /** + * + * @type {Array} + * @memberof ShareRequest + */ + accessGrants?: Array; + /** + * + * @type {string} + * @memberof ShareRequest + */ + uniqueName?: string; +} + + +/** + * @export + */ +export const ShareRequestShareModeEnum = { + Public: 'public', + Private: 'private' +} as const; +export type ShareRequestShareModeEnum = typeof ShareRequestShareModeEnum[keyof typeof ShareRequestShareModeEnum]; + +/** + * @export + */ +export const ShareRequestBackendModeEnum = { + Proxy: 'proxy', + Web: 'web', + TcpTunnel: 'tcpTunnel', + UdpTunnel: 'udpTunnel', + Caddy: 'caddy', + Drive: 'drive', + Socks: 'socks', + Vpn: 'vpn' +} as const; +export type ShareRequestBackendModeEnum = typeof ShareRequestBackendModeEnum[keyof typeof ShareRequestBackendModeEnum]; + +/** + * @export + */ +export const ShareRequestOauthProviderEnum = { + Github: 'github', + Google: 'google' +} as const; +export type ShareRequestOauthProviderEnum = typeof ShareRequestOauthProviderEnum[keyof typeof ShareRequestOauthProviderEnum]; + +/** + * @export + */ +export const ShareRequestPermissionModeEnum = { + Open: 'open', + Closed: 'closed' +} as const; +export type ShareRequestPermissionModeEnum = typeof ShareRequestPermissionModeEnum[keyof typeof ShareRequestPermissionModeEnum]; + + +/** + * Check if a given object implements the ShareRequest interface. + */ +export function instanceOfShareRequest(value: object): value is ShareRequest { + return true; +} + +export function ShareRequestFromJSON(json: any): ShareRequest { + return ShareRequestFromJSONTyped(json, false); +} + +export function ShareRequestFromJSONTyped(json: any, ignoreDiscriminator: boolean): ShareRequest { + if (json == null) { + return json; + } + return { + + 'envZId': json['envZId'] == null ? undefined : json['envZId'], + 'shareMode': json['shareMode'] == null ? undefined : json['shareMode'], + 'frontendSelection': json['frontendSelection'] == null ? undefined : json['frontendSelection'], + 'backendMode': json['backendMode'] == null ? undefined : json['backendMode'], + 'backendProxyEndpoint': json['backendProxyEndpoint'] == null ? undefined : json['backendProxyEndpoint'], + 'authScheme': json['authScheme'] == null ? undefined : json['authScheme'], + 'authUsers': json['authUsers'] == null ? undefined : ((json['authUsers'] as Array).map(AuthUserFromJSON)), + 'oauthProvider': json['oauthProvider'] == null ? undefined : json['oauthProvider'], + 'oauthEmailDomains': json['oauthEmailDomains'] == null ? undefined : json['oauthEmailDomains'], + 'oauthAuthorizationCheckInterval': json['oauthAuthorizationCheckInterval'] == null ? undefined : json['oauthAuthorizationCheckInterval'], + 'reserved': json['reserved'] == null ? undefined : json['reserved'], + 'permissionMode': json['permissionMode'] == null ? undefined : json['permissionMode'], + 'accessGrants': json['accessGrants'] == null ? undefined : json['accessGrants'], + 'uniqueName': json['uniqueName'] == null ? undefined : json['uniqueName'], + }; +} + +export function ShareRequestToJSON(value?: ShareRequest | null): any { + if (value == null) { + return value; + } + return { + + 'envZId': value['envZId'], + 'shareMode': value['shareMode'], + 'frontendSelection': value['frontendSelection'], + 'backendMode': value['backendMode'], + 'backendProxyEndpoint': value['backendProxyEndpoint'], + 'authScheme': value['authScheme'], + 'authUsers': value['authUsers'] == null ? undefined : ((value['authUsers'] as Array).map(AuthUserToJSON)), + 'oauthProvider': value['oauthProvider'], + 'oauthEmailDomains': value['oauthEmailDomains'], + 'oauthAuthorizationCheckInterval': value['oauthAuthorizationCheckInterval'], + 'reserved': value['reserved'], + 'permissionMode': value['permissionMode'], + 'accessGrants': value['accessGrants'], + 'uniqueName': value['uniqueName'], + }; +} + diff --git a/sdk/nodejs/sdk/src/zrok/api/models/ShareResponse.ts b/ui/src/api/models/ShareResponse.ts similarity index 59% rename from sdk/nodejs/sdk/src/zrok/api/models/ShareResponse.ts rename to ui/src/api/models/ShareResponse.ts index 9b11f096..a440c089 100644 --- a/sdk/nodejs/sdk/src/zrok/api/models/ShareResponse.ts +++ b/ui/src/api/models/ShareResponse.ts @@ -4,7 +4,7 @@ * zrok * zrok client access * - * The version of the OpenAPI document: 0.3.0 + * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). @@ -12,7 +12,7 @@ * Do not edit the class manually. */ -import { exists, mapValues } from '../runtime'; +import { mapValues } from '../runtime'; /** * * @export @@ -30,16 +30,14 @@ export interface ShareResponse { * @type {string} * @memberof ShareResponse */ - shrToken?: string; + shareToken?: string; } /** * Check if a given object implements the ShareResponse interface. */ -export function instanceOfShareResponse(value: object): boolean { - let isInstance = true; - - return isInstance; +export function instanceOfShareResponse(value: object): value is ShareResponse { + return true; } export function ShareResponseFromJSON(json: any): ShareResponse { @@ -47,27 +45,24 @@ export function ShareResponseFromJSON(json: any): ShareResponse { } export function ShareResponseFromJSONTyped(json: any, ignoreDiscriminator: boolean): ShareResponse { - if ((json === undefined) || (json === null)) { + if (json == null) { return json; } return { - 'frontendProxyEndpoints': !exists(json, 'frontendProxyEndpoints') ? undefined : json['frontendProxyEndpoints'], - 'shrToken': !exists(json, 'shrToken') ? undefined : json['shrToken'], + 'frontendProxyEndpoints': json['frontendProxyEndpoints'] == null ? undefined : json['frontendProxyEndpoints'], + 'shareToken': json['shareToken'] == null ? undefined : json['shareToken'], }; } export function ShareResponseToJSON(value?: ShareResponse | null): any { - if (value === undefined) { - return undefined; - } - if (value === null) { - return null; + if (value == null) { + return value; } return { - 'frontendProxyEndpoints': value.frontendProxyEndpoints, - 'shrToken': value.shrToken, + 'frontendProxyEndpoints': value['frontendProxyEndpoints'], + 'shareToken': value['shareToken'], }; } diff --git a/sdk/nodejs/sdk/src/zrok/api/models/SparkDataSample.ts b/ui/src/api/models/SparkDataSample.ts similarity index 65% rename from sdk/nodejs/sdk/src/zrok/api/models/SparkDataSample.ts rename to ui/src/api/models/SparkDataSample.ts index e8faa48c..1a2b114d 100644 --- a/sdk/nodejs/sdk/src/zrok/api/models/SparkDataSample.ts +++ b/ui/src/api/models/SparkDataSample.ts @@ -4,7 +4,7 @@ * zrok * zrok client access * - * The version of the OpenAPI document: 0.3.0 + * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). @@ -12,7 +12,7 @@ * Do not edit the class manually. */ -import { exists, mapValues } from '../runtime'; +import { mapValues } from '../runtime'; /** * * @export @@ -36,10 +36,8 @@ export interface SparkDataSample { /** * Check if a given object implements the SparkDataSample interface. */ -export function instanceOfSparkDataSample(value: object): boolean { - let isInstance = true; - - return isInstance; +export function instanceOfSparkDataSample(value: object): value is SparkDataSample { + return true; } export function SparkDataSampleFromJSON(json: any): SparkDataSample { @@ -47,27 +45,24 @@ export function SparkDataSampleFromJSON(json: any): SparkDataSample { } export function SparkDataSampleFromJSONTyped(json: any, ignoreDiscriminator: boolean): SparkDataSample { - if ((json === undefined) || (json === null)) { + if (json == null) { return json; } return { - 'rx': !exists(json, 'rx') ? undefined : json['rx'], - 'tx': !exists(json, 'tx') ? undefined : json['tx'], + 'rx': json['rx'] == null ? undefined : json['rx'], + 'tx': json['tx'] == null ? undefined : json['tx'], }; } export function SparkDataSampleToJSON(value?: SparkDataSample | null): any { - if (value === undefined) { - return undefined; - } - if (value === null) { - return null; + if (value == null) { + return value; } return { - 'rx': value.rx, - 'tx': value.tx, + 'rx': value['rx'], + 'tx': value['tx'], }; } diff --git a/sdk/nodejs/sdk/src/zrok/api/models/UnaccessRequest.ts b/ui/src/api/models/UnaccessRequest.ts similarity index 59% rename from sdk/nodejs/sdk/src/zrok/api/models/UnaccessRequest.ts rename to ui/src/api/models/UnaccessRequest.ts index c4057ca8..2cd57f14 100644 --- a/sdk/nodejs/sdk/src/zrok/api/models/UnaccessRequest.ts +++ b/ui/src/api/models/UnaccessRequest.ts @@ -4,7 +4,7 @@ * zrok * zrok client access * - * The version of the OpenAPI document: 0.3.0 + * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). @@ -12,7 +12,7 @@ * Do not edit the class manually. */ -import { exists, mapValues } from '../runtime'; +import { mapValues } from '../runtime'; /** * * @export @@ -36,16 +36,14 @@ export interface UnaccessRequest { * @type {string} * @memberof UnaccessRequest */ - shrToken?: string; + shareToken?: string; } /** * Check if a given object implements the UnaccessRequest interface. */ -export function instanceOfUnaccessRequest(value: object): boolean { - let isInstance = true; - - return isInstance; +export function instanceOfUnaccessRequest(value: object): value is UnaccessRequest { + return true; } export function UnaccessRequestFromJSON(json: any): UnaccessRequest { @@ -53,29 +51,26 @@ export function UnaccessRequestFromJSON(json: any): UnaccessRequest { } export function UnaccessRequestFromJSONTyped(json: any, ignoreDiscriminator: boolean): UnaccessRequest { - if ((json === undefined) || (json === null)) { + if (json == null) { return json; } return { - 'frontendToken': !exists(json, 'frontendToken') ? undefined : json['frontendToken'], - 'envZId': !exists(json, 'envZId') ? undefined : json['envZId'], - 'shrToken': !exists(json, 'shrToken') ? undefined : json['shrToken'], + 'frontendToken': json['frontendToken'] == null ? undefined : json['frontendToken'], + 'envZId': json['envZId'] == null ? undefined : json['envZId'], + 'shareToken': json['shareToken'] == null ? undefined : json['shareToken'], }; } export function UnaccessRequestToJSON(value?: UnaccessRequest | null): any { - if (value === undefined) { - return undefined; - } - if (value === null) { - return null; + if (value == null) { + return value; } return { - 'frontendToken': value.frontendToken, - 'envZId': value.envZId, - 'shrToken': value.shrToken, + 'frontendToken': value['frontendToken'], + 'envZId': value['envZId'], + 'shareToken': value['shareToken'], }; } diff --git a/sdk/nodejs/sdk/src/zrok/api/models/UnshareRequest.ts b/ui/src/api/models/UnshareRequest.ts similarity index 60% rename from sdk/nodejs/sdk/src/zrok/api/models/UnshareRequest.ts rename to ui/src/api/models/UnshareRequest.ts index f4ee3ce7..20e5ed8a 100644 --- a/sdk/nodejs/sdk/src/zrok/api/models/UnshareRequest.ts +++ b/ui/src/api/models/UnshareRequest.ts @@ -4,7 +4,7 @@ * zrok * zrok client access * - * The version of the OpenAPI document: 0.3.0 + * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). @@ -12,7 +12,7 @@ * Do not edit the class manually. */ -import { exists, mapValues } from '../runtime'; +import { mapValues } from '../runtime'; /** * * @export @@ -30,7 +30,7 @@ export interface UnshareRequest { * @type {string} * @memberof UnshareRequest */ - shrToken?: string; + shareToken?: string; /** * * @type {boolean} @@ -42,10 +42,8 @@ export interface UnshareRequest { /** * Check if a given object implements the UnshareRequest interface. */ -export function instanceOfUnshareRequest(value: object): boolean { - let isInstance = true; - - return isInstance; +export function instanceOfUnshareRequest(value: object): value is UnshareRequest { + return true; } export function UnshareRequestFromJSON(json: any): UnshareRequest { @@ -53,29 +51,26 @@ export function UnshareRequestFromJSON(json: any): UnshareRequest { } export function UnshareRequestFromJSONTyped(json: any, ignoreDiscriminator: boolean): UnshareRequest { - if ((json === undefined) || (json === null)) { + if (json == null) { return json; } return { - 'envZId': !exists(json, 'envZId') ? undefined : json['envZId'], - 'shrToken': !exists(json, 'shrToken') ? undefined : json['shrToken'], - 'reserved': !exists(json, 'reserved') ? undefined : json['reserved'], + 'envZId': json['envZId'] == null ? undefined : json['envZId'], + 'shareToken': json['shareToken'] == null ? undefined : json['shareToken'], + 'reserved': json['reserved'] == null ? undefined : json['reserved'], }; } export function UnshareRequestToJSON(value?: UnshareRequest | null): any { - if (value === undefined) { - return undefined; - } - if (value === null) { - return null; + if (value == null) { + return value; } return { - 'envZId': value.envZId, - 'shrToken': value.shrToken, - 'reserved': value.reserved, + 'envZId': value['envZId'], + 'shareToken': value['shareToken'], + 'reserved': value['reserved'], }; } diff --git a/ui/src/api/models/UpdateAccessRequest.ts b/ui/src/api/models/UpdateAccessRequest.ts new file mode 100644 index 00000000..7292c1d0 --- /dev/null +++ b/ui/src/api/models/UpdateAccessRequest.ts @@ -0,0 +1,76 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * zrok + * zrok client access + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +import { mapValues } from '../runtime'; +/** + * + * @export + * @interface UpdateAccessRequest + */ +export interface UpdateAccessRequest { + /** + * + * @type {string} + * @memberof UpdateAccessRequest + */ + frontendToken?: string; + /** + * + * @type {string} + * @memberof UpdateAccessRequest + */ + bindAddress?: string; + /** + * + * @type {string} + * @memberof UpdateAccessRequest + */ + description?: string; +} + +/** + * Check if a given object implements the UpdateAccessRequest interface. + */ +export function instanceOfUpdateAccessRequest(value: object): value is UpdateAccessRequest { + return true; +} + +export function UpdateAccessRequestFromJSON(json: any): UpdateAccessRequest { + return UpdateAccessRequestFromJSONTyped(json, false); +} + +export function UpdateAccessRequestFromJSONTyped(json: any, ignoreDiscriminator: boolean): UpdateAccessRequest { + if (json == null) { + return json; + } + return { + + 'frontendToken': json['frontendToken'] == null ? undefined : json['frontendToken'], + 'bindAddress': json['bindAddress'] == null ? undefined : json['bindAddress'], + 'description': json['description'] == null ? undefined : json['description'], + }; +} + +export function UpdateAccessRequestToJSON(value?: UpdateAccessRequest | null): any { + if (value == null) { + return value; + } + return { + + 'frontendToken': value['frontendToken'], + 'bindAddress': value['bindAddress'], + 'description': value['description'], + }; +} + diff --git a/sdk/nodejs/sdk/src/zrok/api/models/UpdateFrontendRequest.ts b/ui/src/api/models/UpdateFrontendRequest.ts similarity index 64% rename from sdk/nodejs/sdk/src/zrok/api/models/UpdateFrontendRequest.ts rename to ui/src/api/models/UpdateFrontendRequest.ts index bde65772..328d9e65 100644 --- a/sdk/nodejs/sdk/src/zrok/api/models/UpdateFrontendRequest.ts +++ b/ui/src/api/models/UpdateFrontendRequest.ts @@ -4,7 +4,7 @@ * zrok * zrok client access * - * The version of the OpenAPI document: 0.3.0 + * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). @@ -12,7 +12,7 @@ * Do not edit the class manually. */ -import { exists, mapValues } from '../runtime'; +import { mapValues } from '../runtime'; /** * * @export @@ -42,10 +42,8 @@ export interface UpdateFrontendRequest { /** * Check if a given object implements the UpdateFrontendRequest interface. */ -export function instanceOfUpdateFrontendRequest(value: object): boolean { - let isInstance = true; - - return isInstance; +export function instanceOfUpdateFrontendRequest(value: object): value is UpdateFrontendRequest { + return true; } export function UpdateFrontendRequestFromJSON(json: any): UpdateFrontendRequest { @@ -53,29 +51,26 @@ export function UpdateFrontendRequestFromJSON(json: any): UpdateFrontendRequest } export function UpdateFrontendRequestFromJSONTyped(json: any, ignoreDiscriminator: boolean): UpdateFrontendRequest { - if ((json === undefined) || (json === null)) { + if (json == null) { return json; } return { - 'frontendToken': !exists(json, 'frontendToken') ? undefined : json['frontendToken'], - 'publicName': !exists(json, 'publicName') ? undefined : json['publicName'], - 'urlTemplate': !exists(json, 'urlTemplate') ? undefined : json['urlTemplate'], + 'frontendToken': json['frontendToken'] == null ? undefined : json['frontendToken'], + 'publicName': json['publicName'] == null ? undefined : json['publicName'], + 'urlTemplate': json['urlTemplate'] == null ? undefined : json['urlTemplate'], }; } export function UpdateFrontendRequestToJSON(value?: UpdateFrontendRequest | null): any { - if (value === undefined) { - return undefined; - } - if (value === null) { - return null; + if (value == null) { + return value; } return { - 'frontendToken': value.frontendToken, - 'publicName': value.publicName, - 'urlTemplate': value.urlTemplate, + 'frontendToken': value['frontendToken'], + 'publicName': value['publicName'], + 'urlTemplate': value['urlTemplate'], }; } diff --git a/ui/src/api/models/UpdateShareRequest.ts b/ui/src/api/models/UpdateShareRequest.ts new file mode 100644 index 00000000..e78d31be --- /dev/null +++ b/ui/src/api/models/UpdateShareRequest.ts @@ -0,0 +1,84 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * zrok + * zrok client access + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +import { mapValues } from '../runtime'; +/** + * + * @export + * @interface UpdateShareRequest + */ +export interface UpdateShareRequest { + /** + * + * @type {string} + * @memberof UpdateShareRequest + */ + shareToken?: string; + /** + * + * @type {string} + * @memberof UpdateShareRequest + */ + backendProxyEndpoint?: string; + /** + * + * @type {Array} + * @memberof UpdateShareRequest + */ + addAccessGrants?: Array; + /** + * + * @type {Array} + * @memberof UpdateShareRequest + */ + removeAccessGrants?: Array; +} + +/** + * Check if a given object implements the UpdateShareRequest interface. + */ +export function instanceOfUpdateShareRequest(value: object): value is UpdateShareRequest { + return true; +} + +export function UpdateShareRequestFromJSON(json: any): UpdateShareRequest { + return UpdateShareRequestFromJSONTyped(json, false); +} + +export function UpdateShareRequestFromJSONTyped(json: any, ignoreDiscriminator: boolean): UpdateShareRequest { + if (json == null) { + return json; + } + return { + + 'shareToken': json['shareToken'] == null ? undefined : json['shareToken'], + 'backendProxyEndpoint': json['backendProxyEndpoint'] == null ? undefined : json['backendProxyEndpoint'], + 'addAccessGrants': json['addAccessGrants'] == null ? undefined : json['addAccessGrants'], + 'removeAccessGrants': json['removeAccessGrants'] == null ? undefined : json['removeAccessGrants'], + }; +} + +export function UpdateShareRequestToJSON(value?: UpdateShareRequest | null): any { + if (value == null) { + return value; + } + return { + + 'shareToken': value['shareToken'], + 'backendProxyEndpoint': value['backendProxyEndpoint'], + 'addAccessGrants': value['addAccessGrants'], + 'removeAccessGrants': value['removeAccessGrants'], + }; +} + diff --git a/ui/src/api/models/Verify200Response.ts b/ui/src/api/models/Verify200Response.ts new file mode 100644 index 00000000..6dd158e9 --- /dev/null +++ b/ui/src/api/models/Verify200Response.ts @@ -0,0 +1,60 @@ +/* tslint:disable */ +/* eslint-disable */ +/** + * zrok + * zrok client access + * + * The version of the OpenAPI document: 1.0.0 + * + * + * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + * https://openapi-generator.tech + * Do not edit the class manually. + */ + +import { mapValues } from '../runtime'; +/** + * + * @export + * @interface Verify200Response + */ +export interface Verify200Response { + /** + * + * @type {string} + * @memberof Verify200Response + */ + email?: string; +} + +/** + * Check if a given object implements the Verify200Response interface. + */ +export function instanceOfVerify200Response(value: object): value is Verify200Response { + return true; +} + +export function Verify200ResponseFromJSON(json: any): Verify200Response { + return Verify200ResponseFromJSONTyped(json, false); +} + +export function Verify200ResponseFromJSONTyped(json: any, ignoreDiscriminator: boolean): Verify200Response { + if (json == null) { + return json; + } + return { + + 'email': json['email'] == null ? undefined : json['email'], + }; +} + +export function Verify200ResponseToJSON(value?: Verify200Response | null): any { + if (value == null) { + return value; + } + return { + + 'email': value['email'], + }; +} + diff --git a/sdk/nodejs/sdk/src/zrok/api/models/VerifyRequest.ts b/ui/src/api/models/VerifyRequest.ts similarity index 64% rename from sdk/nodejs/sdk/src/zrok/api/models/VerifyRequest.ts rename to ui/src/api/models/VerifyRequest.ts index 0511c955..388d889d 100644 --- a/sdk/nodejs/sdk/src/zrok/api/models/VerifyRequest.ts +++ b/ui/src/api/models/VerifyRequest.ts @@ -4,7 +4,7 @@ * zrok * zrok client access * - * The version of the OpenAPI document: 0.3.0 + * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). @@ -12,7 +12,7 @@ * Do not edit the class manually. */ -import { exists, mapValues } from '../runtime'; +import { mapValues } from '../runtime'; /** * * @export @@ -24,16 +24,14 @@ export interface VerifyRequest { * @type {string} * @memberof VerifyRequest */ - token?: string; + registerToken?: string; } /** * Check if a given object implements the VerifyRequest interface. */ -export function instanceOfVerifyRequest(value: object): boolean { - let isInstance = true; - - return isInstance; +export function instanceOfVerifyRequest(value: object): value is VerifyRequest { + return true; } export function VerifyRequestFromJSON(json: any): VerifyRequest { @@ -41,25 +39,22 @@ export function VerifyRequestFromJSON(json: any): VerifyRequest { } export function VerifyRequestFromJSONTyped(json: any, ignoreDiscriminator: boolean): VerifyRequest { - if ((json === undefined) || (json === null)) { + if (json == null) { return json; } return { - 'token': !exists(json, 'token') ? undefined : json['token'], + 'registerToken': json['registerToken'] == null ? undefined : json['registerToken'], }; } export function VerifyRequestToJSON(value?: VerifyRequest | null): any { - if (value === undefined) { - return undefined; - } - if (value === null) { - return null; + if (value == null) { + return value; } return { - 'token': value.token, + 'registerToken': value['registerToken'], }; } diff --git a/sdk/nodejs/sdk/src/zrok/api/models/VerifyResponse.ts b/ui/src/api/models/VerifyResponse.ts similarity index 66% rename from sdk/nodejs/sdk/src/zrok/api/models/VerifyResponse.ts rename to ui/src/api/models/VerifyResponse.ts index 114b5e09..736983e6 100644 --- a/sdk/nodejs/sdk/src/zrok/api/models/VerifyResponse.ts +++ b/ui/src/api/models/VerifyResponse.ts @@ -4,7 +4,7 @@ * zrok * zrok client access * - * The version of the OpenAPI document: 0.3.0 + * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). @@ -12,7 +12,7 @@ * Do not edit the class manually. */ -import { exists, mapValues } from '../runtime'; +import { mapValues } from '../runtime'; /** * * @export @@ -30,10 +30,8 @@ export interface VerifyResponse { /** * Check if a given object implements the VerifyResponse interface. */ -export function instanceOfVerifyResponse(value: object): boolean { - let isInstance = true; - - return isInstance; +export function instanceOfVerifyResponse(value: object): value is VerifyResponse { + return true; } export function VerifyResponseFromJSON(json: any): VerifyResponse { @@ -41,25 +39,22 @@ export function VerifyResponseFromJSON(json: any): VerifyResponse { } export function VerifyResponseFromJSONTyped(json: any, ignoreDiscriminator: boolean): VerifyResponse { - if ((json === undefined) || (json === null)) { + if (json == null) { return json; } return { - 'email': !exists(json, 'email') ? undefined : json['email'], + 'email': json['email'] == null ? undefined : json['email'], }; } export function VerifyResponseToJSON(value?: VerifyResponse | null): any { - if (value === undefined) { - return undefined; - } - if (value === null) { - return null; + if (value == null) { + return value; } return { - 'email': value.email, + 'email': value['email'], }; } diff --git a/sdk/nodejs/sdk/src/zrok/api/models/index.ts b/ui/src/api/models/index.ts similarity index 50% rename from sdk/nodejs/sdk/src/zrok/api/models/index.ts rename to ui/src/api/models/index.ts index a557024b..48131e46 100644 --- a/sdk/nodejs/sdk/src/zrok/api/models/index.ts +++ b/ui/src/api/models/index.ts @@ -1,40 +1,52 @@ /* tslint:disable */ /* eslint-disable */ +export * from './Access201Response'; export * from './AccessRequest'; -export * from './AccessResponse'; +export * from './AddOrganizationMemberRequest'; export * from './AuthUser'; +export * from './ChangePasswordRequest'; +export * from './ClientVersionCheckRequest'; +export * from './CreateFrontend201Response'; export * from './CreateFrontendRequest'; -export * from './CreateFrontendResponse'; export * from './CreateIdentity201Response'; export * from './CreateIdentityRequest'; -export * from './DeleteFrontendRequest'; +export * from './CreateOrganization201Response'; +export * from './CreateOrganizationRequest'; export * from './DisableRequest'; export * from './EnableRequest'; -export * from './EnableResponse'; export * from './Environment'; export * from './EnvironmentAndResources'; export * from './Frontend'; +export * from './GetSparklines200Response'; +export * from './GetSparklinesRequest'; export * from './InviteRequest'; export * from './InviteTokenGenerateRequest'; +export * from './ListFrontends200ResponseInner'; +export * from './ListMemberships200Response'; +export * from './ListMemberships200ResponseMembershipsInner'; +export * from './ListOrganizationMembers200Response'; +export * from './ListOrganizationMembers200ResponseMembersInner'; +export * from './ListOrganizations200Response'; +export * from './ListOrganizations200ResponseOrganizationsInner'; export * from './LoginRequest'; export * from './Metrics'; export * from './MetricsSample'; export * from './ModelConfiguration'; export * from './Overview'; -export * from './PasswordRequirements'; export * from './Principal'; -export * from './PublicFrontend'; +export * from './RegenerateAccountToken200Response'; +export * from './RegenerateAccountTokenRequest'; export * from './RegisterRequest'; -export * from './RegisterResponse'; +export * from './RemoveOrganizationMemberRequest'; export * from './ResetPasswordRequest'; -export * from './ResetPasswordRequestRequest'; export * from './Share'; export * from './ShareRequest'; export * from './ShareResponse'; export * from './SparkDataSample'; export * from './UnaccessRequest'; export * from './UnshareRequest'; +export * from './UpdateAccessRequest'; export * from './UpdateFrontendRequest'; export * from './UpdateShareRequest'; +export * from './Verify200Response'; export * from './VerifyRequest'; -export * from './VerifyResponse'; diff --git a/sdk/nodejs/sdk/src/zrok/api/runtime.ts b/ui/src/api/runtime.ts similarity index 96% rename from sdk/nodejs/sdk/src/zrok/api/runtime.ts rename to ui/src/api/runtime.ts index 3bf001a3..991e2ac3 100644 --- a/sdk/nodejs/sdk/src/zrok/api/runtime.ts +++ b/ui/src/api/runtime.ts @@ -4,7 +4,7 @@ * zrok * zrok client access * - * The version of the OpenAPI document: 0.3.0 + * The version of the OpenAPI document: 1.0.0 * * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). @@ -22,7 +22,7 @@ export interface ConfigurationParameters { queryParamsStringify?: (params: HTTPQuery) => string; // stringify function for query strings username?: string; // parameter for basic security password?: string; // parameter for basic security - apiKey?: string | ((name: string) => string); // parameter for apiKey security + apiKey?: string | Promise | ((name: string) => string | Promise); // parameter for apiKey security accessToken?: string | Promise | ((name?: string, scopes?: string[]) => string | Promise); // parameter for oauth2 security headers?: HTTPHeaders; //header params we want to use on every request credentials?: RequestCredentials; //value for the credentials param we want to use on each request @@ -59,7 +59,7 @@ export class Configuration { return this.configuration.password; } - get apiKey(): ((name: string) => string) | undefined { + get apiKey(): ((name: string) => string | Promise) | undefined { const apiKey = this.configuration.apiKey; if (apiKey) { return typeof apiKey === 'function' ? apiKey : () => apiKey; @@ -91,7 +91,7 @@ export const DefaultConfig = new Configuration(); */ export class BaseAPI { - private static readonly jsonRegex = new RegExp('^(:?application\/json|[^;/ \t]+\/[^;/ \t]+[+]json)[ \t]*(:?;.*)?$', 'i'); + private static readonly jsonRegex = new RegExp('^(:?application\/json|[^;/ \t]+\/[^;/ \t]+[+]json)[ \t]*(:?;.*)?$', 'i'); private middleware: Middleware[]; constructor(protected configuration = DefaultConfig) { @@ -310,11 +310,6 @@ export interface RequestOpts { body?: HTTPBody; } -export function exists(json: any, key: string) { - const value = json[key]; - return value !== null && value !== undefined; -} - export function querystring(params: HTTPQuery, prefix: string = ''): string { return Object.keys(params) .map(key => querystringSingleKey(key, params[key], prefix)) diff --git a/ui/src/api/share.js b/ui/src/api/share.js deleted file mode 100644 index 3bf46930..00000000 --- a/ui/src/api/share.js +++ /dev/null @@ -1,133 +0,0 @@ -/** @module share */ -// Auto-generated, edits will be overwritten -import * as gateway from './gateway' - -/** - * @param {object} options Optional options - * @param {module:types.accessRequest} [options.body] - * @return {Promise} access created - */ -export function access(options) { - if (!options) options = {} - const parameters = { - body: { - body: options.body - } - } - return gateway.request(accessOperation, parameters) -} - -/** - * @param {object} options Optional options - * @param {module:types.shareRequest} [options.body] - * @return {Promise} share created - */ -export function share(options) { - if (!options) options = {} - const parameters = { - body: { - body: options.body - } - } - return gateway.request(shareOperation, parameters) -} - -/** - * @param {object} options Optional options - * @param {module:types.updateShareRequest} [options.body] - * @return {Promise} share updated - */ -export function updateShare(options) { - if (!options) options = {} - const parameters = { - body: { - body: options.body - } - } - return gateway.request(updateShareOperation, parameters) -} - -/** - * @param {object} options Optional options - * @param {module:types.unaccessRequest} [options.body] - * @return {Promise} access removed - */ -export function unaccess(options) { - if (!options) options = {} - const parameters = { - body: { - body: options.body - } - } - return gateway.request(unaccessOperation, parameters) -} - -/** - * @param {object} options Optional options - * @param {module:types.unshareRequest} [options.body] - * @return {Promise} share removed - */ -export function unshare(options) { - if (!options) options = {} - const parameters = { - body: { - body: options.body - } - } - return gateway.request(unshareOperation, parameters) -} - -const accessOperation = { - path: '/access', - contentTypes: ['application/zrok.v1+json'], - method: 'post', - security: [ - { - id: 'key' - } - ] -} - -const shareOperation = { - path: '/share', - contentTypes: ['application/zrok.v1+json'], - method: 'post', - security: [ - { - id: 'key' - } - ] -} - -const updateShareOperation = { - path: '/share', - contentTypes: ['application/zrok.v1+json'], - method: 'patch', - security: [ - { - id: 'key' - } - ] -} - -const unaccessOperation = { - path: '/unaccess', - contentTypes: ['application/zrok.v1+json'], - method: 'delete', - security: [ - { - id: 'key' - } - ] -} - -const unshareOperation = { - path: '/unshare', - contentTypes: ['application/zrok.v1+json'], - method: 'delete', - security: [ - { - id: 'key' - } - ] -} diff --git a/ui/src/api/types.js b/ui/src/api/types.js deleted file mode 100644 index 625431a6..00000000 --- a/ui/src/api/types.js +++ /dev/null @@ -1,341 +0,0 @@ -/** @module types */ -// Auto-generated, edits will be overwritten - -/** - * @typedef accessRequest - * @memberof module:types - * - * @property {string} envZId - * @property {string} shrToken - */ - -/** - * @typedef accessResponse - * @memberof module:types - * - * @property {string} frontendToken - * @property {string} backendMode - */ - -/** - * @typedef authUser - * @memberof module:types - * - * @property {string} username - * @property {string} password - */ - -/** - * @typedef changePasswordRequest - * @memberof module:types - * - * @property {string} email - * @property {string} oldPassword - * @property {string} newPassword - */ - -/** - * @typedef configuration - * @memberof module:types - * - * @property {string} version - * @property {string} touLink - * @property {boolean} invitesOpen - * @property {boolean} requiresInviteToken - * @property {string} inviteTokenContact - * @property {module:types.passwordRequirements} passwordRequirements - */ - -/** - * @typedef createFrontendRequest - * @memberof module:types - * - * @property {string} zId - * @property {string} url_template - * @property {string} public_name - * @property {string} permissionMode - */ - -/** - * @typedef createFrontendResponse - * @memberof module:types - * - * @property {string} token - */ - -/** - * @typedef deleteFrontendRequest - * @memberof module:types - * - * @property {string} frontendToken - */ - -/** - * @typedef disableRequest - * @memberof module:types - * - * @property {string} identity - */ - -/** - * @typedef enableRequest - * @memberof module:types - * - * @property {string} description - * @property {string} host - */ - -/** - * @typedef enableResponse - * @memberof module:types - * - * @property {string} identity - * @property {string} cfg - */ - -/** - * @typedef environment - * @memberof module:types - * - * @property {string} description - * @property {string} host - * @property {string} address - * @property {string} zId - * @property {module:types.sparkData} activity - * @property {boolean} limited - * @property {number} createdAt - * @property {number} updatedAt - */ - -/** - * @typedef environmentAndResources - * @memberof module:types - * - * @property {module:types.environment} environment - * @property {module:types.frontends} frontends - * @property {module:types.shares} shares - */ - -/** - * @typedef frontend - * @memberof module:types - * - * @property {number} id - * @property {string} token - * @property {string} shrToken - * @property {string} zId - * @property {number} createdAt - * @property {number} updatedAt - */ - -/** - * @typedef inviteTokenGenerateRequest - * @memberof module:types - * - * @property {string[]} tokens - */ - -/** - * @typedef inviteRequest - * @memberof module:types - * - * @property {string} email - * @property {string} token - */ - -/** - * @typedef loginRequest - * @memberof module:types - * - * @property {string} email - * @property {string} password - */ - -/** - * @typedef metrics - * @memberof module:types - * - * @property {string} scope - * @property {string} id - * @property {number} period - * @property {module:types.metricsSample[]} samples - */ - -/** - * @typedef metricsSample - * @memberof module:types - * - * @property {number} rx - * @property {number} tx - * @property {number} timestamp - */ - -/** - * @typedef overview - * @memberof module:types - * - * @property {boolean} accountLimited - * @property {module:types.environmentAndResources[]} environments - */ - -/** - * @typedef passwordRequirements - * @memberof module:types - * - * @property {number} length - * @property {boolean} requireCapital - * @property {boolean} requireNumeric - * @property {boolean} requireSpecial - * @property {string} validSpecialCharacters - */ - -/** - * @typedef principal - * @memberof module:types - * - * @property {number} id - * @property {string} email - * @property {string} token - * @property {boolean} limitless - * @property {boolean} admin - */ - -/** - * @typedef publicFrontend - * @memberof module:types - * - * @property {string} token - * @property {string} zId - * @property {string} urlTemplate - * @property {string} publicName - * @property {number} createdAt - * @property {number} updatedAt - */ - -/** - * @typedef registerRequest - * @memberof module:types - * - * @property {string} token - * @property {string} password - */ - -/** - * @typedef registerResponse - * @memberof module:types - * - * @property {string} token - */ - -/** - * @typedef resetPasswordRequest - * @memberof module:types - * - * @property {string} token - * @property {string} password - */ - -/** - * @typedef share - * @memberof module:types - * - * @property {string} token - * @property {string} zId - * @property {string} shareMode - * @property {string} backendMode - * @property {string} frontendSelection - * @property {string} frontendEndpoint - * @property {string} backendProxyEndpoint - * @property {boolean} reserved - * @property {module:types.sparkData} activity - * @property {boolean} limited - * @property {number} createdAt - * @property {number} updatedAt - */ - -/** - * @typedef shareRequest - * @memberof module:types - * - * @property {string} envZId - * @property {string} shareMode - * @property {string[]} frontendSelection - * @property {string} backendMode - * @property {string} backendProxyEndpoint - * @property {string} authScheme - * @property {module:types.authUser[]} authUsers - * @property {string} oauthProvider - * @property {string[]} oauthEmailDomains - * @property {string} oauthAuthorizationCheckInterval - * @property {boolean} reserved - * @property {string} permissionMode - * @property {string[]} accessGrants - * @property {string} uniqueName - */ - -/** - * @typedef shareResponse - * @memberof module:types - * - * @property {string[]} frontendProxyEndpoints - * @property {string} shrToken - */ - -/** - * @typedef sparkDataSample - * @memberof module:types - * - * @property {number} rx - * @property {number} tx - */ - -/** - * @typedef unaccessRequest - * @memberof module:types - * - * @property {string} frontendToken - * @property {string} envZId - * @property {string} shrToken - */ - -/** - * @typedef unshareRequest - * @memberof module:types - * - * @property {string} envZId - * @property {string} shrToken - * @property {boolean} reserved - */ - -/** - * @typedef updateFrontendRequest - * @memberof module:types - * - * @property {string} frontendToken - * @property {string} publicName - * @property {string} urlTemplate - */ - -/** - * @typedef updateShareRequest - * @memberof module:types - * - * @property {string} shrToken - * @property {string} backendProxyEndpoint - * @property {string[]} addAccessGrants - * @property {string[]} removeAccessGrants - */ - -/** - * @typedef verifyRequest - * @memberof module:types - * - * @property {string} token - */ - -/** - * @typedef verifyResponse - * @memberof module:types - * - * @property {string} email - */ diff --git a/ui/src/assets/zrok-1.0.0-rocket-green.svg b/ui/src/assets/zrok-1.0.0-rocket-green.svg new file mode 100644 index 00000000..b8596ca7 --- /dev/null +++ b/ui/src/assets/zrok-1.0.0-rocket-green.svg @@ -0,0 +1,53 @@ + + + + diff --git a/ui/src/assets/zrok-1.0.0-rocket-purple.svg b/ui/src/assets/zrok-1.0.0-rocket-purple.svg new file mode 100644 index 00000000..635e366d --- /dev/null +++ b/ui/src/assets/zrok-1.0.0-rocket-purple.svg @@ -0,0 +1,56 @@ + + + + diff --git a/ui/src/assets/zrok-1.0.0-rocket.svg b/ui/src/assets/zrok-1.0.0-rocket.svg new file mode 100644 index 00000000..631cba00 --- /dev/null +++ b/ui/src/assets/zrok-1.0.0-rocket.svg @@ -0,0 +1,48 @@ + + + + diff --git a/ui/src/components/password.js b/ui/src/components/password.js deleted file mode 100644 index 2051433e..00000000 --- a/ui/src/components/password.js +++ /dev/null @@ -1,100 +0,0 @@ -import React, {useEffect, useState, Fragment} from "react"; -import {Container, Form, Row} from "react-bootstrap"; - -const PasswordForm = (props) => { - const [password, setPassword] = useState(''); - const [confirm, setConfirm] = useState(''); - - const passwordMismatchMessage =

Entered passwords do not match!

- const passwordTooShortMessage =

Entered password too short! ({props.passwordLength} characters, minimum)

- const passwordRequiresCapitalMessage =

Entered password requires a capital letter!

- const passwordRequiresNumericMessage =

Entered password requires a digit!

- const passwordRequiresSpecialMessage =

Entered password requires a special character! ({props.passwordValidSpecialCharacters.split("").join(" ")})

- - useEffect(() => { - if (confirm === "" && password === "") { - return - } - if (password.length < props.passwordLength) { - props.setMessage(passwordTooShortMessage) - return; - } - if (props.passwordRequireCapital && !/[A-Z]/.test(password)) { - props.setMessage(passwordRequiresCapitalMessage) - return; - } - if (props.passwordRequireNumeric && !/\d/.test(password)) { - props.setMessage(passwordRequiresNumericMessage) - return; - } - if (props.passwordRequireSpecial) { - if (!props.passwordValidSpecialCharacters.split("").some(v => password.includes(v))) { - props.setMessage(passwordRequiresSpecialMessage) - return; - } - } - if (confirm !== password) { - props.setMessage(passwordMismatchMessage) - return; - } - props.setParentPassword(password) - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [password, confirm]) - - return ( - - { - (props.passwordLength > 0 || props.passwordRequireCapital || props.passwordRequireNumeric || props.passwordRequireSpecial) && -

Password Requirements

- } - { - props.passwordLength > 0 && - Minimum Length of {props.passwordLength} - } - { - props.passwordRequireCapital && - Requires at least 1 Capital Letter - } - { - props.passwordRequireNumeric && - Requires at least 1 Digit - } - { - props.passwordRequireSpecial && - - Requires at least 1 Special Character - {props.passwordValidSpecialCharacters.split("").join(" ")} - - } - - - { props.setMessage(null); setPassword(t.target.value);}} - value={password} - /> - - - - { props.setMessage(null); setConfirm(t.target.value);}} - value={confirm} - /> - - -
- ) -}; - -PasswordForm.defaultProps = { - passwordLength: 0, - passwordRequireCapital: false, - passwordRequireNumeric: false, - passwordRequireSpecial: false, - passwordValidSpecialCharacters: "" -} - -export default PasswordForm; \ No newline at end of file diff --git a/ui/src/console/Console.js b/ui/src/console/Console.js deleted file mode 100644 index fc36ae1c..00000000 --- a/ui/src/console/Console.js +++ /dev/null @@ -1,89 +0,0 @@ -import {Col, Container, Nav, Navbar, NavDropdown, Row} from "react-bootstrap"; -import {useEffect, useState} from "react"; -import Visualizer from "./visualizer/Visualizer"; -import Enable from "./modals/Enable"; -import Version from "./modals/Version"; -import * as metadata from "../api/metadata"; -import Detail from "./detail/Detail"; - -const Console = (props) => { - const [showEnableModal, setShowEnableModal] = useState(false); - const openEnableModal = () => setShowEnableModal(true); - const closeEnableModal = () => setShowEnableModal(false); - - const [showVersionModal, setShowVersionModal] = useState(false); - const openVersionModal = () => setShowVersionModal(true); - const closeVersionModal = () => setShowVersionModal(false); - - const [overview, setOverview] = useState({}); - - useEffect(() => { - let mounted = true; - metadata.overview().then(resp => { - if(mounted) { - setOverview(resp.data); - } - }); - }, []); - - useEffect(() => { - let mounted = true; - let interval = setInterval(() => { - metadata.overview().then(resp => { - if(mounted) { - setOverview(resp.data); - } - }) - }, 1000); - return () => { - mounted = false; - clearInterval(interval); - } - }, []); - - const defaultSelection = {id: props.user.token, type: "account"}; - const [selection, setSelection] = useState(defaultSelection); - - return ( - - - - - Ziggy{' '} - zrok - - - - - - - - - - - - - - - - - - - - - ); -} - -export default Console; \ No newline at end of file diff --git a/ui/src/console/PropertyTable.js b/ui/src/console/PropertyTable.js deleted file mode 100644 index 14ccf711..00000000 --- a/ui/src/console/PropertyTable.js +++ /dev/null @@ -1,54 +0,0 @@ -import {useEffect, useState} from "react"; -import DataTable from "react-data-table-component"; - -const objectToRows = (obj) => { - let rows = []; - for(const key in obj) { - rows.push({ - property: key, - value: obj[key] - }); - } - return rows; -}; - -const camelToWords = (s) => s.replace(/([A-Z])/g, ' $1').replace(/^./, function(str){ return str.toUpperCase(); }); - -const rowToValue = (row) => { - if(row.property.endsWith("At")) { - return new Date(row.value).toLocaleString(); - } - return row.value.toString(); -}; - -const PropertyTable = (props) => { - const [data, setData] = useState([]); - - useEffect(() => { - setData(objectToRows(props.object)); - }, [props.object]); - - const columns = [ - { - name: "Property", - selector: row => camelToWords(row.property), - sortable: true - }, - { - name: "Value", - cell: row => { - if(props.custom) { - if(row.property in props.custom) { - return props.custom[row.property](row); - } - } - return rowToValue(row) - }, - grow: 3 - } - ]; - - return ; -}; - -export default PropertyTable; \ No newline at end of file diff --git a/ui/src/console/SecretToggle.js b/ui/src/console/SecretToggle.js deleted file mode 100644 index 4088cee8..00000000 --- a/ui/src/console/SecretToggle.js +++ /dev/null @@ -1,29 +0,0 @@ -import {useState} from "react"; -import Icon from "@mdi/react"; -import {mdiEyeOffOutline, mdiEyeOutline} from "@mdi/js"; - -const SecretToggle = (props) => { - const [showSecret, setShowSecret] = useState(false); - - const secretString = (s) => { - let out = ""; - for(let i = 0; i < s.length; i++) { - out += "*"; - } - return out; - } - - const toggleShow = () => setShowSecret(!showSecret); - - if(showSecret) { - return ( - {props.secret} - ); - } else { - return ( - {secretString(props.secret)} - ) - } -}; - -export default SecretToggle; \ No newline at end of file diff --git a/ui/src/console/detail/Detail.js b/ui/src/console/detail/Detail.js deleted file mode 100644 index 582d0503..00000000 --- a/ui/src/console/detail/Detail.js +++ /dev/null @@ -1,32 +0,0 @@ -import AccountDetail from "./account/AccountDetail"; -import ShareDetail from "./share/ShareDetail"; -import EnvironmentDetail from "./environment/EnvironmentDetail"; -import AccessDetail from "./access/AccessDetail"; - -const Detail = (props) => { - let detailComponent =

{props.selection.id} ({props.selection.type})

; - - switch(props.selection.type) { - case "frontend": - detailComponent = ; - break; - - case "environment": - detailComponent = ; - break; - - case "share": - detailComponent = ; - break; - - default: - detailComponent = ; - break; - } - - return ( -
{detailComponent}
- ); -}; - -export default Detail; \ No newline at end of file diff --git a/ui/src/console/detail/access/AccessDetail.js b/ui/src/console/detail/access/AccessDetail.js deleted file mode 100644 index 3845c9bc..00000000 --- a/ui/src/console/detail/access/AccessDetail.js +++ /dev/null @@ -1,34 +0,0 @@ -import {mdiAccessPointNetwork} from "@mdi/js"; -import Icon from "@mdi/react"; -import {useEffect, useState} from "react"; -import {getFrontendDetail} from "../../../api/metadata"; -import {Tab, Tabs} from "react-bootstrap"; -import DetailTab from "./DetailTab"; -import ActionsTab from "./ActionsTab"; - -const AccessDetail = (props) => { - const [detail, setDetail] = useState({}); - - useEffect(() => { - getFrontendDetail(props.selection.feId) - .then(resp => { - setDetail(resp.data); - }); - }, [props.selection]); - - return ( -
-

{" "}{detail.token}

- - - - - - - - -
- ); -} - -export default AccessDetail; \ No newline at end of file diff --git a/ui/src/console/detail/access/ActionsTab.js b/ui/src/console/detail/access/ActionsTab.js deleted file mode 100644 index 37b978a5..00000000 --- a/ui/src/console/detail/access/ActionsTab.js +++ /dev/null @@ -1,27 +0,0 @@ -import * as share from "../../../api/share"; -import {Button} from "react-bootstrap"; - -const ActionsTab = (props) => { - const deleteFrontend = (feToken, shrToken, envZId) => { - if(window.confirm("Really delete access frontend '" + feToken + "' for share '" + shrToken + "'?")) { - share.unaccess({body: {frontendToken: feToken, shrToken: shrToken, envZId: envZId}}).then(resp => { - console.log(resp); - }); - } - } - - return ( -
-

Delete your access frontend '{props.frontend.token}' for share '{props.frontend.shrToken}'?

-

- This will remove your zrok access frontend from this environment. You will still need to - terminate the corresponding zrok access process in your local environment. -

- -
- ); -}; - -export default ActionsTab; \ No newline at end of file diff --git a/ui/src/console/detail/access/DetailTab.js b/ui/src/console/detail/access/DetailTab.js deleted file mode 100644 index 65362c99..00000000 --- a/ui/src/console/detail/access/DetailTab.js +++ /dev/null @@ -1,14 +0,0 @@ -import SecretToggle from "../../SecretToggle"; -import PropertyTable from "../../PropertyTable"; - -const DetailTab = (props) => { - const customProperties = { - zId: row => - } - - return ( - - ); -}; - -export default DetailTab; \ No newline at end of file diff --git a/ui/src/console/detail/account/AccountDetail.js b/ui/src/console/detail/account/AccountDetail.js deleted file mode 100644 index 07736825..00000000 --- a/ui/src/console/detail/account/AccountDetail.js +++ /dev/null @@ -1,39 +0,0 @@ -import {mdiAccountBox} from "@mdi/js"; -import Icon from "@mdi/react"; -import PropertyTable from "../../PropertyTable"; -import {Tab, Tabs} from "react-bootstrap"; -import SecretToggle from "../../SecretToggle"; -import React from "react"; -import MetricsTab from "./MetricsTab"; -import EnvironmentsTab from "./EnvironmentsTab"; -import ActionsTab from "./ActionsTab"; - -const AccountDetail = (props) => { - const customProperties = { - token: row => - } - - return ( -
-

{" "}{props.user.email}

- - - - - - - - - - - - - - -
- ); -} - - - -export default AccountDetail; \ No newline at end of file diff --git a/ui/src/console/detail/account/ActionsTab.js b/ui/src/console/detail/account/ActionsTab.js deleted file mode 100644 index 0b623b92..00000000 --- a/ui/src/console/detail/account/ActionsTab.js +++ /dev/null @@ -1,50 +0,0 @@ -import React, {useState} from "react"; -import ChangePassword from "./actions/ChangePassword"; -import {Button} from "react-bootstrap"; -import RegenerateToken from "./actions/RegenerateToken"; - -const ActionsTab = (props) => { - const [showRegenerateTokenModal, setShowRegenerateTokenModal] = useState(false); - const openRegenerateTokenModal = () => setShowRegenerateTokenModal(true); - const closeRegenerateTokenModal = () => setShowRegenerateTokenModal(false); - - const [showChangePasswordModal, setShowChangePasswordModal] = useState(false); - const openChangePasswordModal = () => setShowChangePasswordModal(true); - const closeChangePasswordModal = () => setShowChangePasswordModal(false); - - return ( -
-
-

Change Password?

-

Change the password used to log into the zrok web console.

- - -
- -
- -
-

DANGER: Regenerate your account token?

-

- Regenerating your account token will stop all environments and shares from operating properly! -

-

- You will need to manually edit your - ${HOME}/.zrok/environment.json files (in each environment) to use the new - zrok_token. Updating these files will restore the functionality of your environments. -

-

- Alternatively, you can just zrok disable any enabled environments and re-enable using the - new account token. Running zrok disable will delete your environments and - any shares they contain (including reserved shares). So if you have environments and reserved shares you - need to preserve, your best option is to update the zrok_token in those environments as - described above. -

- - -
-
- ) -} - -export default ActionsTab; \ No newline at end of file diff --git a/ui/src/console/detail/account/EnvironmentsTab.js b/ui/src/console/detail/account/EnvironmentsTab.js deleted file mode 100644 index 4141365b..00000000 --- a/ui/src/console/detail/account/EnvironmentsTab.js +++ /dev/null @@ -1,71 +0,0 @@ -import React, {useEffect, useState} from "react"; -import * as metadata from "../../../api/metadata"; -import {Area, AreaChart, ResponsiveContainer} from "recharts"; -import DataTable from "react-data-table-component"; - -const EnvironmentsTab = (props) => { - const [detail, setDetail] = useState([]); - - useEffect(() => { - metadata.getAccountDetail() - .then(resp => { - setDetail(resp.data); - }); - }, [props.selection]); - - useEffect(() => { - let mounted = true; - let interval = setInterval(() => { - metadata.getAccountDetail() - .then(resp => { - if(mounted) { - setDetail(resp.data); - } - }); - }, 5000); - return () => { - mounted = false; - clearInterval(interval); - } - }, [props.selection]); - - const columns = [ - { - name: "Description", - selector: row => row.description, - sortable: true - }, - { - name: "Address", - grow: 0.5, - selector: row => row.address, - sortable: true - }, - { - name: "Activity", - grow: 0.5, - cell: row => { - return - - v.tx ? v.tx : 0} stroke={"#231069"} fill={"#04adef"} isAnimationActive={false} dot={false} /> - v.rx ? v.rx * -1 : 0} stroke={"#231069"} fill={"#9BF316"} isAnimationActive={false} dot={false} /> - - - } - } - ]; - - return ( -
- No environments in account

} - /> -
- ); -} - -export default EnvironmentsTab; \ No newline at end of file diff --git a/ui/src/console/detail/account/MetricsTab.js b/ui/src/console/detail/account/MetricsTab.js deleted file mode 100644 index fdcbab7d..00000000 --- a/ui/src/console/detail/account/MetricsTab.js +++ /dev/null @@ -1,55 +0,0 @@ -import React, {useEffect, useState} from "react"; -import {buildMetrics} from "../../metrics/util"; -import * as metadata from "../../../api/metadata"; -import MetricsView from "../../metrics/MetricsView"; - -const MetricsTab = () => { - const [metrics30, setMetrics30] = useState(buildMetrics([])); - const [metrics7, setMetrics7] = useState(buildMetrics([])); - const [metrics1, setMetrics1] = useState(buildMetrics([])); - - useEffect(() => { - metadata.getAccountMetrics() - .then(resp => { - setMetrics30(buildMetrics(resp.data)); - }); - metadata.getAccountMetrics({duration: "168h"}) - .then(resp => { - setMetrics7(buildMetrics(resp.data)); - }); - metadata.getAccountMetrics({duration: "24h"}) - .then(resp => { - setMetrics1(buildMetrics(resp.data)); - }); - }, []); - - useEffect(() => { - let mounted = true; - let interval = setInterval(() => { - metadata.getAccountMetrics() - .then(resp => { - if(mounted) { - setMetrics30(buildMetrics(resp.data)); - } - }); - metadata.getAccountMetrics({duration: "168h"}) - .then(resp => { - setMetrics7(buildMetrics(resp.data)); - }); - metadata.getAccountMetrics({duration: "24h"}) - .then(resp => { - setMetrics1(buildMetrics(resp.data)); - }); - }, 5000); - return () => { - mounted = false; - clearInterval(interval); - } - }, []); - - return ( - - ); -} - -export default MetricsTab; \ No newline at end of file diff --git a/ui/src/console/detail/account/actions/ChangePassword.js b/ui/src/console/detail/account/actions/ChangePassword.js deleted file mode 100644 index d0dab991..00000000 --- a/ui/src/console/detail/account/actions/ChangePassword.js +++ /dev/null @@ -1,142 +0,0 @@ -import React, {useEffect, useState} from "react"; -import * as account from "../../../../api/account"; -import {Button, Container, Form, Row} from "react-bootstrap"; -import Modal from "react-bootstrap/Modal"; -import * as metadata from "../../../../api/metadata"; - -const validatePassword = (password, l, rc, rn, rs, spc, cb) => { - if(password.length < l) { - cb(false, "Entered password is too short! (" + l + " characters minimum)!"); - return; - } - if(rc && !/[A-Z]/.test(password)) { - cb(false, "Entered password requires a capital letter!"); - return; - } - if(rn && !/\d/.test(password)) { - cb(false, "Entered password requires a digit!"); - return; - } - if(rs) { - if(!spc.split("").some(v => password.includes(v))) { - cb(false, "Entered password requires a special character!"); - return; - } - } - return cb(true, ""); -} - -const ChangePassword = (props) => { - const [oldPassword, setOldPassword] = useState(''); - const [newPassword, setNewPassword] = useState(''); - const [confirmPassword, setConfirmPassword] = useState(''); - const [message, setMessage] = useState(''); - - const [passwordLength, setPasswordLength] = useState(8); - const [passwordRequireCapital, setPasswordRequireCapital] = useState(true); - const [passwordRequireNumeric, setPasswordRequireNumeric] = useState(true); - const [passwordRequireSpecial, setPasswordRequireSpecial] = useState(true); - const [passwordValidSpecialCharacters, setPasswordValidSpecialCharacters] = useState(""); - - useEffect(() => { - metadata.configuration().then(resp => { - if (!resp.error) { - setPasswordLength(resp.data.passwordRequirements.length) - setPasswordRequireCapital(resp.data.passwordRequirements.requireCapital) - setPasswordRequireNumeric(resp.data.passwordRequirements.requireNumeric) - setPasswordRequireSpecial(resp.data.passwordRequirements.requireSpecial) - setPasswordValidSpecialCharacters(resp.data.passwordRequirements.validSpecialCharacters) - } - }).catch(err => { - console.log("error getting configuration", err); - }); - }, []) - - const handleSubmit = async e => { - e.preventDefault(); - - let ok = false; - validatePassword(newPassword, - passwordLength, - passwordRequireCapital, - passwordRequireNumeric, - passwordRequireSpecial, - passwordValidSpecialCharacters, (isOk, msg) => { ok = isOk; setMessage(msg); }) - if(!ok) { - return; - } - - if(confirmPassword !== newPassword) { - setMessage("New password and confirmation do not match!"); - return; - } - - account.changePassword({ body: { oldPassword: oldPassword, newPassword: newPassword, email: props.user.email } }) - .then(resp => { - if (!resp.error) { - console.log("resp", resp) - setMessage("Password successfully changed!"); - } else { - setMessage("Failure changing password! Is old password correct?"); - } - }).catch(resp => { - console.log("resp", resp) - setMessage("Failure changing password! Is old password correct?") - }) - - } - - let hide = () => { - props.onHide(); - setMessage(""); - setOldPassword(""); - setNewPassword(""); - setConfirmPassword(""); - } - - return ( - - Change Password - -
- - - { setMessage(''); setOldPassword(t.target.value); }} - value={oldPassword} - style={{ marginBottom: "1em" }} - /> - - - { setMessage(''); setNewPassword(t.target.value); }} - value={newPassword} - style={{ marginBottom: "1em" }} - /> - - - { setMessage(''); setConfirmPassword(t.target.value); }} - value={confirmPassword} - /> - - -

{message}

-
- - - -
-
-
-
- ); -} - -export default ChangePassword; \ No newline at end of file diff --git a/ui/src/console/detail/account/actions/RegenerateToken.js b/ui/src/console/detail/account/actions/RegenerateToken.js deleted file mode 100644 index b63022e8..00000000 --- a/ui/src/console/detail/account/actions/RegenerateToken.js +++ /dev/null @@ -1,82 +0,0 @@ -import Modal from "react-bootstrap/Modal"; -import {Button, Container, Form, Row} from "react-bootstrap"; -import React, {useState} from "react"; -import * as account from "../../../../api/account"; - -const RegenerateToken = (props) => { - const [confirmEmail, setConfirmEmail] = useState(''); - const [message, setMessage] = useState(''); - - const hide = () => { - props.onHide(); - setConfirmEmail(''); - setMessage(''); - }; - - const handleSubmit = (event) => { - event.preventDefault(); - - if(confirmEmail !== props.user.email) { - setMessage("Email address confirmation does not match!"); - return; - } - - account.regenerateToken({body: {emailAddress: props.user.email}}) - .then(resp => { - console.log(resp); - let user = JSON.parse(localStorage.getItem('user')); - localStorage.setItem('user', JSON.stringify({ - email: user.email, - token: resp.data.token - })); - document.dispatchEvent(new Event('storage')); - setMessage("Your new account token is: " + resp.data.token); - }).catch(err => { - setMessage("Account token regeneration failed!"); - console.log("account token regeneration failed", err); - }); - }; - - return ( - - Are you very sure? - -
- -

- Did you read the warning on the previous screen? This action will reset all of your active - environments and shares! -

-

- You will need to update each of - your ${HOME}/.zrok/environments.json files - with your new token to allow them to continue working! -

-

- Hit Escape or click the 'X' to abort! -

- - { - setMessage(''); - setConfirmEmail(t.target.value); - }} - value={confirmEmail} - style={{marginBottom: "1em"}} - /> - - -

{message}

-
- - - -
-
-
-
- ); -}; - -export default RegenerateToken; \ No newline at end of file diff --git a/ui/src/console/detail/environment/ActionsTab.js b/ui/src/console/detail/environment/ActionsTab.js deleted file mode 100644 index 4a242829..00000000 --- a/ui/src/console/detail/environment/ActionsTab.js +++ /dev/null @@ -1,25 +0,0 @@ -import {Button} from "react-bootstrap"; -import * as environment from "../../../api/environment"; - -const ActionsTab = (props) => { - const deleteEnvironment = (envZId) => { - if(window.confirm("Really delete environment '" + envZId + "' and all shares within?")) { - environment.disable({body: {identity: envZId}}).then(resp => { - console.log(resp); - }); - } - } - - return ( -
-

Delete your environment '{props.environment.description}' ({props.environment.zId})?

-

- This will remove all shares from this environment, and will remove the environment from the network. You - will still need to terminate backends and disable your local environment. -

- -
- ); -}; - -export default ActionsTab; \ No newline at end of file diff --git a/ui/src/console/detail/environment/DetailTab.js b/ui/src/console/detail/environment/DetailTab.js deleted file mode 100644 index 458b7977..00000000 --- a/ui/src/console/detail/environment/DetailTab.js +++ /dev/null @@ -1,14 +0,0 @@ -import PropertyTable from "../../PropertyTable"; -import SecretToggle from "../../SecretToggle"; - -const DetailTab = (props) => { - const customProperties = { - zId: row => - } - - return ( - - ); -}; - -export default DetailTab; \ No newline at end of file diff --git a/ui/src/console/detail/environment/EnvironmentDetail.js b/ui/src/console/detail/environment/EnvironmentDetail.js deleted file mode 100644 index 818a4d97..00000000 --- a/ui/src/console/detail/environment/EnvironmentDetail.js +++ /dev/null @@ -1,45 +0,0 @@ -import {Tab, Tabs} from "react-bootstrap"; -import SharesTab from "./SharesTab"; -import {useEffect, useState} from "react"; -import Icon from "@mdi/react"; -import {mdiConsoleNetwork} from "@mdi/js"; -import {getEnvironmentDetail} from "../../../api/metadata"; -import DetailTab from "./DetailTab"; -import ActionsTab from "./ActionsTab"; -import MetricsTab from "./MetricsTab"; - -const EnvironmentDetail = (props) => { - const [detail, setDetail] = useState({}); - - useEffect(() => { - getEnvironmentDetail(props.selection.envZId) - .then(resp => { - setDetail(resp.data); - }); - }, [props.selection]); - - if(detail.environment) { - return ( -
-

{" "}{detail.environment.description}

- - - - - - - - - - - - - - -
- ); - } - return <>; -}; - -export default EnvironmentDetail; \ No newline at end of file diff --git a/ui/src/console/detail/environment/MetricsTab.js b/ui/src/console/detail/environment/MetricsTab.js deleted file mode 100644 index 4e46dd6f..00000000 --- a/ui/src/console/detail/environment/MetricsTab.js +++ /dev/null @@ -1,57 +0,0 @@ -import React, {useEffect, useState} from "react"; -import {buildMetrics} from "../../metrics/util"; -import * as metadata from "../../../api/metadata"; -import MetricsView from "../../metrics/MetricsView"; - -const MetricsTab = (props) => { - const [metrics30, setMetrics30] = useState(buildMetrics([])); - const [metrics7, setMetrics7] = useState(buildMetrics([])); - const [metrics1, setMetrics1] = useState(buildMetrics([])); - - useEffect(() => { - metadata.getEnvironmentMetrics(props.selection.envZId) - .then(resp => { - setMetrics30(buildMetrics(resp.data)); - }); - metadata.getEnvironmentMetrics(props.selection.envZId, {duration: "168h"}) - .then(resp => { - setMetrics7(buildMetrics(resp.data)); - }); - metadata.getEnvironmentMetrics(props.selection.envZId, {duration: "24h"}) - .then(resp => { - setMetrics1(buildMetrics(resp.data)); - }); - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [props.selection.id]); - - useEffect(() => { - let mounted = true; - let interval = setInterval(() => { - metadata.getEnvironmentMetrics(props.selection.envZId) - .then(resp => { - if(mounted) { - setMetrics30(buildMetrics(resp.data)); - } - }); - metadata.getEnvironmentMetrics(props.selection.envZId, {duration: "168h"}) - .then(resp => { - setMetrics7(buildMetrics(resp.data)); - }); - metadata.getEnvironmentMetrics(props.selection.envZId, {duration: "24h"}) - .then(resp => { - setMetrics1(buildMetrics(resp.data)); - }); - }, 5000); - return () => { - mounted = false; - clearInterval(interval); - } - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [props.selection.id]); - - return ( - - ); -}; - -export default MetricsTab; \ No newline at end of file diff --git a/ui/src/console/detail/environment/SharesTab.js b/ui/src/console/detail/environment/SharesTab.js deleted file mode 100644 index 301ed8a3..00000000 --- a/ui/src/console/detail/environment/SharesTab.js +++ /dev/null @@ -1,75 +0,0 @@ -import * as metadata from "../../../api/metadata"; -import React, {useEffect, useState} from "react"; -import DataTable from 'react-data-table-component'; -import {Area, AreaChart, ResponsiveContainer} from "recharts"; - -const SharesTab = (props) => { - const [detail, setDetail] = useState({}); - - useEffect(() => { - metadata.getEnvironmentDetail(props.selection.envZId) - .then(resp => { - setDetail(resp.data); - }); - }, [props.selection]); - - useEffect(() => { - let mounted = true; - let interval = setInterval(() => { - metadata.getEnvironmentDetail(props.selection.envZId) - .then(resp => { - if(mounted) { - setDetail(resp.data); - } - }); - }, 5000); - return () => { - mounted = false; - clearInterval(interval); - } - }, [props.selection]); - - const columns = [ - { - name: "Frontend", - selector: row => {row.frontendEndpoint}, - sortable: true, - }, - { - name: "Backend", - grow: 0.5, - selector: row => row.backendProxyEndpoint, - sortable: true, - hide: "lg" - }, - { - name: "Activity", - grow: 0.5, - cell: row => { - return - - v.tx ? v.tx : 0} stroke={"#231069"} fill={"#04adef"} isAnimationActive={false} dot={false} /> - v.rx ? v.rx * -1 : 0} stroke={"#231069"} fill={"#9BF316"} isAnimationActive={false} dot={false} /> - - - } - } - ]; - - if(detail.environment) { - return ( -
- No shares in environment

} - /> -
- ); - } - return <>; -} - -export default SharesTab; \ No newline at end of file diff --git a/ui/src/console/detail/share/ActionsTab.js b/ui/src/console/detail/share/ActionsTab.js deleted file mode 100644 index 8d58bcab..00000000 --- a/ui/src/console/detail/share/ActionsTab.js +++ /dev/null @@ -1,28 +0,0 @@ -import * as share from "../../../api/share"; -import {Button} from "react-bootstrap"; - -const ActionsTab = (props) => { - const deleteShare = (envZId, shrToken, reserved) => { - console.log(envZId, shrToken, reserved); - if(window.confirm("Really delete share '" + shrToken + "'?")) { - share.unshare({body: {envZId: envZId, shrToken: shrToken, reserved: reserved}}).then(resp => { - console.log(resp); - }); - } - } - - return ( -
-

Delete your share '{props.share.token}'?

-

- This will remove the share (of {props.share.backendProxyEndpoint}) from your environment, making it - unavailable. You will need to terminate the backend for this share in your local environment. -

- -
- ); -}; - -export default ActionsTab; \ No newline at end of file diff --git a/ui/src/console/detail/share/MetricsTab.js b/ui/src/console/detail/share/MetricsTab.js deleted file mode 100644 index b5289eaf..00000000 --- a/ui/src/console/detail/share/MetricsTab.js +++ /dev/null @@ -1,63 +0,0 @@ -import React, {useEffect, useState} from "react"; -import {buildMetrics} from "../../metrics/util"; -import * as metadata from "../../../api/metadata"; -import MetricsView from "../../metrics/MetricsView"; - -const MetricsTab = (props) => { - const [metrics30, setMetrics30] = useState(buildMetrics([])); - const [metrics7, setMetrics7] = useState(buildMetrics([])); - const [metrics1, setMetrics1] = useState(buildMetrics([])); - - useEffect(() => { - if(props.share.token) { - metadata.getShareMetrics(props.share.token) - .then(resp => { - setMetrics30(buildMetrics(resp.data)); - }); - metadata.getShareMetrics(props.share.token, {duration: "168h"}) - .then(resp => { - setMetrics7(buildMetrics(resp.data)); - }); - metadata.getShareMetrics(props.share.token, {duration: "24h"}) - .then(resp => { - setMetrics1(buildMetrics(resp.data)); - }); - } - }, [props.share]); - - useEffect(() => { - let mounted = true; - let interval = setInterval(() => { - if(props.share.token) { - metadata.getShareMetrics(props.share.token) - .then(resp => { - if(mounted) { - setMetrics30(buildMetrics(resp.data)); - } - }); - metadata.getShareMetrics(props.share.token, {duration: "168h"}) - .then(resp => { - if(mounted) { - setMetrics7(buildMetrics(resp.data)); - } - }); - metadata.getShareMetrics(props.share.token, {duration: "24h"}) - .then(resp => { - if(mounted) { - setMetrics1(buildMetrics(resp.data)); - } - }); - } - }, 5000); - return () => { - mounted = false; - clearInterval(interval); - } - }, [props.share]); - - return ( - - ); -} - -export default MetricsTab; \ No newline at end of file diff --git a/ui/src/console/detail/share/ShareDetail.js b/ui/src/console/detail/share/ShareDetail.js deleted file mode 100644 index d2c56d5a..00000000 --- a/ui/src/console/detail/share/ShareDetail.js +++ /dev/null @@ -1,84 +0,0 @@ -import * as metadata from "../../../api/metadata"; -import React, {useEffect, useState} from "react"; -import {mdiShareVariant} from "@mdi/js"; -import Icon from "@mdi/react"; -import PropertyTable from "../../PropertyTable"; -import {Tab, Tabs} from "react-bootstrap"; -import ActionsTab from "./ActionsTab"; -import SecretToggle from "../../SecretToggle"; -import {Area, AreaChart, ResponsiveContainer} from "recharts"; -import MetricsTab from "./MetricsTab"; - -const ShareDetail = (props) => { - const [detail, setDetail] = useState({}); - - useEffect(() => { - metadata.getShareDetail(props.selection.shrToken) - .then(resp => { - let detail = resp.data; - detail.envZId = props.selection.envZId; - setDetail(detail); - }); - }, [props.selection]); - - useEffect(() => { - let mounted = true; - let interval = setInterval(() => { - metadata.getShareDetail(props.selection.shrToken) - .then(resp => { - if(mounted) { - let detail = resp.data; - detail.envZId = props.selection.envZId; - setDetail(detail); - } - }); - }, 1000); - return () => { - mounted = false; - clearInterval(interval); - } - }, [props.selection]); - - const customProperties = { - activity: row => ( - - - v.tx ? v.tx : 0} stroke={"#231069"} fill={"#04adef"} isAnimationActive={false} dot={false} /> - v.rx ? v.rx * -1 : 0} stroke={"#231069"} fill={"#9BF316"} isAnimationActive={false} dot={false} /> - - - ), - frontendEndpoint: row => ( - {row.value} - ), - backendProxyEndpoint: row => { - if(row.value.startsWith("http://") || row.value.startsWith("https://")) { - return {row.value}; - } - return row.value; - }, - zId: row => - } - - if(detail) { - return ( -
-

{" "}{detail.backendProxyEndpoint}

- - - - - - - - - - - -
- ); - } - return <>; -} - -export default ShareDetail; \ No newline at end of file diff --git a/ui/src/console/login/Login.js b/ui/src/console/login/Login.js deleted file mode 100644 index 0a9591ea..00000000 --- a/ui/src/console/login/Login.js +++ /dev/null @@ -1,105 +0,0 @@ -import {useEffect, useState} from "react"; -import * as account from '../../api/account'; -import * as metadata from "../../api/metadata" -import {Button, Container, Form, Row} from "react-bootstrap"; -import { Link } from "react-router-dom"; - -const Login = (props) => { - const [email, setEmail] = useState(''); - const [password, setPassword] = useState(''); - const [message, setMessage] = useState(); - const [tou, setTou] = useState(); - - const errorMessage =

Login Failed!

; - - useEffect(() => { - metadata.configuration().then(resp => { - console.log(resp) - if(!resp.error) { - if (resp.data.touLink !== null && resp.data.touLink.trim() !== "") { - setTou(resp.data.touLink) - } - } - }).catch(err => { - console.log("err", err); - }); - }, []) - - const handleSubmit = async e => { - e.preventDefault() - console.log(email, password); - - account.login({body: {"email": email, "password": password}}) - .then(resp => { - if (!resp.error) { - let user = { - "email": email.toLowerCase(), - "token": resp.data - } - props.loginSuccess(user) - localStorage.setItem('user', JSON.stringify(user)) - console.log(user) - console.log('login succeeded', resp) - document.dispatchEvent(new Event('storage')) - } else { - console.log('login failed') - setMessage(errorMessage); - } - }) - .catch((resp) => { - console.log('login failed', resp) - }); - }; - - return ( -
- - - ziggy - - -

zrok

-
- - - -
- - { setMessage(null); setEmail(t.target.value); }} - value={email} - /> - - - - { setMessage(null); setPassword(t.target.value); }} - value={password} - /> - - - - -
- - Forgot Password? - -
-
-
-
- - {message} - -
-
-
-
- ) -} - -export default Login; \ No newline at end of file diff --git a/ui/src/console/metrics/MetricsView.js b/ui/src/console/metrics/MetricsView.js deleted file mode 100644 index f6b99b3c..00000000 --- a/ui/src/console/metrics/MetricsView.js +++ /dev/null @@ -1,62 +0,0 @@ -import {Col, Container, Row} from "react-bootstrap"; -import {bytesToSize} from "./util"; -import {Area, AreaChart, CartesianGrid, ResponsiveContainer, XAxis, YAxis} from "recharts"; -import moment from "moment/moment"; -import React from "react"; - -const MetricsViews = (props) => { - return ( - - - -

Last 30 Days:

- -
- - - - -

Last 7 Days:

- -
- - - - -

Last 24 Hours:

- -
- - -
- ); -} - -const MetricsSummary = (props) => { - return ( - -

Received: {bytesToSize(props.metrics.rx)}

-

Sent: {bytesToSize(props.metrics.tx)}

-
- ); -} - -const MetricsGraph = (props) => { - return ( - - - - - - v.timestamp} scale={"time"} tickFormatter={(v) => moment(v).format("MMM DD") } style={{ fontSize: '75%'}}/> - bytesToSize(v)} style={{ fontSize: '75%' }}/> - v.tx ? v.tx : 0} stackId={"1"} /> - v.rx ? v.rx : 0} stackId={"1"} /> - - - - - ); -} - -export default MetricsViews; \ No newline at end of file diff --git a/ui/src/console/metrics/util.js b/ui/src/console/metrics/util.js deleted file mode 100644 index d29de073..00000000 --- a/ui/src/console/metrics/util.js +++ /dev/null @@ -1,33 +0,0 @@ -export const buildMetrics = (m) => { - let metrics = { - data: m.samples, - rx: 0, - tx: 0 - } - if(m.samples) { - m.samples.forEach(s => { - metrics.rx += s.rx ? s.rx : 0; - metrics.tx += s.tx ? s.tx : 0; - }); - } - return metrics; -} - -export const bytesToSize = (sz) => { - let absSz = sz; - if(absSz < 0) { - absSz *= -1; - } - const unit = 1000 - if(absSz < unit) { - return '' + absSz + ' B'; - } - let div = unit - let exp = 0 - for(let n = absSz / unit; n >= unit; n /= unit) { - div *= unit; - exp++; - } - - return '' + (sz / div).toFixed(1) + ' ' + "kMGTPE"[exp] + 'B'; -} \ No newline at end of file diff --git a/ui/src/console/modals/Enable.js b/ui/src/console/modals/Enable.js deleted file mode 100644 index b464d03c..00000000 --- a/ui/src/console/modals/Enable.js +++ /dev/null @@ -1,47 +0,0 @@ -import Modal from "react-bootstrap/Modal"; -import {mdiContentCopy} from "@mdi/js"; -import Icon from "@mdi/react"; -import {useRef, useState} from "react"; -import {Overlay, Tooltip} from "react-bootstrap"; - -const Enable = (props) => { - const target = useRef(null); - const [showTooltip, setShowTooltip] = useState(false); - - const handleCopy = async () => { - let copiedText = document.getElementById("zrok-enable-command").innerHTML; - try { - await navigator.clipboard.writeText(copiedText); - - setShowTooltip(true); - setTimeout(() => setShowTooltip(false), 1000); - - } catch(err) { - console.error("failed to copy", err); - } - } - - return ( -
- - Enable Your Environment - -

To enable your shell for zrok, use this command:

-
-                    $ zrok enable {props.token}{' '}
-                        
-                
-
-
- - {(props) => ( - - Copied! - - )} - -
- ); -} - -export default Enable; \ No newline at end of file diff --git a/ui/src/console/modals/Version.js b/ui/src/console/modals/Version.js deleted file mode 100644 index 088ad6ec..00000000 --- a/ui/src/console/modals/Version.js +++ /dev/null @@ -1,30 +0,0 @@ -import {useEffect, useState} from "react"; -import * as metadata from "../../api/metadata"; -import Modal from "react-bootstrap/Modal"; - -const Version = (props) => { - const [v, setV] = useState(''); - - useEffect(() => { - let mounted = true; - metadata.version().then(resp => { - if(mounted) { - setV(resp.data); - } - }); - return () => { - mounted = false; - }; - }, []); - - return ( - - About zrok - - {v} - - - ); -} - -export default Version; \ No newline at end of file diff --git a/ui/src/console/visualizer/Network.js b/ui/src/console/visualizer/Network.js deleted file mode 100644 index 2206a185..00000000 --- a/ui/src/console/visualizer/Network.js +++ /dev/null @@ -1,100 +0,0 @@ -import {withSize} from "react-sizeme"; -import {useEffect, useRef} from "react"; -import {ForceGraph2D} from "react-force-graph"; -import * as d3 from "d3-force-3d"; -import {roundRect} from "./draw"; -import {mdiShareVariant, mdiConsole, mdiAccount, mdiAlertOctagram, mdiAccessPointNetwork} from "@mdi/js"; - -const accountIcon = new Path2D(mdiAccount); -const environmentIcon = new Path2D(mdiConsole); -const frontendIcon = new Path2D(mdiAccessPointNetwork); -const limitIcon = new Path2D(mdiAlertOctagram); -const shareIcon = new Path2D(mdiShareVariant); - -const Network = (props) => { - const targetRef = useRef(); - if(props.setRef != null) { - props.setRef(targetRef); - } - - useEffect(() => { - const fg = targetRef.current; - fg.d3Force('collide', d3.forceCollide().radius(35)); - }, []); - - const paintNode = (node, ctx) => { - let nodeColor = node.selected ? "#9BF316" : "#04adef"; - let textColor = "black"; - - ctx.textBaseline = "middle"; - ctx.textAlign = "center"; - ctx.font = "6px 'Russo One'"; - let extents = ctx.measureText(node.label); - let nodeWidth = extents.width + 10; - - ctx.fillStyle = nodeColor; - roundRect(ctx, node.x - (nodeWidth / 2), node.y - 7, nodeWidth, 14, 1.25); - ctx.fill(); - - const nodeIcon = new Path2D(); - let xform = new DOMMatrix(); - xform.translateSelf(node.x - (nodeWidth / 2) - 6, node.y - 13); - xform.scaleSelf(0.5, 0.5); - switch(node.type) { - case "share": - nodeIcon.addPath(shareIcon, xform); - break; - case "environment": - nodeIcon.addPath(environmentIcon, xform); - break; - case "frontend": - nodeIcon.addPath(frontendIcon, xform); - break; - case "account": - nodeIcon.addPath(accountIcon, xform); - break; - default: - break; - } - ctx.fill(nodeIcon); - ctx.strokeStyle = "black"; - ctx.lineWidth = 0.5; - ctx.stroke(nodeIcon); - - if(node.limited) { - const nodeLimitIcon = new Path2D(); - let limitXform = new DOMMatrix(); - limitXform.translateSelf(node.x + (nodeWidth / 2) - 6, node.y - 13); - limitXform.scaleSelf(0.5, 0.5); - nodeLimitIcon.addPath(limitIcon, limitXform); - ctx.fillStyle = "red"; - ctx.fill(nodeLimitIcon); - ctx.stroke(nodeLimitIcon); - } - - ctx.fillStyle = textColor; - ctx.fillText(node.label, node.x, node.y); - } - - const nodeClicked = (node) => { - props.setSelection(node); - } - - return ( - l.type === "data" ? 3.0 : 1.5 } - linkLineDash={(l) => l.type === "data" ? [3, 3] : [] } - nodeCanvasObject={paintNode} - backgroundColor={"linear-gradient(180deg, #0E0238 0%, #231069 100%);"} - cooldownTicks={300} - /> - ) -} - -export default withSize()(Network); \ No newline at end of file diff --git a/ui/src/console/visualizer/Visualizer.js b/ui/src/console/visualizer/Visualizer.js deleted file mode 100644 index 54182ae2..00000000 --- a/ui/src/console/visualizer/Visualizer.js +++ /dev/null @@ -1,56 +0,0 @@ -import React, {useEffect, useState} from "react"; -import {Button} from "react-bootstrap"; -import Network from "./Network"; -import {mergeGraph} from "./graph"; -import {isSelectionGone, markSelected} from "./selection"; -import {mdiFitToPageOutline} from "@mdi/js"; -import Icon from "@mdi/react"; - -const Visualizer = (props) => { - const [networkGraph, setNetworkGraph] = useState({nodes: [], links: []}); - - useEffect(() => { - setNetworkGraph(mergeGraph(networkGraph, props.user, props.overview.accountLimited, props.overview.environments)); - - if(isSelectionGone(networkGraph, props.selection)) { - // if the selection is no longer in the network graph... - console.log("resetting selection", props.selection); - props.setSelection(props.defaultSelection); - } - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [props.overview]); - - markSelected(networkGraph, props.selection); - - useEffect(() => { - markSelected(networkGraph, props.selection); - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [props.selection]); - - // fgRef to access force graph controls from this component - let fgRef = () => { }; - const setFgRef = (ref) => { fgRef = ref }; - - const centerFocus = () => { - if(fgRef) { - fgRef.current.zoomToFit(200); - } - } - - return ( -
-
- -
- -
-
-
- ) -} - -export default Visualizer; \ No newline at end of file diff --git a/ui/src/console/visualizer/draw.js b/ui/src/console/visualizer/draw.js deleted file mode 100644 index 5a7d80b1..00000000 --- a/ui/src/console/visualizer/draw.js +++ /dev/null @@ -1,12 +0,0 @@ -export const roundRect = (ctx, x, y, w, h, r) => { - if (w < 2 * r) r = w / 2; - if (h < 2 * r) r = h / 2; - ctx.beginPath(); - ctx.moveTo(x+r, y); - ctx.arcTo(x+w, y, x+w, y+h, r); - ctx.arcTo(x+w, y+h, x, y+h, r); - ctx.arcTo(x, y+h, x, y, r); - ctx.arcTo(x, y, x+w, y, r); - ctx.closePath(); - return this; -} \ No newline at end of file diff --git a/ui/src/console/visualizer/graph.js b/ui/src/console/visualizer/graph.js deleted file mode 100644 index bc450378..00000000 --- a/ui/src/console/visualizer/graph.js +++ /dev/null @@ -1,130 +0,0 @@ -const sortNodes = (nodes) => { - return nodes.sort((a, b) => { - if(a.id > b.id) { - return 1; - } - if(a.id < b.id) { - return -1; - } - return 0; - }) -} - -const nodesEqual = (a, b) => { - if(a.length !== b.length) return false; - return a.every((e, i) => e.id === b[i].id && e.limited === b[i].limited && e.label === b[i].label); -} - -export const mergeGraph = (oldGraph, user, accountLimited, newOverview) => { - let newGraph = { - nodes: [], - links: [] - } - - let accountNode = { - id: user.token, - label: user.email, - type: "account", - limited: !!accountLimited, - val: 50 - } - newGraph.nodes.push(accountNode); - - if(newOverview) { - let allShares = {}; - let allFrontends = []; - newOverview.forEach(env => { - let envNode = { - id: 'env:' + env.environment.zId, - envZId: env.environment.zId, - label: env.environment.description, - type: "environment", - limited: !!env.environment.limited || accountNode.limited, - val: 50 - }; - newGraph.nodes.push(envNode); - newGraph.links.push({ - target: accountNode.id, - source: envNode.id, - color: "#04adef" - }); - if(env.shares) { - env.shares.forEach(shr => { - let shrLabel = shr.token; - if(shr.backendProxyEndpoint !== "") { - shrLabel = shr.backendProxyEndpoint; - } - let shrNode = { - id: 'shr:' + shr.token, - shrToken: shr.token, - envZId: env.environment.zId, - label: shrLabel, - type: "share", - limited: !!shr.limited || envNode.limited, - val: 50 - }; - allShares[shr.token] = shrNode; - newGraph.nodes.push(shrNode); - newGraph.links.push({ - target: envNode.id, - source: shrNode.id, - color: "#04adef" - }); - }); - } - if(env.frontends) { - env.frontends.forEach(fe => { - let feNode = { - id: 'ac:' + fe.id, - feId: fe.id, - target: fe.shrToken, - label: fe.token, - type: "frontend", - val: 50 - } - allFrontends.push(feNode); - newGraph.nodes.push(feNode); - newGraph.links.push({ - target: envNode.id, - source: feNode.id, - color: "#04adef" - }); - }); - } - }); - allFrontends.forEach(fe => { - let target = allShares[fe.target]; - if(target) { - newGraph.links.push({ - target: target.id, - source: fe.id, - color: "#9BF316", - type: "data", - }); - } - }); - } - newGraph.nodes = sortNodes(newGraph.nodes); - - if(nodesEqual(oldGraph.nodes, newGraph.nodes)) { - // if the list of nodes is equal, the graph hasn't changed; we can just return the oldGraph and save the - // physics headaches in the visualizer. - return oldGraph; - } - - // we're going to need to recompute a new graph... but we want to maintain the instances that already exist... - - // we want to preserve nodes that exist in the new graph, and remove those that don't. - let outputNodes = oldGraph.nodes.filter(oldNode => newGraph.nodes.find(newNode => newNode.id === oldNode.id && newNode.limited === oldNode.limited && newNode.label === oldNode.label)); - let outputLinks = oldGraph.nodes.filter(oldLink => newGraph.links.find(newLink => newLink.target === oldLink.target && newLink.source === oldLink.source)); - - // and then do the opposite; add any nodes that are in newGraph that are missing from oldGraph. - outputNodes.push(...newGraph.nodes.filter(newNode => !outputNodes.find(oldNode => oldNode.id === newNode.id && oldNode.limited === newNode.limited && oldNode.label === newNode.label))); - outputLinks.push(...newGraph.links.filter(newLink => !outputLinks.find(oldLink => oldLink.target === newLink.target && oldLink.source === newLink.source))); - - return { - // we need a new outer object, to trigger react to refresh the view. - nodes: sortNodes(outputNodes), - links: outputLinks - }; -}; \ No newline at end of file diff --git a/ui/src/console/visualizer/selection.js b/ui/src/console/visualizer/selection.js deleted file mode 100644 index c6875334..00000000 --- a/ui/src/console/visualizer/selection.js +++ /dev/null @@ -1,8 +0,0 @@ -export const isSelectionGone = (networkGraph, selection) => { - // the selection is gone if the selection is not found in the network graph - return !networkGraph.nodes.find(node => selection.id === node.id); -} - -export const markSelected = (networkGraph, selection) => { - networkGraph.nodes.forEach(node => { node.selected = node.id === selection.id; }); -} \ No newline at end of file diff --git a/ui/src/index.css b/ui/src/index.css deleted file mode 100644 index 374577b3..00000000 --- a/ui/src/index.css +++ /dev/null @@ -1,142 +0,0 @@ -body { - margin: 0; - font-family: 'Russo One', sans-serif; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - padding-bottom: 15px; -} - -code, pre { - font-family: 'JetBrains Mono', Consolas, 'Courier New', monospace; -} - -#navbar { - border-radius: 0 0 15px 15px; - padding: 15px 50px 20px; -} - -.header-title { - font-family: 'Russo One', sans-serif; - font-size: 3em; - margin-left: 0.53em; - vertical-align: center; - line-height: 1.7; - color: #9BF316; -} - -.visualizer-container { - padding: 10px; - background: linear-gradient(180deg, #0E0238 0%, #231069 100%); - border-radius: 15px; - margin-top: 15px; -} -.visualizer-controls { - text-align: right; - margin-top: 5px; -} - -.detail-container { - margin-top: 15px; -} - -.zrok-datatable { - margin-top: 30px; -} - -.zrok-big-sparkline { - margin-top: 30px; - padding: 50px; -} - -.btn-close { - background: transparent url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3E%3Cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/%3E%3C/svg%3E") 50%/1em auto no-repeat; - height: 25px; - width: 25px; - border: 0; -} - -.rdt_TableRow { - font-family: 'JetBrains Mono', Consolas, 'Courier New', monospace; -} - -.nav-tabs { - margin-top: 25px; - margin-bottom: 25px; -} - -.fullscreen { - background: linear-gradient(180deg, #0E0238 0%, #231069 100%); - padding: 25px; - color: white; - display: flex; - align-items: center; - justify-content: center; -} - -.fullscreen .row { - text-align: center; - justify-content: center; -} - -.fullscreen h1 { - font-size: 64pt; -} - -.fullscreen-body { - margin-top: 6em; -} - -.fullscreen form { - margin: 15px; -} - -.fullscreen form input { - margin: 15px 0; - width: 400px; -} - -.fullscreen a { - color: #bbb; -} - -.fullscreen pre { - color: #bbb; -} - -.errorMessage { - color: deeppink; -} - -.actions-tab { - margin-top: 50px; -} -.actions-tab p { - font-family: 'JetBrains Mono', Consolas, 'Courier New', monospace; -} - -#zrok-reset-password { - margin-top: 25px; -} - -.zrok-tou { - margin: 15px; - color: white; -} - -.zrok-type { - font-family: 'Russo One', sans-serif; -} - -#controls-row { - margin-left: -30px; - margin-right: -30px; -} - -#navbar { - background: linear-gradient(180deg, #0E0238 0%, #231069 100%); -} - -#zrok-message-row { - padding: 10px; - height: 50px; -} \ No newline at end of file diff --git a/ui/src/index.js b/ui/src/index.js deleted file mode 100644 index 2fd9ff79..00000000 --- a/ui/src/index.js +++ /dev/null @@ -1,31 +0,0 @@ -import React from 'react'; -import ReactDOM from 'react-dom/client'; -import './index.css'; -import * as gateway from "./api/gateway"; -import App from "./App"; - -const root = ReactDOM.createRoot(document.getElementById('root')); -root.render( - -); - -gateway.init({ - url: '/api/v1', - getAuthorization -}); - -function getAuthorization(security) { - switch(security.id) { - case 'key': return getApiKey(); - default: console.log('default'); - } -} - -function getApiKey() { - const localUser = JSON.parse(localStorage.getItem("user")) - if(localUser) { - return Promise.resolve({ apiKey: localUser.token }); - } else { - throw new Error("token not available"); - } -} \ No newline at end of file diff --git a/ui/src/main.tsx b/ui/src/main.tsx new file mode 100644 index 00000000..fa92c2ea --- /dev/null +++ b/ui/src/main.tsx @@ -0,0 +1,14 @@ +import "./styling/index.css"; +import {StrictMode} from "react"; +import {createRoot} from "react-dom/client"; +import {ThemeProvider} from "@mui/material"; +import {theme} from "./styling/theme.ts"; +import App from "./App.tsx"; + +createRoot(document.getElementById('root')!).render( + + + + + +); \ No newline at end of file diff --git a/ui/src/model/api.ts b/ui/src/model/api.ts new file mode 100644 index 00000000..2dbefac2 --- /dev/null +++ b/ui/src/model/api.ts @@ -0,0 +1,8 @@ +import {AccountApi, Configuration, EnvironmentApi, MetadataApi, ShareApi} from "../api"; +import {User} from "./user.ts"; + +export const getApiConfig = (user: User): Configuration => { return new Configuration({headers: {"X-TOKEN": user.token}}); } +export const getAccountApi = (user: User): AccountApi => { return new AccountApi(getApiConfig(user)); } +export const getEnvironmentApi = (user: User): EnvironmentApi => { return new EnvironmentApi(getApiConfig(user)); } +export const getMetadataApi = (user: User): MetadataApi => { return new MetadataApi(getApiConfig(user)); } +export const getShareApi = (user: User): ShareApi => { return new ShareApi(getApiConfig(user)); } \ No newline at end of file diff --git a/ui/src/model/graph.ts b/ui/src/model/graph.ts new file mode 100644 index 00000000..d1c5f95e --- /dev/null +++ b/ui/src/model/graph.ts @@ -0,0 +1,197 @@ +import {Overview} from "../api"; +import {Edge, Node} from "@xyflow/react"; +import {User} from "./user.ts"; +import {stratify, tree} from "d3-hierarchy"; + +export class Graph { + nodes: Node[]; + edges: Edge[]; +} + +export const mergeGraph = (oldVov: Graph, u: User, limited: boolean, newOv: Overview): Graph => { + let newVov = new Graph(); + + let accountNode = { + id: u.token, + data: { + label: u.email, + limited: limited + }, + type: "account", + position: { x: 0, y: 0 }, + } + newVov.nodes = [ accountNode ]; + newVov.edges = []; + + if(newOv) { + let allShares = {}; + let allFrontends = []; + newOv.environments?.forEach(env => { + let envNode = { + id: env.environment?.zId!, + data: { + label: env.environment?.description, + envZId: env.environment?.zId!, + limited: limited, + empty: true + }, + type: "environment", + position: { x: 0, y: 0 }, + }; + newVov.nodes.push(envNode); + newVov.edges.push({ + id: accountNode.id + "-" + envNode.id, + source: accountNode.id!, + target: envNode.id!, + type: "straight" + }); + if(env.shares) { + envNode.data.empty = false; + env.shares.forEach(shr => { + let shrLabel = shr.shareToken!; + if(shr.backendProxyEndpoint !== "") { + shrLabel = shr.backendProxyEndpoint!; + } + let shrNode = { + id: shr.shareToken!, + data: { + label: shrLabel, + shareToken: shr.shareToken!, + envZId: env.environment?.zId!, + limited: limited, + accessed: false, + }, + type: "share", + position: { x: 0, y: 0 } + } + allShares[shr.shareToken!] = shrNode; + newVov.nodes.push(shrNode); + newVov.edges.push({ + id: envNode.id + "-" + shrNode.id, + source: envNode.id!, + target: shrNode.id!, + type: "straight" + }); + }); + } + if(env.frontends) { + envNode.data.empty = false; + env.frontends.forEach(fe => { + let feNode = { + id: fe.frontendToken!, + data: { + label: fe.frontendToken!, + feId: fe.id, + target: fe.shareToken, + bindAddress: fe.bindAddress, + backendMode: fe.backendMode, + envZId: fe.zId, + }, + type: "access", + position: { x: 0, y: 0 } + } + allFrontends.push(feNode); + newVov.nodes.push(feNode); + newVov.edges.push({ + id: envNode.id + "-" + feNode.id, + source: envNode.id!, + target: feNode.id!, + type: "straight" + }); + }); + } + }); + allFrontends.forEach(fe => { + let target = allShares[fe.data.target]; + if(target) { + target.data.accessed = true; + fe.data.ownedShare = true; + let edge: Edge = { + id: target.id + "-" + fe.id, + source: fe.id!, + sourceHandle: "share", + target: target.id!, + targetHandle: "access", + type: "access", + animated: true + } + newVov.edges.push(edge); + } + }); + } + newVov.nodes = sortNodes(newVov.nodes); + + if(nodesEqual(oldVov.nodes, newVov.nodes)) { + // if the list of nodes is equal, the graph hasn't changed; we can just return the oldGraph and save the + // physics headaches in the visualizer. + return oldVov; + } + + let outNodes = []; + if(oldVov.nodes) { + outNodes = oldVov.nodes.filter(oldNode => newVov.nodes.find(newNode => newNode.id === oldNode.id + && newNode.data.accessed === oldNode.data.accessed + && newNode.data.ownedShare === oldNode.data.ownedShare + && newNode.data.limited === oldNode.data.limited + && newNode.data.label === oldNode.data.label)); + } + let outEdges = []; + if(oldVov.edges) { + outEdges = oldVov.edges.filter(oldEdge => newVov.edges.find(newEdge => newEdge.target === oldEdge.target + && newEdge.source === oldEdge.source)); + } + + // and then do the opposite; add any nodes that are in the new overview, but missing from the old overview. + outNodes.push(...newVov.nodes.filter(newNode => !outNodes.find(oldNode => oldNode.id === newNode.id + && oldNode.data.accessed == newNode.data.accessed + && oldNode.data.ownedShare === newNode.data.ownedShare + && oldNode.data.limited === newNode.data.limited + && oldNode.data.label === newNode.data.label))); + outEdges.push(...newVov.edges.filter(newEdge => !outEdges.find(oldEdge => oldEdge.target === newEdge.target + && oldEdge.source === newEdge.source))); + + newVov.nodes = outNodes; + newVov.edges = outEdges; + return newVov; +} + +const sortNodes = (nodes) => { + return nodes.sort((a, b) => { + if(a.id > b.id) { + return 1; + } + if(a.id < b.id) { + return -1; + } + return 0; + }); +} + +export const nodesEqual = (a: Node[], b: Node[]) => { + if(!a && !b) return true; + if(a && !b) return false; + if(b && !a) return false; + if(a.length !== b.length) return false; + return a.every((e, i) => e.id === b[i].id && e.data.limited === b[i].data.limited && e.data.label === b[i].data.label); +} + +export const layout = (nodes, edges): Graph => { + if(!nodes) { + return { nodes: [], edges: [] }; + } + let g = tree(); + if(nodes.length === 0) return { nodes, edges }; + const width = 100; + const height = 75; + const hierarchy = stratify() + .id((node) => node.id) + .parentId((node) => edges.find((edge) => edge.target === node.id)?.source); + const root = hierarchy(nodes); + const layout = g.nodeSize([width * 2, height * 2])(root); + return { + nodes: layout + .descendants() + .map((node) => ({...node.data, position: {x: node.x, y: node.y}})), + edges, + } as Graph +} \ No newline at end of file diff --git a/ui/src/model/store.ts b/ui/src/model/store.ts new file mode 100644 index 00000000..4df35878 --- /dev/null +++ b/ui/src/model/store.ts @@ -0,0 +1,61 @@ +import {create} from "zustand"; +import {Environment} from "../api"; +import {Graph} from "./graph.ts"; +import {Edge, Node, Viewport} from "@xyflow/react"; +import {User} from "./user.ts"; +import {MRT_PaginationState, MRT_SortingState} from "material-react-table"; + +type StoreState = { + user: User; + limited: boolean; + graph: Graph; + environments: Array; + sparkdata: Map; + nodes: Node[]; + edges: Edge[]; + selectedNode: Node; + viewport: Viewport; + pagination: MRT_PaginationState; + sorting: MRT_SortingState; +}; + +type StoreAction = { + updateUser: (user: StoreState['user']) => void, + updateLimited: (limited: StoreState['limited']) => void, + updateGraph: (vov: StoreState['graph']) => void, + updateEnvironments: (environments: StoreState['environments']) => void, + updateSparkdata: (sparkdata: StoreState['sparkdata']) => void, + updateNodes: (nodes: StoreState['nodes']) => void, + updateEdges: (edges: StoreState['edges']) => void, + updateSelectedNode: (selectedNode: StoreState['selectedNode']) => void, + updateViewport: (viewport: StoreState['viewport']) => void, + updatePagination: (pagination: StoreState['pagination']) => void, + updateSorting: (sorting: StoreState['sorting']) => void, + }; + +const useApiConsoleStore = create((set) => ({ + user: null, + limited: false, + graph: new Graph(), + environments: new Array(), + sparkdata: new Map(), + nodes: [], + edges: [], + selectedNode: null, + viewport: {x: 0, y: 0, zoom: 1}, + pagination: {pageIndex: 0, pageSize: 15}, + sorting: [{id: "data.label", desc: false}] as MRT_SortingState, + updateUser: (user) => set({user: user}), + updateLimited: (limited) => set({limited: limited}), + updateGraph: (vov) => set({overview: vov}), + updateEnvironments: (environments) => set({environments: environments}), + updateSparkdata: (sparkdata) => set({sparkdata: sparkdata}), + updateNodes: (nodes) => set({nodes: nodes}), + updateEdges: (edges) => set({edges: edges}), + updateSelectedNode: (selectedNode) => set({selectedNode: selectedNode}), + updateViewport: (viewport) => set({viewport: viewport}), + updatePagination: (pagination) => set({pagination: pagination}), + updateSorting: (sorting) => set({sorting: sorting}) +})); + +export default useApiConsoleStore; diff --git a/ui/src/model/user.ts b/ui/src/model/user.ts new file mode 100644 index 00000000..782b02af --- /dev/null +++ b/ui/src/model/user.ts @@ -0,0 +1,4 @@ +export interface User { + email: string; + token: string; +} \ No newline at end of file diff --git a/ui/src/model/util.ts b/ui/src/model/util.ts new file mode 100644 index 00000000..d011b453 --- /dev/null +++ b/ui/src/model/util.ts @@ -0,0 +1,40 @@ +export const objectToRows = (obj) => { + let rows = []; + let count = 0; + for(const key in obj) { + rows.push({ + id: count++, + property: key, + value: obj[key] + }); + } + rows.sort((a, b) => a.property.localeCompare(b.property)); + return rows; +}; + +export const camelToWords = (s) => s.replace(/([A-Z])/g, ' $1').replace(/^./, function(str){ return str.toUpperCase(); }); + +export const bytesToSize = (bytes: number): string => { + let i = -1; + const byteUnits = [' kB', ' MB', ' GB', ' TB', 'PB', 'EB', 'ZB', 'YB']; + do { + bytes /= 1024; + i++; + } while (bytes > 1024); + return Math.max(bytes, 0.1).toFixed(1) + byteUnits[i]; +} + +export const buildMetrics = (m) => { + let metrics = { + data: m.samples, + rx: 0, + tx: 0 + } + if(m.samples) { + m.samples.forEach(s => { + metrics.rx += s.rx ? s.rx : 0; + metrics.tx += s.tx ? s.tx : 0; + }); + } + return metrics; +} \ No newline at end of file diff --git a/ui/src/register/InvalidRequest.js b/ui/src/register/InvalidRequest.js deleted file mode 100644 index e90a8892..00000000 --- a/ui/src/register/InvalidRequest.js +++ /dev/null @@ -1,16 +0,0 @@ -import {Container, Row} from "react-bootstrap"; - -const InvalidRequest = () => { - return ( - - - ziggy - - -

Invitation not found!

-
-
- ); -}; - -export default InvalidRequest; \ No newline at end of file diff --git a/ui/src/register/Register.js b/ui/src/register/Register.js deleted file mode 100644 index 539baca3..00000000 --- a/ui/src/register/Register.js +++ /dev/null @@ -1,46 +0,0 @@ -import { useParams } from 'react-router-dom'; -import {useEffect, useState} from "react"; -import * as account from "../api/account"; -import InvalidRequest from "./InvalidRequest"; -import SetPasswordForm from "./SetPasswordForm"; - -let step; - -const Register = () => { - const { token } = useParams(); - const [email, setEmail] = useState(); - const [activeRequest, setActiveRequest] = useState(true); - - useEffect(() => { - let mounted = true - account.verify({body: {token: token}}).then(resp => { - if(mounted) { - if(resp.error) { - setActiveRequest(false); - } else { - setEmail(resp.data.email); - } - } - }).catch(err => { - console.log("err", err); - if(mounted) { - setActiveRequest(false); - } - }); - return () => { - mounted = false; - } - }, [token]); - - if(activeRequest) { - step = - } else { - step = - } - - return ( -
{step}
- ) -} - -export default Register; \ No newline at end of file diff --git a/ui/src/register/SetPasswordForm.js b/ui/src/register/SetPasswordForm.js deleted file mode 100644 index 06e90e2b..00000000 --- a/ui/src/register/SetPasswordForm.js +++ /dev/null @@ -1,107 +0,0 @@ -import React, {useEffect, useState} from "react"; -import * as account from "../api/account"; -import * as metadata from "../api/metadata" -import Success from "./Success"; -import {Button, Container, Form, Row} from "react-bootstrap"; -import PasswordForm from "../components/password"; -import {Checkbox, FormControlLabel} from "@mui/material"; - -const SetPasswordForm = (props) => { - const [password, setPassword] = useState(''); - const [message, setMessage] = useState(); - const [authToken, setAuthToken] = useState(''); - const [complete, setComplete] = useState(false); - const [tou, setTou] = useState(); - const [passwordLength, setPasswordLength] = useState(10); - const [passwordRequireCapital, setPasswordRequireCapital] = useState(true); - const [passwordRequireNumeric, setPasswordRequireNumeric] = useState(true); - const [passwordRequireSpecial, setPasswordRequireSpecial] = useState(true); - const [passwordValidSpecialCharacters, setPasswordValidSpecialCharacters] = useState(""); - - const registerFailed =

Account creation failed!

- - useEffect(() => { - metadata.configuration().then(resp => { - if(!resp.error) { - if (resp.data.touLink !== undefined && resp.data.touLink.trim() !== "") { - setTou() - } - setPasswordLength(resp.data.passwordRequirements.length) - setPasswordRequireCapital(resp.data.passwordRequirements.requireCapital) - setPasswordRequireNumeric(resp.data.passwordRequirements.requireNumeric) - setPasswordRequireSpecial(resp.data.passwordRequirements.requireSpecial) - setPasswordValidSpecialCharacters(resp.data.passwordRequirements.validSpecialCharacters) - } - }).catch(err => { - console.log("err", err); - }); - }, []) - - const handleSubmit = async e => { - e.preventDefault(); - if (password !== undefined && password !== "") { - account.register({body: {"token": props.token, "password": password}}) - .then(resp => { - if(!resp.error) { - console.log("resp", resp) - setMessage(undefined); - setAuthToken(resp.data.token); - setComplete(true); - } else { - setMessage(registerFailed); - } - }) - .catch(resp => { - console.log("resp", resp); - setMessage(registerFailed); - }); - } - }; - - if(!complete) { - return ( - - - ziggy - - -

Welcome new zrok user!

-
- -

{props.email}

-
- - - -
-
- -
-
-

{tou}

-
-
- } label={I have read and agree to the above}/> -
- -
-
- - {message} - -
-
-
- ); - } - return ; -}; - -export default SetPasswordForm; \ No newline at end of file diff --git a/ui/src/register/Success.js b/ui/src/register/Success.js deleted file mode 100644 index ac492667..00000000 --- a/ui/src/register/Success.js +++ /dev/null @@ -1,61 +0,0 @@ -import Icon from "@mdi/react"; -import {mdiContentCopy} from "@mdi/js"; -import {Container, Overlay, Row, Tooltip} from "react-bootstrap"; -import React, {useRef, useState} from "react"; - -const Success = (props) => { - const [showTooltip, setShowTooltip] = useState(false); - const target = useRef(null); - - const handleCopy = async () => { - let copiedText = document.getElementById("zrok-enable-command").innerHTML; - try { - await navigator.clipboard.writeText(copiedText); - console.log("copied enable command"); - - setShowTooltip(true); - setTimeout(() => setShowTooltip(false), 1000); - - } catch(err) { - console.error("failed to copy", err); - } - } - - // clear local storage on new account registration success. - localStorage.clear(); - - return ( - - - ziggy - - -

Welcome to zrok!

-
- - - -

You can proceed to the zrok web portal and log in with your email and password.

-
- -

To enable your shell for zrok, use this command:

-
- -
-                           $ zrok enable {props.token} 
-                        
- - {(props) => ( - - Copied! - - )} - -
-
-
-
- ) -}; - -export default Success; \ No newline at end of file diff --git a/ui/src/resetPassword/ResetPassword.js b/ui/src/resetPassword/ResetPassword.js deleted file mode 100644 index fa24d6d2..00000000 --- a/ui/src/resetPassword/ResetPassword.js +++ /dev/null @@ -1,22 +0,0 @@ -import {useParams} from "react-router-dom"; -import SendRequest from "./SendRequest" -import SetNewPassword from "./SetNewPassword"; - -const ResetPassword = () => { - const { token } = useParams(); - console.log(token) - let component = undefined - if (token) { - component = - } else { - component = - } - - console.log(token); - - return ( -
{component}
- ) -} - -export default ResetPassword; \ No newline at end of file diff --git a/ui/src/resetPassword/SendRequest.js b/ui/src/resetPassword/SendRequest.js deleted file mode 100644 index 1637ed8b..00000000 --- a/ui/src/resetPassword/SendRequest.js +++ /dev/null @@ -1,74 +0,0 @@ -import { useState } from "react"; -import * as account from '../api/account'; -import { Button, Container, Form, Row } from "react-bootstrap"; - -const SendRequest = () => { - const [email, setEmail] = useState(''); - const [complete, setComplete] = useState(false); - - const handleSubmit = async e => { - e.preventDefault(); - console.log(email); - - account.resetPasswordRequest({ body: { "emailAddress": email } }) - .then(resp => { - if (!resp.error) { - setComplete(true) - } else { - setComplete(true) - } - }) - .catch((resp) => { - setComplete(true) - }) - }; - - if (!complete) { - return ( - - - ziggy - - -

zrok

-
- -

Forgot Password

-
- - - -
- - { setEmail(t.target.value); }} - value={email} - /> - - - -
-
-
-
-
- ) - } - return ( - - - ziggy - - -

Reset Password

-
- - Check your email for a password reset message! - -
- ) -} - -export default SendRequest; \ No newline at end of file diff --git a/ui/src/resetPassword/SetNewPassword.js b/ui/src/resetPassword/SetNewPassword.js deleted file mode 100644 index 97e6f345..00000000 --- a/ui/src/resetPassword/SetNewPassword.js +++ /dev/null @@ -1,108 +0,0 @@ -import {useEffect, useState} from "react"; -import * as account from '../api/account'; -import * as metadata from "../api/metadata" -import {Button, Container, Form, Row} from "react-bootstrap"; -import { Link } from "react-router-dom"; -import PasswordForm from "../components/password"; - -const SetNewPassword = (props) => { - const [password, setPassword] = useState(''); - const [message, setMessage] = useState(); - const [complete, setComplete] = useState(false); - const [passwordLength, setPasswordLength] = useState(10); - const [passwordRequireCapital, setPasswordRequireCapital] = useState(true); - const [passwordRequireNumeric, setPasswordRequireNumeric] = useState(true); - const [passwordRequireSpecial, setPasswordRequireSpecial] = useState(true); - const [passwordValidSpecialCharacters, setPasswordValidSpecialCharacters] = useState(""); - - const errorMessage =

Reset Password Failed!

; - - useEffect(() => { - metadata.configuration().then(resp => { - if(!resp.error) { - setPasswordLength(resp.data.passwordRequirements.length) - setPasswordRequireCapital(resp.data.passwordRequirements.requireCapital) - setPasswordRequireNumeric(resp.data.passwordRequirements.requireNumeric) - setPasswordRequireSpecial(resp.data.passwordRequirements.requireSpecial) - setPasswordValidSpecialCharacters(resp.data.passwordRequirements.validSpecialCharacters) - } - }).catch(err => { - console.log("err", err); - }); - }, []) - - const handleSubmit = async e => { - e.preventDefault(); - if (password !== undefined && password !== "") { - account.resetPassword({body: {"token": props.token, "password": password}}) - .then(resp => { - if(!resp.error) { - setMessage(undefined); - setComplete(true); - } else { - setMessage(errorMessage); - } - }) - .catch(resp => { - setMessage(errorMessage); - }) - } - } - - if(!complete) { - return ( - - - ziggy - - -

Reset Password

-
- - - -
- - - - -
- - {message} - -
-
-
- ) - } - - return ( - - - ziggy - - -

Password Reset

-
- - Password reset successful! You can now return to the login page and login. - - -
- - - -
-
-
- ) -} - -export default SetNewPassword; diff --git a/ui/src/styling/index.css b/ui/src/styling/index.css new file mode 100644 index 00000000..7251074e --- /dev/null +++ b/ui/src/styling/index.css @@ -0,0 +1,34 @@ +body { + margin: 0; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + min-width: 320px; +} + +code { + font-family: 'JetBrains Mono', sans-serif; +} + +a { + font-weight: 500; + color: #241775; + text-decoration: inherit; +} +a:hover { + color: #9bf316; +} + +h1 { + font-size: 3.2em; + line-height: 1.1; +} + +#root { + max-width: 1280px; + margin: 0 auto; + padding: 2rem; +} + +#footer { + text-align: center; +} diff --git a/ui/src/styling/react-flow.css b/ui/src/styling/react-flow.css new file mode 100644 index 00000000..ad8da22f --- /dev/null +++ b/ui/src/styling/react-flow.css @@ -0,0 +1,25 @@ +.react-flow__node { + font-family: "Poppins", sans-serif; + font-size: 0.6em; + color: white; + border: 2px solid white; + border-radius: 10px; + background-color: #241775; + text-color: white; +} +.react-flow__node.selected { + color: black; + background-color: #9bf316; + border: 2px solid #241775; + font-weight: bold; +} +.react-flow__handle { + background-color: #9bf316; + border: 1px solid #241775; +} +.react-flow__edge-path { + stroke: #241775; +} +.react-flow__attribution { + display: none; +} \ No newline at end of file diff --git a/ui/src/styling/theme.ts b/ui/src/styling/theme.ts new file mode 100644 index 00000000..b3344490 --- /dev/null +++ b/ui/src/styling/theme.ts @@ -0,0 +1,48 @@ +import {createTheme} from "@mui/material"; + +const componentOptions = { + MuiCard: { + styleOverrides: { + root: ({theme}) => theme.unstable_sx({ + mt: 5, + p: 1, + borderRadius: 3, + }), + } + }, + MuiAppBar: { + styleOverrides: { + root : ({theme}) => theme.unstable_sx({ + borderRadius: 3, + }), + } + } +} + +export const theme = createTheme({ + components: componentOptions, + palette: { + mode: 'light', + primary: { + main: '#241775', + }, + secondary: { + main: '#9bf316', + }, + }, + typography: { + fontFamily: 'Poppins', + }, +}) + +export const modalStyle = { + position: 'absolute', + top: '50%', + left: '50%', + transform: 'translate(-50%, -50%)', + width: 600, + bgcolor: 'background.paper', + boxShadow: 24, + p: 4, + borderRadius: 2, +}; \ No newline at end of file diff --git a/ui/src/vite-env.d.ts b/ui/src/vite-env.d.ts new file mode 100644 index 00000000..11f02fe2 --- /dev/null +++ b/ui/src/vite-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/ui/tsconfig.app.json b/ui/tsconfig.app.json new file mode 100644 index 00000000..f867de0d --- /dev/null +++ b/ui/tsconfig.app.json @@ -0,0 +1,26 @@ +{ + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", + "target": "ES2020", + "useDefineForClassFields": true, + "lib": ["ES2020", "DOM", "DOM.Iterable"], + "module": "ESNext", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "Bundler", + "allowImportingTsExtensions": true, + "isolatedModules": true, + "moduleDetection": "force", + "noEmit": true, + "jsx": "react-jsx", + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true + }, + "include": ["src"] +} diff --git a/ui/tsconfig.json b/ui/tsconfig.json new file mode 100644 index 00000000..1ffef600 --- /dev/null +++ b/ui/tsconfig.json @@ -0,0 +1,7 @@ +{ + "files": [], + "references": [ + { "path": "./tsconfig.app.json" }, + { "path": "./tsconfig.node.json" } + ] +} diff --git a/ui/tsconfig.node.json b/ui/tsconfig.node.json new file mode 100644 index 00000000..abcd7f0d --- /dev/null +++ b/ui/tsconfig.node.json @@ -0,0 +1,24 @@ +{ + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", + "target": "ES2022", + "lib": ["ES2023"], + "module": "ESNext", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "Bundler", + "allowImportingTsExtensions": true, + "isolatedModules": true, + "moduleDetection": "force", + "noEmit": true, + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedSideEffectImports": true + }, + "include": ["vite.config.ts"] +} diff --git a/ui/vite.config.ts b/ui/vite.config.ts new file mode 100644 index 00000000..f8f78741 --- /dev/null +++ b/ui/vite.config.ts @@ -0,0 +1,18 @@ +import { defineConfig } from 'vite' +import react from '@vitejs/plugin-react' + +// https://vite.dev/config/ +export default defineConfig({ + plugins: [react()], + server: { + proxy: { + '/api/v1': { + target: 'http://localhost:18080', + changeOrigin: true, + } + }, + allowedHosts: [ + ".share.zrok.io" + ] + } +}) diff --git a/util/autoListener.go b/util/autoListener.go new file mode 100644 index 00000000..a2878351 --- /dev/null +++ b/util/autoListener.go @@ -0,0 +1,29 @@ +package util + +import ( + "fmt" + "net" +) + +func AutoListener(protocol, address string, startPort, endPort uint16) (net.Listener, error) { + for i := startPort; i <= endPort; i++ { + l, err := net.Listen(protocol, fmt.Sprintf("%s:%d", address, i)) + if err != nil { + continue + } + return l, nil + } + return nil, fmt.Errorf("no listener found in range") +} + +func AutoListenerAddress(protocol, address string, startPort, endPort uint16) (string, error) { + listener, err := AutoListener(protocol, address, startPort, endPort) + if err != nil { + return "", err + } + autoAddress := listener.Addr().String() + if err := listener.Close(); err != nil { + return "", err + } + return autoAddress, nil +} diff --git a/util/cors.go b/util/cors.go new file mode 100644 index 00000000..5d1f21f5 --- /dev/null +++ b/util/cors.go @@ -0,0 +1,15 @@ +package util + +import "net/http" + +func cors(h http.Handler) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Access-Control-Allow-Origin", r.Header.Get("Origin")) + w.Header().Set("Access-Control-Allow-Methods", "GET, POST, PATCH, DELETE") + w.Header().Set("Access-Control-Allow-Headers", "Accept, Content-Type, Content-Length, Accept-Encoding, Authorization, ResponseType, User-Agent") + if r.Method == "OPTIONS" { + return + } + h.ServeHTTP(w, r) + }) +} diff --git a/website/README.md b/website/README.md index aaba2fa1..976ee548 100644 --- a/website/README.md +++ b/website/README.md @@ -24,6 +24,35 @@ $ yarn build This command generates static content into the `build` directory and can be served using any static contents hosting service. + +### Cutting a new doc version + +New doc releases should only be cut when major revisions are coming and the current version is ready to be frozen. +Cutting a new version will snapshot the current ./docs directory and copy it all into the ./website/versioned_docs directory based on the version that is tagged. + +``` +$ yarn docusaurus docs:version 1.1` +``` + +The default doc version that is displayed is managed in the `docusaurus.config.js` file. +By default the last version that was cut will be displayed, but this can be overridden be updating the config to render +the "current" doc version. + +``` + presets: [ + [ + docs: { + // These lines to show the current docs by default and assign them a label + lastVersion: 'current', + versions: { + current: { + label: '1.0', + }, + }, + + }, +``` + ### Deployment Using SSH: diff --git a/website/docusaurus.config.js b/website/docusaurus.config.js index 270db7dd..868eaa7a 100644 --- a/website/docusaurus.config.js +++ b/website/docusaurus.config.js @@ -6,7 +6,7 @@ const darkCodeTheme = require('prism-react-renderer/themes/dracula'); /** @type {import('@docusaurus/types').Config} */ const config = { - title: 'Zrok', + title: 'zrok', staticDirectories: ['static', '../docs/images', '../docker/compose', '../etc/caddy'], tagline: 'Globally distributed reverse proxy', url: 'https://docs.zrok.io', @@ -83,6 +83,15 @@ const config = { 'https://github.com/openziti/zrok/blob/main/docs', path: '../docs', include: ['**/*.md', '**/*.mdx'], + + // Uncomment these lines when we're ready to show the 1.0 docs by default + // lastVersion: 'current', + versions: { + current: { + label: '1.0', + }, + }, + }, theme: { customCss: require.resolve('./src/css/custom.css'), @@ -112,6 +121,9 @@ const config = { target: '_self', }, items: [ + { + type: 'docsVersionDropdown', + }, { href: 'https://zrok.io/pricing/', position: 'right', @@ -138,7 +150,7 @@ const config = { position: 'right', className: 'header-discourse-link', title: 'Discourse' - }, + } ], }, footer: { diff --git a/website/src/css/custom.css b/website/src/css/custom.css index bd301390..a9eb5eb0 100644 --- a/website/src/css/custom.css +++ b/website/src/css/custom.css @@ -241,6 +241,7 @@ a code { border: 1px var(--container-border); color: var(--ifm-link-color); transition: background-color 0.3s ease; /* Smooth transition for hover effect */ + font-family: var(--font-family-monospace); } .getting-started-cards .button:hover { diff --git a/website/versioned_docs/version-0.4/_attic/network/_category_.json b/website/versioned_docs/version-0.4/_attic/network/_category_.json new file mode 100644 index 00000000..4acef57b --- /dev/null +++ b/website/versioned_docs/version-0.4/_attic/network/_category_.json @@ -0,0 +1,7 @@ +{ + "label": "Network", + "position": 60, + "link": { + "type": "generated-index", + } +} \ No newline at end of file diff --git a/website/versioned_docs/version-0.4/_attic/network/prod/ziti-ctrl.service b/website/versioned_docs/version-0.4/_attic/network/prod/ziti-ctrl.service new file mode 100644 index 00000000..99edbed3 --- /dev/null +++ b/website/versioned_docs/version-0.4/_attic/network/prod/ziti-ctrl.service @@ -0,0 +1,16 @@ +[Unit] +Description=ziti-ctrl +After=network.target + +[Service] +User=ubuntu +WorkingDirectory=/home/ubuntu +ExecStart=/home/ubuntu/local/ziti/bin/ziti-controller run /home/ubuntu/local/etc/zrok.io/ziti-ctrl.yml +Restart=always +RestartSec=2 +LimitNOFILE=65535 +Environment="PFXLOG_NO_JSON=true" + +[Install] +WantedBy=multi-user.target + diff --git a/website/versioned_docs/version-0.4/_attic/network/prod/ziti-ctrl.yml b/website/versioned_docs/version-0.4/_attic/network/prod/ziti-ctrl.yml new file mode 100644 index 00000000..3edcf4d3 --- /dev/null +++ b/website/versioned_docs/version-0.4/_attic/network/prod/ziti-ctrl.yml @@ -0,0 +1,222 @@ +v: 3 + +#trace: +# path: "controller.trace" + +#profile: +# memory: +# path: ctrl.memprof + +db: "/home/ubuntu/local/etc/zrok.io/db/ziti-ctrl.db" + +identity: + cert: "/home/ubuntu/local/etc/zrok.io/pki/intermediate/certs/ctrl-client.cert" + server_cert: "/home/ubuntu/local/etc/zrok.io/pki/intermediate/certs/ctrl-server.chain.pem" + key: "/home/ubuntu/local/etc/zrok.io/pki/intermediate/keys/ctrl-server.key" + ca: "/home/ubuntu/local/etc/zrok.io/pki/cas.pem" + +# Network Configuration +# +# Configure how the controller will establish and manage the overlay network, and routing operations on top of +# the network. +# +#network: + + # routeTimeoutSeconds controls the number of seconds the controller will wait for a route attempt to succeed. + #routeTimeoutSeconds: 10 + + # createCircuitRetries controls the number of retries that will be attempted to create a path (and terminate it) + # for new circuits. + #createCircuitRetries: 2 + + # pendingLinkTimeoutSeconds controls how long we'll wait before creating a new link between routers where + # there isn't an established link, but a link request has been sent + #pendingLinkTimeoutSeconds: 10 + + # Defines the period that the controller re-evaluates the performance of all of the circuits + # running on the network. + # + #cycleSeconds: 15 + + # Sets router minimum cost. Defaults to 10 + #minRouterCost: 10 + + # Sets how often a new control channel connection can take over for a router with an existing control channel connection + # Defaults to 1 minute + #routerConnectChurnLimit: 1m + + # Sets the latency of link when it's first created. Will be overwritten as soon as latency from the link is actually + # reported from the routers. Defaults to 65 seconds. + #initialLinkLatency: 65s + + #smart: + # + # Defines the fractional upper limit of underperforming circuits that are candidates to be re-routed. If + # smart routing detects 100 circuits that are underperforming, and `smart.rerouteFraction` is set to `0.02`, + # then the upper limit of circuits that will be re-routed in this `cycleSeconds` period will be limited to + # 2 (2% of 100). + # + #rerouteFraction: 0.02 + # + # Defines the hard upper limit of underperforming circuits that are candidates to be re-routed. If smart + # routing detects 100 circuits that are underperforming, and `smart.rerouteCap` is set to `1`, and + # `smart.rerouteFraction` is set to `0.02`, then the upper limit of circuits that will be re-routed in this + # `cycleSeconds` period will be limited to 1. + # + #rerouteCap: 4 + +# the endpoint that routers will connect to the controller over. +ctrl: + #options: + # (optional) settings + # set the maximum number of connect requests that are buffered and waiting to be acknowledged (1 to 5000, default 1) + #maxQueuedConnects: 1 + # the maximum number of connects that have begun hello synchronization (1 to 1000, default 16) + #maxOutstandingConnects: 16 + # the number of milliseconds to wait before a hello synchronization fails and closes the connection (30ms to 60000ms, default: 1000ms) + #connectTimeoutMs: 1000 + listener: tls:0.0.0.0:6262 + +# the endpoint that management tools connect to the controller over. +mgmt: + #options: + # (optional) settings + # set the maximum number of connect requests that are buffered and waiting to be acknowledged (1 to 5000, default 1) + #maxQueuedConnects: 1 + # the maximum number of connects that have begun hello synchronization (1 to 1000, default 16) + #maxOutstandingConnects: 16 + # the number of milliseconds to wait before a hello synchronization fails and closes the connection (30ms to 60000ms, default: 1000ms) + #connectTimeoutMs: 1000 + listener: tls:0.0.0.0:10000 + +#metrics: +# influxdb: +# url: http://localhost:8086 +# database: ziti + +# xctrl_example +# +#example: +# enabled: false +# delay: 5s + +healthChecks: + boltCheck: + # How often to try entering a bolt read tx. Defaults to 30 seconds + interval: 30s + # When to time out the check. Defaults to 20 seconds + timeout: 20s + # How long to wait before starting the check. Defaults to 30 seconds + initialDelay: 30s + +# By having an 'edge' section defined, the ziti-controller will attempt to parse the edge configuration. Removing this +# section, commenting out, or altering the name of the section will cause the edge to not run. +edge: + # This section represents the configuration of the Edge API that is served over HTTPS + api: + #(optional, default 90s) Alters how frequently heartbeat and last activity values are persisted + # activityUpdateInterval: 90s + #(optional, default 250) The number of API Sessions updated for last activity per transaction + # activityUpdateBatchSize: 250 + # sessionTimeout - optional, default 30m + # The number of minutes before an Edge API session will time out. Timeouts are reset by + # API requests and connections that are maintained to Edge Routers + sessionTimeout: 30m + # address - required + # The default address (host:port) to use for enrollment for the Client API. This value must match one of the addresses + # defined in this Controller.WebListener.'s bindPoints. + address: ziti.zrok.io:1280 + # This section is used to define option that are used during enrollment of Edge Routers, Ziti Edge Identities. + enrollment: + # signingCert - required + # A Ziti Identity configuration section that specifically makes use of the cert and key fields to define + # a signing certificate from the PKI that the Ziti environment is using to sign certificates. The signingCert.cert + # will be added to the /.well-known CA store that is used to bootstrap trust with the Ziti Controller. + signingCert: + cert: /home/ubuntu/local/etc/zrok.io/pki/signing-intermediate/certs/signing-intermediate.cert + key: /home/ubuntu/local/etc/zrok.io/pki/signing-intermediate/keys/signing-intermediate.key + # edgeIdentity - optional + # A section for identity enrollment specific settings + edgeIdentity: + # duration - optional, default 180m + # The length of time that a Ziti Edge Identity enrollment should remain valid. After + # this duration, the enrollment will expire and no longer be usable. + duration: 180m + # edgeRouter - Optional + # A section for edge router enrollment specific settings. + edgeRouter: + # duration - optional, default 180m + # The length of time that a Ziti Edge Router enrollment should remain valid. After + # this duration, the enrollment will expire and no longer be usable. + duration: 180m + +# web +# Defines webListeners that will be hosted by the controller. Each webListener can host many APIs and be bound to many +# bind points. +web: + # name - required + # Provides a name for this listener, used for logging output. Not required to be unique, but is highly suggested. + - name: client-management + # bindPoints - required + # One or more bind points are required. A bind point specifies an interface (interface:port string) that defines + # where on the host machine the webListener will listen and the address (host:port) that should be used to + # publicly address the webListener(i.e. mydomain.com, localhost, 127.0.0.1). This public address may be used for + # incoming address resolution as well as used in responses in the API. + bindPoints: + #interface - required + # A host:port string on which network interface to listen on. 0.0.0.0 will listen on all interfaces + - interface: 0.0.0.0:1280 + # address - required + # The public address that external incoming requests will be able to resolve. Used in request processing and + # response content that requires full host:port/path addresses. + address: ziti.zrok.io:1280 + # identity - optional + # Allows the webListener to have a specific identity instead of defaulting to the root 'identity' section. + identity: + ca: "/home/ubuntu/local/etc/zrok.io/pki/intermediate/certs/intermediate.cert" + key: "/home/ubuntu/local/etc/zrok.io/pki/intermediate/keys/ctrl-server.key" + server_cert: "/home/ubuntu/local/etc/zrok.io/pki/intermediate/certs/ctrl-server.chain.pem" + cert: "/home/ubuntu/local/etc/zrok.io/pki/intermediate/certs/ctrl-client.cert" + # options - optional + # Allows the specification of webListener level options - mainly dealing with HTTP/TLS settings. These options are + # used for all http servers started by the current webListener. + options: + # idleTimeoutMs - optional, default 5000ms + # The maximum amount of idle time in milliseconds allowed for pipelined HTTP requests. Setting this too high + # can cause resources on the host to be consumed as clients remain connected and idle. Lowering this value + # will cause clients to reconnect on subsequent HTTPs requests. + idleTimeout: 5000ms #http timeouts, new + # readTimeoutMs - optional, default 5000ms + # The maximum amount of time in milliseconds http servers will wait to read the first incoming requests. A higher + # value risks consuming resources on the host with clients that are acting bad faith or suffering from high latency + # or packet loss. A lower value can risk losing connections to high latency/packet loss clients. + readTimeout: 5000ms + # writeTimeoutMs - optional, default 100000ms + # The total maximum time in milliseconds that the http server will wait for a single requests to be received and + # responded too. A higher value can allow long-running requests to consume resources on the host. A lower value + # can risk ending requests before the server has a chance to respond. + writeTimeout: 100000ms + # minTLSVersion - optional, default TLS1.2 + # The minimum version of TSL to support + minTLSVersion: TLS1.2 + # maxTLSVersion - optional, default TLS1.3 + # The maximum version of TSL to support + maxTLSVersion: TLS1.3 + # apis - required + # Allows one or more APIs to be bound to this webListener + apis: + # binding - required + # Specifies an API to bind to this webListener. Built-in APIs are + # - edge-management + # - edge-client + # - fabric-management + - binding: edge-management + # options - arg optional/required + # This section is used to define values that are specified by the API they are associated with. + # These settings are per API. The example below is for the 'edge-api' and contains both optional values and + # required values. + options: { } + - binding: edge-client + options: { } + - binding: fabric + options: { } diff --git a/website/versioned_docs/version-0.4/_attic/network/prod/ziti-router0.service b/website/versioned_docs/version-0.4/_attic/network/prod/ziti-router0.service new file mode 100644 index 00000000..0354fe20 --- /dev/null +++ b/website/versioned_docs/version-0.4/_attic/network/prod/ziti-router0.service @@ -0,0 +1,15 @@ +[Unit] +Description=ziti-router0 +After=ziti-ctrl + +[Service] +User=ubuntu +WorkingDirectory=/home/ubuntu +ExecStart=/home/ubuntu/local/ziti/bin/ziti-router run /home/ubuntu/local/etc/zrok.io/ziti-router0.yml +Restart=always +RestartSec=2 +LimitNOFILE=65535 +Environment="PFXLOG_NO_JSON=true" + +[Install] +WantedBy=multi-user.target diff --git a/website/versioned_docs/version-0.4/_attic/network/prod/ziti-router0.yml b/website/versioned_docs/version-0.4/_attic/network/prod/ziti-router0.yml new file mode 100644 index 00000000..ea67ba95 --- /dev/null +++ b/website/versioned_docs/version-0.4/_attic/network/prod/ziti-router0.yml @@ -0,0 +1,69 @@ +v: 3 + +identity: + cert: "/home/ubuntu/local/etc/zrok.io/pki/intermediate/certs/router0-client.cert" + server_cert: "/home/ubuntu/local/etc/zrok.io/pki/intermediate/certs/router0-server.cert" + key: "/home/ubuntu/local/etc/zrok.io/pki/intermediate/keys/router0-server.key" + ca: "/home/ubuntu/local/etc/zrok.io/pki/cas.cert" + +ctrl: + endpoint: tls:0.0.0.0:6262 + +link: + dialers: + - binding: transport + listeners: + - binding: transport + bind: tls:0.0.0.0:10080 + advertise: tls:api.zrok.io:10080 + options: + outQueueSize: 4 + +listeners: +# bindings of edge and tunnel requires an "edge" section below + - binding: edge + address: tls:0.0.0.0:3022 + options: + advertise: ziti.zrok.io:3022 + connectTimeoutMs: 1000 + getSessionTimeout: 60s + - binding: tunnel + options: + mode: host #tproxy|host + + +edge: + csr: + country: US + province: NC + locality: Charlotte + organization: NetFoundry + organizationalUnit: Ziti + sans: + dns: + - ziti.zrok.io + - localhost + ip: + - "10.0.0.41" + - "127.0.0.1" + +#transport: +# ws: +# writeTimeout: 10 +# readTimeout: 5 +# idleTimeout: 5 +# pongTimeout: 60 +# pingInterval: 54 +# handshakeTimeout: 10 +# readBufferSize: 4096 +# writeBufferSize: 4096 +# enableCompression: true +# server_cert: /home/ubuntu/.ziti/quickstart/zrok-ctrl-01/pki/routers/zrok-ctrl-01-edge-router/server.cert +# key: /home/ubuntu/.ziti/quickstart/zrok-ctrl-01/pki/routers/zrok-ctrl-01-edge-router/server.key + +forwarder: + latencyProbeInterval: 10 + xgressDialQueueLength: 1000 + xgressDialWorkerCount: 128 + linkDialQueueLength: 1000 + linkDialWorkerCount: 32 diff --git a/website/versioned_docs/version-0.4/_attic/network/prod/zrok-access-public.service b/website/versioned_docs/version-0.4/_attic/network/prod/zrok-access-public.service new file mode 100644 index 00000000..263242a1 --- /dev/null +++ b/website/versioned_docs/version-0.4/_attic/network/prod/zrok-access-public.service @@ -0,0 +1,15 @@ +[Unit] +Description=zrok-http-frontend +After=network.target + +[Service] +User=ubuntu +WorkingDirectory=/home/ubuntu +ExecStart=/home/ubuntu/local/zrok/bin/zrok access public /home/ubuntu/.zrok/frontend.json +Restart=always +RestartSec=2 +LimitNOFILE=65535 +Environment="PFXLOG_NO_JSON=true" + +[Install] +WantedBy=multi-user.target diff --git a/website/versioned_docs/version-0.4/_attic/network/prod/zrok-ctrl.service b/website/versioned_docs/version-0.4/_attic/network/prod/zrok-ctrl.service new file mode 100644 index 00000000..bfd00956 --- /dev/null +++ b/website/versioned_docs/version-0.4/_attic/network/prod/zrok-ctrl.service @@ -0,0 +1,15 @@ +[Unit] +Description=zrok-ctrl +After=network.target + +[Service] +User=ubuntu +WorkingDirectory=/home/ubuntu +ExecStart=/home/ubuntu/local/zrok/bin/zrok ctrl /home/ubuntu/local/etc/zrok.io/zrok-ctrl.yml +Restart=always +RestartSec=2 +LimitNOFILE=65535 +Environment="PFXLOG_NO_JSON=true" + +[Install] +WantedBy=multi-user.target diff --git a/website/versioned_docs/version-0.4/_attic/network/prod/zrok-ctrl.yml b/website/versioned_docs/version-0.4/_attic/network/prod/zrok-ctrl.yml new file mode 100644 index 00000000..ad0eafa2 --- /dev/null +++ b/website/versioned_docs/version-0.4/_attic/network/prod/zrok-ctrl.yml @@ -0,0 +1,17 @@ +# _____ __ ___ | | __ +# |_ / '__/ _ \| |/ / +# / /| | | (_) | < +# /___|_| \___/|_|\_\ +# controller configuration + +endpoint: + host: 0.0.0.0 + port: 8080 + +store: + path: /home/ubuntu/local/etc/zrok.io/db/zrok-ctrl.db + +ziti: + api_endpoint: "https://10.0.0.41:1280" + username: admin + password: admin diff --git a/website/versioned_docs/version-0.4/_attic/network/prod/zrok.io-network-skeleton.md b/website/versioned_docs/version-0.4/_attic/network/prod/zrok.io-network-skeleton.md new file mode 100644 index 00000000..fe2f9645 --- /dev/null +++ b/website/versioned_docs/version-0.4/_attic/network/prod/zrok.io-network-skeleton.md @@ -0,0 +1,95 @@ +* create root ca + + `pki_create_ca`: + + ``` + $ ziti pki create ca --pki-root=/home/ubuntu/local/etc/zrok.io/pki --ca-file=root-ca --ca-name="zrok.io Root CA" + ``` + +* signing root ca + + `pki_create_ca`: + + ``` + $ ziti pki create ca --pki-root=/home/ubuntu/local/etc/zrok.io/pki --ca-file=signing-root-ca --ca-name="zrok.io Signing Root CA" + ``` + +* intermediate + + `pki_create_intermediate`: + + ``` + $ ziti pki create intermediate --pki-root=/home/ubuntu/local/etc/zrok.io/pki --ca-name=root-ca --intermediate-name="zrok.io Intermediate" --intermediate-file=intermediate --max-path-len=1 + ``` + +* signing intermediate + + `pki_create_intermediate`: + + ``` + $ ziti pki create intermediate --pki-root=/home/ubuntu/local/etc/zrok.io/pki --ca-name=intermediate --intermediate-name="zrok.io Signing Intermediate" --intermediate-file=signing-intermediate --max-path-len=1 + ``` + +* create controller client/server certs: + + `pki_client_server`: + + ``` + $ ziti pki create server --pki-root=/home/ubuntu/local/etc/zrok.io/pki --ca-name=intermediate --server-file=ctrl-server --dns="ziti.dev.zrok.io,localhost" --ip="0.0.0.0,10.0.0.41,127.0.01" --server-name="zrok.io controller server" + $ ziti pki create client --pki-root=/home/ubuntu/local/etc/zrok.io/pki --ca-name=intermediate --client-file=ctrl-client --key-file=ctrl-server --client-name="zrok.io controller client" + ``` + +* create edge router client/server certs: + + `pki_client_server`: + + ``` + $ ziti pki create server --pki-root=/home/ubuntu/local/etc/zrok.io/pki --ca-name=intermediate --server-file=router0-server --dns="ziti.dev.zrok.io,localhost" --ip="0.0.0.0,10.0.0.41,127.0.01" --server-name="zrok.io router0 server" + $ ziti pki create client --pki-root=/home/ubuntu/local/etc/zrok.io/pki --ca-name=intermediate --client-file=router0-client --key-file=router0-server --client-name="zrok.io router0 client" + ``` + +* `cas.pem`: + + `createControllerConfig`: + + ``` + $ cat local/etc/zrok.io/pki/intermediate/certs/ctrl-server.chain.pem > local/etc/zrok.io/pki/cas.pem + $ cat local/etc/zrok.io/pki/intermediate/certs/signing-intermediate.cert >> local/etc/zrok.io/pki/cas.pem + ``` + +* `ziti-controller edge init`: + + ``` + $ ~/local/ziti/ziti-controller edge init local/etc/zrok.io/ziti-ctrl.yml + ``` + +* start controller + +* create and enroll edge router: + + ``` + $ ziti edge create edge-router router0 -o router0.jwt -t -a "public" + New edge router router0 created with id: ZAbNbXUL6A + Enrollment expires at 2022-08-29T21:56:37.418Z + + $ ziti-router enroll local/etc/zrok.io/ziti-router0.yml --jwt router0.jwt + [ 3.561] INFO edge/router/enroll.(*RestEnroller).Enroll: registration complete + ``` + +* configure zrok frontend identity + + ``` + $ ziti edge create identity device -o ~/.zrok/proxy.jwt proxy + New identity proxy created with id: -zbBF8eVb- + Enrollment expires at 2022-08-10T18:46:16.641Z + ``` + + ``` + $ ziti edge enroll -j ~/.zrok/proxy.jwt -o ~/.zrok/proxy.json + INFO generating 4096 bit RSA key + INFO enrolled successfully. identity file written to: proxy.json + ``` + + ``` + $ ziti edge create erp --edge-router-roles "#all" --identity-roles @proxy + ``` diff --git a/website/versioned_docs/version-0.4/_attic/overview.md b/website/versioned_docs/version-0.4/_attic/overview.md new file mode 100644 index 00000000..9aa3a3d7 --- /dev/null +++ b/website/versioned_docs/version-0.4/_attic/overview.md @@ -0,0 +1,92 @@ +--- +sidebar_position: 0 +sidebar_label: What is zrok +--- +# What is `zrok` + +## Overview + +`zrok` is a super-lightweight tool for providing on-demand access to dark, unreachable resources. +The super-power of `zrok` is providing a single-step solution to creating ephemeral network connectivity. From an end-user perspective, `zrok` is a tool packaged as a single executable, which can be used as a "shim" to quickly create public endpoints for dark resources. + +`zrok` is also a service (which can be self-hosted) and runs on top of any OpenZiti network. The service provides one or more listening endpoints (typically on the public internet), that are designed to dynamically expose endpoints (HTTP(S)-only, as of v0.1.x), as requested by the end-user `zrok` tooling. + +`zrok` listening endpoints, and `zrok` terminating endpoints are typically used together to create the streamlined, ephemeral connectivity solution for dark services. But listening endpoints and the terminating endpoints can be used orthogonally, interoperating with other OpenZiti SDK clients. + +### The Primary Use Case + +The primary use case for `zrok` is exposing dark resources across the public internet, for a multiplicity of reasons. Consider a developer, who is building a web application and wants to share work in progress with third parties for review. The developer already has signed up for a `zrok` account and has been issued a secret token. + +The developer will have enabled `zrok` capabilities for their shell environment using the `zrok enable` command: + +``` +$ zrok enable +``` + +After enabling their environment, the developer can quickly create a publicly available URL for their application like this: + +``` +$ zrok http http://localhost:3000 +``` + +`zrok` will then give them a public URL, like this: + +``` +http://d9121e7cdfd2dd2f.zrok.io/ +``` + +This URL can be shared with anyone, anywhere, allowing access to the developer's application as long as the developer is running the `zrok http` command. Simply ending that process will destroy all of the public access, and clean up the associated resources in the underlying OpenZiti environment. + +## How Does `zrok` Work? + +At a high level, the `zrok` stack looks like this: + +![zrok v0.1 overview](../images/zrok_v0.1_overview.png) + +Let's discuss a couple of the flows through the above use case and talk about what's happening. + + +### The `zrok enable` Flow + +When a new `zrok` user signs up for an account, they are issued a "secret token". This secret token is used to enable shell access to `zrok http` from the command line. + +When the user runs `zrok enable` from their shell, here's what happens: + +1. The `zrok enable` client reaches out with an enable request to the `zrok` controller. +2. The `zrok` controller creates a new OpenZiti identity for the environment and enrolls it. +3. The `zrok` controller creates an edge router policy associating the new OpenZiti identity with `#all` edge routers. +4. The `zrok` controller returns the entire SDK configuration back to the `zrok enable` client. +5. The `zrok enable` client then stores the OpenZiti identity along with a few other housekeeping details in the user's `~/.zrok` folder. +6. With the OpenZiti identity and configuration details stored in the user's `environment`, the user is then able to create any number of binding endpoints using the `zrok http` command. + + +### The `zrok http` Flow + +When a `zrok` user issues a `zrok http` command for an endpoint, here's what happens: + +1. The `zrok http` client gathers the necessary identity details from the `environment` (this was all staged during `zrok enable`). +2. The `zrok http` client reaches out to the `zrok` controller with an authenticated `tunnel` request, asking to have a new endpoint binding created. +3. The `zrok` controller allocates a new "service name" for the binding. +4. The `zrok` controller creates a `zrok.proxy.v1` configuration describing the user's requested authentication details (currently: `none` or `basic`). +5. The `zrok` controller creates a new service, associating the service with the configuration. +6. The `zrok` controller creates a bind service policy for the user's environment identity and the newly created OpenZiti service. +7. The `zrok` controller creates a dial service policy allowing the configured listening endpoints (ingress proxies) to dial the newly created service. +8. The `zrok` controller creates a service edge router policy associating the newly created service with `#all` edge routers. +9. The URL for the new `zrok` service is constructed and returned to the `zrok http` client. +10. The `zrok http` client then binds the OpenZiti service with an SDK client, and begins reverse-proxying traffic received from OpenZiti across to the dark service. + +When the user terminates the `zrok http` client, these resources are removed from the OpenZiti network. + + +### `zrok proxy` and HTTP Clients + +When `zrok http` exposes a service and returns a URL, that URL is designed to be sent to a `zrok` listening endpoint (`zrok proxy`, currently). The `zrok proxy` is a stateless SDK client with an HTTP(S) listener exposed to the public internet. + +When an HTTP request arrives as the `zrok proxy` listener, this happens: + +1. The `zrok proxy` parses the `Host` header provided by the client, extracting the `zrok` service name from the URL. +2. The service is refreshed (if necessary) and retrieved. The `zrok.proxy.v1` configuration details are retrieved. +3. The `zrok.proxy.v1` configuration is used to do authentication processing. If authentication is required, such a response is returned to the client. +4. The `zrok proxy` then dials the OpenZiti service, and the dialed service is used to reverse proxy the request from the end user across OpenZiti to the binding endpoint, and then dark service. + +The `zrok proxy` does not require any communication with the `zrok` controller, and is stateless. They can be pooled behind a load balancer. It is currently a goal is to maintain this lightweight nature. \ No newline at end of file diff --git a/website/versioned_docs/version-0.4/_attic/sharing/_category_.json b/website/versioned_docs/version-0.4/_attic/sharing/_category_.json new file mode 100644 index 00000000..e6277e75 --- /dev/null +++ b/website/versioned_docs/version-0.4/_attic/sharing/_category_.json @@ -0,0 +1,7 @@ +{ + "label": "Sharing", + "position": 20, + "link": { + "type": "generated-index", + } +} \ No newline at end of file diff --git a/website/versioned_docs/version-0.4/_attic/sharing/reserved_services.md b/website/versioned_docs/version-0.4/_attic/sharing/reserved_services.md new file mode 100644 index 00000000..2482be82 --- /dev/null +++ b/website/versioned_docs/version-0.4/_attic/sharing/reserved_services.md @@ -0,0 +1,37 @@ +# Reserved Services + +With v0.3, `zrok` introduced a concept of "reserving" services. The intention is that the `zrok` control plane will support limits on the number of reserved services (and eventually `frontend`instances) that an account is allowed to utilize. Service reservations could also be time-limited, or possibly even bandwidth-limited (the reservation expires after a bandwidth threshold is crossed). + +## Reserved Services Example + +With v0.3 `zrok` introduced the `zrok reserve` command: + +``` +$ zrok reserve private http://localhost:9090 +[ 0.047] INFO main.(*reserveCommand).run: your reserved service token is 'x88xujrpk4k3' +[ 0.048] INFO main.(*reserveCommand).run: your reserved service frontend is 'http://x88xujrpk4k3.zrok.quigley.com:8080/' +``` + +The `reserve` command creates a service reservation that allows a service to become non-ephemeral. The service token `x88xujrpk4k3` is guaranteed to exist between `backend` executions. + +Running a `backend` against a service reservation is done like this: + +``` +$ zrok share reserved x88xujrpk4k3 +[ 0.005] INFO main.(*shareReservedCommand).run: sharing target endpoint: 'http://localhost:9090' +[ 0.040] INFO main.(*shareReservedCommand).run: use this command to access your zrok service: 'zrok access private x88xujrpk4k3' +^C +$ zrok share reserved x88xujrpk4k3 +[ 0.007] INFO main.(*shareReservedCommand).run: sharing target endpoint: 'http://localhost:9090' +[ 0.047] INFO main.(*shareReservedCommand).run: use this command to access your zrok service: 'zrok access private x88xujrpk4k3' +``` + +The `share reserved` comand starts a backend process for the service. User-facing and public-facing `frontend` instances are allowed to come and go, just as if the service were ephemeral. + +Releasing a reserved service is done with the `zrok release` command: + +``` +$ zrok release x88xujrpk4k3 +[ 0.056] INFO main.(*releaseCommand).run: reserved service 'x88xujrpk4k3' released +``` + diff --git a/website/versioned_docs/version-0.4/_attic/sharing/sharing_modes.md b/website/versioned_docs/version-0.4/_attic/sharing/sharing_modes.md new file mode 100644 index 00000000..efb8161a --- /dev/null +++ b/website/versioned_docs/version-0.4/_attic/sharing/sharing_modes.md @@ -0,0 +1,53 @@ +# Public/Private Sharing + +In `v0.3` new sharing modes and new types of built-in services were introduced. + +## Share Modes + +_Note: In `v0.3`, the `tunnel` and `untunnel` concepts get renamed to `share` and `unshare`._ + +_Note: We're going to continue using `frontend` and `backend` as concepts, even though those words will be changing in the `zrok` CLI. A `frontend` will continue to describe an "ingress" into the `zrok`service, and is the tool that is used by the user "consuming" or `access`-ing the the `zrok` service. A `backend` will continue to describe the "binding" created by a user that wants to `share` a resource._ + +### Public Sharing + +In `v0.2`, `zrok` only offered a "public" sharing mode. The public sharing mode will allow any configured `frontend` instances to send traffic to any `backend`. The policy and permission model was very simple and flat. A `v0.2` deployment considers any available `frontend` instance to be allowed to send traffic to configured services. The access for `frontend` instances is controlled by identity provisioning within the underlying OpenZiti network. + +In `v0.3`, `zrok` will offer both a "public" and a "private" sharing mode. When `v0.3` configures the policies for a service, a publicly-shared service will have policies created that allow whichever selected public `frontend` instances to access the shared `backend`. A `v0.3` deployment will have a collection of multi-tenant, high-capacity `frontend` instances available to be selected from. The `zrok` CLI will default to selecting the `public` `frontend` instances. + +The `frontend` selection approach also gives us a clean implementation for picking public `frontend` instances based on geography (either network or physical). The production `zrok.io` service could easily offer multiple different fleets of `frontend` instances, and this mechanism will allow `backend` users to choose where they want to offer access to their service. + +### Private Sharing + +`v0.3` introduced "private" sharing mode. When provisioning a service for private sharing, `zrok` will not create any policies for the service, until a request for a `frontend` binding is created for the service (through the `v0.3` `zrok access` command). + +The `v0.3` `zrok` API will support creating `frontend` instances for both identified users (where the `zrok` user has a provisioned `environment`), as well as ephemeral users (the `zrok` controller will create a single-use "ephemeral environment" for these `frontend` instances). + +## Backend Modes + +In `v0.2`, the only possible `backend` "mode" was used for reverse proxying HTTP traffic to a local endpoint. The `v0.3` `zrok` client will support several different `backend` modes, providing a number of built-in conveniences. + +### Web Mode + +A user has a collection of files on disk. Sharing with a `backend` mode of "web", will create a `backend` that shares a file tree as if it were a local web server. This effectively allows a user to bind a web-server backend to a document root with a single CLI command. + +### DAV Mode + +A user wants to operate a read/write repository of files accessible through either conventional WebDAV clients (through `public` `frontend` instances), or through the `zrok` CLI (a convenience wrapper, embedding WebDAV capabilities). + +This allows users to create read/write repositories of files that can be shared with multiple users, and also allows for the creation of write-only "drop boxes" for receiving files from another user (often a tricky thing to do well and securely on the public internet). + +### Proxy Mode + +`v0.3` will retain the classic reverse proxy mode, as well. Will continue to allow a user to expose a local HTTP endpoint through `zrok`. + +## Entities (SQL) + +`zrok` v0.3 introduced a new `frontends` table to allow the `zrok` controller to track the frontend instances that are available to any account or environment. + +The following illustration shows the possibilities available. + +![Frontend Selection](../../images/zrok_frontends_v0.3.png) + +The `*.in.zrok.io` frontend is a "public" frontend, available to all `zrok` users. Most `zrok` installations will want to have at least one public, global frontend for all public, internet-facing ingress traffic for private backend instances. In the underlying data store, the public frontend will have a `name` set to `public` (or some other representative name), allowing users to reference that `frontend` using a friendly label. + +The other two "private" frontends are configured with no `name` label (the lack of a `name` label signifies that these are "private" frontends). The ephemeral environment is allocated when a `zrok` frontend request is made without an account on behalf of a private share. diff --git a/website/versioned_docs/version-0.4/_attic/v0.2_account_requests.md b/website/versioned_docs/version-0.4/_attic/v0.2_account_requests.md new file mode 100644 index 00000000..241357de --- /dev/null +++ b/website/versioned_docs/version-0.4/_attic/v0.2_account_requests.md @@ -0,0 +1,20 @@ +# Account Request Process + +## In v0.1 + +The `v0.1` versions of `zrok` had an open-access `zrok create account` that allows any user to create an account. Useful for closed development environments only. + +## In v0.2 + +* The `zrok create account` command now only takes an email address. +* The email address is submitted to an open-ended API endpoint, which then records an "account request", allocating a request token. +* An email is sent to the address offering a link with the request token, allowing the user to create the account. +* The account request is marked complete. + +### Invitations for Others + +This open `zrok create account` command will allow any user to send a `zrok` invitation to any user with a valid email address. + +### Garbage Collection + +An background garbage collector in the controller scans the account requests, looking for unused requests, which are removed after a configurable amount of time. \ No newline at end of file diff --git a/website/versioned_docs/version-0.4/_attic/v0.4_limits.md b/website/versioned_docs/version-0.4/_attic/v0.4_limits.md new file mode 100644 index 00000000..cc23bbbd --- /dev/null +++ b/website/versioned_docs/version-0.4/_attic/v0.4_limits.md @@ -0,0 +1,694 @@ +# Testing the Limits + +Consider the following `zrok controller` configuration stanza, describing the limits we'll be using for this testing scenario: + +```yaml +limits: + environments: -1 + shares: -1 + bandwidth: + per_account: + period: 5m + warning: + rx: -1 + tx: -1 + total: -1 + limit: + rx: -1 + tx: -1 + total: -1 + per_environment: + period: 5m + warning: + rx: -1 + tx: -1 + total: -1 + limit: + rx: -1 + tx: -1 + total: -1 + per_share: + period: 5m + warning: + rx: -1 + tx: -1 + total: 1048576 + limit: + rx: -1 + tx: -1 + total: 2097152 + enforcing: true + cycle: 1m +``` + +Any limit values set to `-1` are "unlimited". In this case, we're only enforcing a transfer limit on for shares. This limits configuration will send a warning when a share has transferred more than 1 megabyte in a 5 minute period, and will temporarily deactivate the share when it has transferred more than 2 megabytes in a 5 minute period. + +We're going to use the `zrok test loop public` framework to create a number of `public` shares and generate traffic. Here are the parameters we'll be using: + +``` +$ zrok test loop public -l 7 -i 10000 --min-pacing-ms 100 --max-pacing-ms 1500 +``` + +This configuration will create 7 shares. Each share will perform 10,000 iterations. The delay between iterations will be randomly generated with a floor of 100ms and a ceiling of 1500ms. + +Let's look at the `zrok controller` log for this run: + +First, our `zrok test loop public ` command will create the 7 shares: + +``` +[ 2.047] INFO zrok/controller.(*shareHandler).Handle: added frontend selection 'public' with ziti identity 'rBayMvm7UI' for share '0evcupz5k410' +[ 2.081] INFO zrok/controller.(*shareHandler).Handle: added frontend selection 'public' with ziti identity 'rBayMvm7UI' for share '8k6dnu7x7ag0' +[ 2.082] INFO zrok/controller/zrokEdgeSdk.CreateConfig: created config '19cyxfHo32R6fhVsYHZ84g' for environment 'd.wJYlpt9' +[ 2.083] INFO zrok/controller.(*shareHandler).Handle: added frontend selection 'public' with ziti identity 'rBayMvm7UI' for share '53z6mz4re7tu' +[ 2.086] INFO zrok/controller/zrokEdgeSdk.CreateShareService: created share '0evcupz5k410' (with ziti id '3WHJGqUdxkDtPYLgEL5V3q') for environment 'd.wJYlpt9' +[ 2.090] INFO zrok/controller.(*shareHandler).Handle: added frontend selection 'public' with ziti identity 'rBayMvm7UI' for share '7u9szn30ikh0' +[ 2.090] INFO zrok/controller.(*shareHandler).Handle: added frontend selection 'public' with ziti identity 'rBayMvm7UI' for share 'dh3f3jj7zhig' +[ 2.091] INFO zrok/controller.(*shareHandler).Handle: added frontend selection 'public' with ziti identity 'rBayMvm7UI' for share 'tr7vpyrzvmh0' +[ 2.096] INFO zrok/controller/zrokEdgeSdk.CreateServicePolicyBind: created bind service policy '4V8FsgCt63ySkG2pFWG5fz' for service '3WHJGqUdxkDtPYLgEL5V3q' for identity 'd.wJYlpt9' +[ 2.097] INFO zrok/controller/zrokEdgeSdk.CreateConfig: created config '5nG9jM8VNl0uBFcRRt3AvI' for environment 'd.wJYlpt9' +[ 2.098] INFO zrok/controller/zrokEdgeSdk.CreateServicePolicyDial: created dial service policy '74f2gUotsC7DteqpsWrxp0' for service '3WHJGqUdxkDtPYLgEL5V3q' for identities '[rBayMvm7UI]' +[ 2.099] INFO zrok/controller/zrokEdgeSdk.CreateShareService: created share '8k6dnu7x7ag0' (with ziti id '2J0I9dPe2JGnY1GwjmM6n7') for environment 'd.wJYlpt9' +[ 2.100] INFO zrok/controller/zrokEdgeSdk.CreateShareServiceEdgeRouterPolicy: created service edge router policy '2AqCUMqNtarmglOfhvnkI' for service '3WHJGqUdxkDtPYLgEL5V3q' for environment 'd.wJYlpt9' +[ 2.100] INFO zrok/controller/zrokEdgeSdk.CreateServicePolicyBind: created bind service policy '4vT5eEPahgWEVdAuKN91Sd' for service '2J0I9dPe2JGnY1GwjmM6n7' for identity 'd.wJYlpt9' +[ 2.104] INFO zrok/controller/zrokEdgeSdk.CreateServicePolicyDial: created dial service policy '5UHCkXZabFHeWYHmF01Zoc' for service '2J0I9dPe2JGnY1GwjmM6n7' for identities '[rBayMvm7UI]' +[ 2.106] INFO zrok/controller.(*shareHandler).Handle: recorded share '0evcupz5k410' with id '503' for 'michael@quigley.com' +[ 2.106] INFO zrok/controller/zrokEdgeSdk.CreateConfig: created config '6U3XDGnBjtONN5H6pUze12' for environment 'd.wJYlpt9' +[ 2.108] INFO zrok/controller/zrokEdgeSdk.CreateShareServiceEdgeRouterPolicy: created service edge router policy '2RIKOBMOckfbI2xMSLAKxC' for service '2J0I9dPe2JGnY1GwjmM6n7' for environment 'd.wJYlpt9' +[ 2.109] INFO zrok/controller/zrokEdgeSdk.CreateShareService: created share '53z6mz4re7tu' (with ziti id '2NiotGOyBHBEbFZwbTFJ2u') for environment 'd.wJYlpt9' +[ 2.109] INFO zrok/controller/zrokEdgeSdk.CreateConfig: created config '1FnBhnGNXDe58dwTpbFc1x' for environment 'd.wJYlpt9' +[ 2.109] INFO zrok/controller.(*shareHandler).Handle: recorded share '8k6dnu7x7ag0' with id '504' for 'michael@quigley.com' +[ 2.112] INFO zrok/controller/zrokEdgeSdk.CreateServicePolicyBind: created bind service policy 'RRfDaA5kjCqUBVC9LvN1H' for service '2NiotGOyBHBEbFZwbTFJ2u' for identity 'd.wJYlpt9' +[ 2.112] INFO zrok/controller/zrokEdgeSdk.CreateConfig: created config '2gid15nP0GIUVuaFQ15GWV' for environment 'd.wJYlpt9' +[ 2.115] INFO zrok/controller/zrokEdgeSdk.CreateShareService: created share '7u9szn30ikh0' (with ziti id '6FzYnK0RFJmT0rDSP1bzVE') for environment 'd.wJYlpt9' +[ 2.115] INFO zrok/controller/zrokEdgeSdk.CreateServicePolicyDial: created dial service policy '1oo3LuBKxduKAs1wsKndtW' for service '2NiotGOyBHBEbFZwbTFJ2u' for identities '[rBayMvm7UI]' +[ 2.117] INFO zrok/controller/zrokEdgeSdk.CreateServicePolicyBind: created bind service policy '1mabRt9jefSe52CJh6FmhB' for service '6FzYnK0RFJmT0rDSP1bzVE' for identity 'd.wJYlpt9' +[ 2.117] INFO zrok/controller/zrokEdgeSdk.CreateShareServiceEdgeRouterPolicy: created service edge router policy '2CM03d1cNpG4rma38BLzCQ' for service '2NiotGOyBHBEbFZwbTFJ2u' for environment 'd.wJYlpt9' +[ 2.118] INFO zrok/controller/zrokEdgeSdk.CreateServicePolicyDial: created dial service policy '3dBtc3v2G70aqqDSqujQOy' for service '6FzYnK0RFJmT0rDSP1bzVE' for identities '[rBayMvm7UI]' +[ 2.119] INFO zrok/controller.(*shareHandler).Handle: recorded share '53z6mz4re7tu' with id '505' for 'michael@quigley.com' +[ 2.121] INFO zrok/controller/zrokEdgeSdk.CreateShareServiceEdgeRouterPolicy: created service edge router policy '3xAG26zA9yska3LeZQUJ3N' for service '6FzYnK0RFJmT0rDSP1bzVE' for environment 'd.wJYlpt9' +[ 2.122] INFO zrok/controller.(*shareHandler).Handle: added frontend selection 'public' with ziti identity 'rBayMvm7UI' for share 's0uzz1p7xjrr' +[ 2.124] INFO zrok/controller.(*shareHandler).Handle: recorded share '7u9szn30ikh0' with id '506' for 'michael@quigley.com' +[ 2.128] INFO zrok/controller/zrokEdgeSdk.CreateShareService: created share 'tr7vpyrzvmh0' (with ziti id '7jyiTZ0z2ediD5hZbxu7KH') for environment 'd.wJYlpt9' +[ 2.130] INFO zrok/controller/zrokEdgeSdk.CreateServicePolicyBind: created bind service policy '6RwWEoIsb8gBVKJfZP3ur3' for service '7jyiTZ0z2ediD5hZbxu7KH' for identity 'd.wJYlpt9' +[ 2.131] INFO zrok/controller/zrokEdgeSdk.CreateConfig: created config '76iBDASRcxOmGtdwjVHo26' for environment 'd.wJYlpt9' +[ 2.132] INFO zrok/controller/zrokEdgeSdk.CreateServicePolicyDial: created dial service policy '1cURGP202D8n6fzpzWhcgK' for service '7jyiTZ0z2ediD5hZbxu7KH' for identities '[rBayMvm7UI]' +[ 2.138] INFO zrok/controller/zrokEdgeSdk.CreateShareService: created share 'dh3f3jj7zhig' (with ziti id 'nyKOLlxUWWbCzD7h9Jhjq') for environment 'd.wJYlpt9' +[ 2.139] INFO zrok/controller/zrokEdgeSdk.CreateShareServiceEdgeRouterPolicy: created service edge router policy '2nMZaiChQAPpFnblNn1ljP' for service '7jyiTZ0z2ediD5hZbxu7KH' for environment 'd.wJYlpt9' +[ 2.142] INFO zrok/controller.(*shareHandler).Handle: recorded share 'tr7vpyrzvmh0' with id '507' for 'michael@quigley.com' +[ 2.143] INFO zrok/controller/zrokEdgeSdk.CreateServicePolicyBind: created bind service policy '1xF4ky6cDJm63tzlNTqoLC' for service 'nyKOLlxUWWbCzD7h9Jhjq' for identity 'd.wJYlpt9' +[ 2.143] INFO zrok/controller/zrokEdgeSdk.CreateConfig: created config '4AN4sOtdQv99uHmFn3erx4' for environment 'd.wJYlpt9' +[ 2.145] INFO zrok/controller/zrokEdgeSdk.CreateServicePolicyDial: created dial service policy '7GerqbN5lVfcOng91J2J6I' for service 'nyKOLlxUWWbCzD7h9Jhjq' for identities '[rBayMvm7UI]' +[ 2.145] INFO zrok/controller/zrokEdgeSdk.CreateShareService: created share 's0uzz1p7xjrr' (with ziti id 'KtK5E46HR93YIBrrwUlIN') for environment 'd.wJYlpt9' +[ 2.147] INFO zrok/controller/zrokEdgeSdk.CreateShareServiceEdgeRouterPolicy: created service edge router policy '2ZnnIXSTQ3Zscha1kykqQr' for service 'nyKOLlxUWWbCzD7h9Jhjq' for environment 'd.wJYlpt9' +[ 2.149] INFO zrok/controller.(*shareHandler).Handle: recorded share 'dh3f3jj7zhig' with id '508' for 'michael@quigley.com' +[ 2.155] INFO zrok/controller/zrokEdgeSdk.CreateServicePolicyBind: created bind service policy '6oohOQFEo75yl9vnIbyzdj' for service 'KtK5E46HR93YIBrrwUlIN' for identity 'd.wJYlpt9' +[ 2.156] INFO zrok/controller/zrokEdgeSdk.CreateServicePolicyDial: created dial service policy '7eB3ubrntSHxkeHBCGJcOY' for service 'KtK5E46HR93YIBrrwUlIN' for identities '[rBayMvm7UI]' +[ 2.157] INFO zrok/controller/zrokEdgeSdk.CreateShareServiceEdgeRouterPolicy: created service edge router policy '2CGCz8dcquNvZC0ZUwDZ5F' for service 'KtK5E46HR93YIBrrwUlIN' for environment 'd.wJYlpt9' +[ 2.159] INFO zrok/controller.(*shareHandler).Handle: recorded share 's0uzz1p7xjrr' with id '509' for 'michael@quigley.com' +``` + +Next, we observe metrics being reported from OpenZiti into the `zrok` metrics infrastructure for each of the 7 shares: + +``` +[ 10.183] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 53z6mz4re7tu, circuit: ONzzjVS0w backend {rx: 32.4 kB, tx: 32.6 kB} frontend {rx: 32.6 kB, tx: 32.4 kB} +[ 10.192] INFO zrok/controller/metrics.(*influxWriter).Handle: share: tr7vpyrzvmh0, circuit: MZXXjVi0w backend {rx: 22.5 kB, tx: 22.8 kB} frontend {rx: 22.8 kB, tx: 22.5 kB} +[ 10.196] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 8k6dnu7x7ag0, circuit: SNXXjViuwU backend {rx: 15.1 kB, tx: 15.3 kB} frontend {rx: 15.3 kB, tx: 15.1 kB} +[ 15.164] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 53z6mz4re7tu, circuit: ONzzjVS0w backend {rx: 53.0 kB, tx: 53.4 kB} frontend {rx: 53.4 kB, tx: 53.0 kB} +[ 15.168] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 0evcupz5k410, circuit: cNzzH4i0w backend {rx: 50.3 kB, tx: 50.6 kB} frontend {rx: 50.6 kB, tx: 50.3 kB} +[ 15.170] INFO zrok/controller/metrics.(*influxWriter).Handle: share: dh3f3jj7zhig, circuit: fNXXHVSuw backend {rx: 46.2 kB, tx: 46.6 kB} frontend {rx: 46.6 kB, tx: 46.2 kB} +[ 15.172] INFO zrok/controller/metrics.(*influxWriter).Handle: share: tr7vpyrzvmh0, circuit: MZXXjVi0w backend {rx: 26.4 kB, tx: 26.8 kB} frontend {rx: 26.8 kB, tx: 26.4 kB} +[ 20.163] INFO zrok/controller/metrics.(*influxWriter).Handle: share: dh3f3jj7zhig, circuit: fNXXHVSuw backend {rx: 26.9 kB, tx: 27.1 kB} frontend {rx: 27.1 kB, tx: 26.9 kB} +[ 20.165] INFO zrok/controller/metrics.(*influxWriter).Handle: share: tr7vpyrzvmh0, circuit: MZXXjVi0w backend {rx: 26.0 kB, tx: 26.2 kB} frontend {rx: 26.2 kB, tx: 26.0 kB} +[ 20.168] INFO zrok/controller/metrics.(*influxWriter).Handle: share: s0uzz1p7xjrr, circuit: RZzXHVSuw backend {rx: 67.1 kB, tx: 67.6 kB} frontend {rx: 67.6 kB, tx: 67.1 kB} +[ 25.164] INFO zrok/controller/metrics.(*influxWriter).Handle: share: dh3f3jj7zhig, circuit: fNXXHVSuw backend {rx: 38.1 kB, tx: 38.4 kB} frontend {rx: 38.4 kB, tx: 38.1 kB} +[ 25.167] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 7u9szn30ikh0, circuit: iNzXj4S0r backend {rx: 26.3 kB, tx: 26.7 kB} frontend {rx: 26.7 kB, tx: 26.3 kB} +[ 25.169] INFO zrok/controller/metrics.(*influxWriter).Handle: share: tr7vpyrzvmh0, circuit: MZXXjVi0w backend {rx: 18.2 kB, tx: 18.4 kB} frontend {rx: 18.4 kB, tx: 18.2 kB} +[ 25.171] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 53z6mz4re7tu, circuit: ONzzjVS0w backend {rx: 22.6 kB, tx: 23.0 kB} frontend {rx: 23.0 kB, tx: 22.6 kB} +[ 30.163] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 53z6mz4re7tu, circuit: ONzzjVS0w backend {rx: 45.1 kB, tx: 45.4 kB} frontend {rx: 45.4 kB, tx: 45.1 kB} +[ 30.165] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 0evcupz5k410, circuit: cNzzH4i0w backend {rx: 44.0 kB, tx: 44.3 kB} frontend {rx: 44.3 kB, tx: 44.0 kB} +[ 30.167] INFO zrok/controller/metrics.(*influxWriter).Handle: share: dh3f3jj7zhig, circuit: fNXXHVSuw backend {rx: 65.1 kB, tx: 65.5 kB} frontend {rx: 65.5 kB, tx: 65.1 kB} +[ 35.163] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 0evcupz5k410, circuit: cNzzH4i0w backend {rx: 35.9 kB, tx: 36.1 kB} frontend {rx: 36.1 kB, tx: 35.9 kB} +[ 35.165] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 8k6dnu7x7ag0, circuit: SNXXjViuwU backend {rx: 36.4 kB, tx: 36.9 kB} frontend {rx: 36.9 kB, tx: 36.4 kB} +[ 35.166] INFO zrok/controller/metrics.(*influxWriter).Handle: share: s0uzz1p7xjrr, circuit: RZzXHVSuw backend {rx: 28.9 kB, tx: 29.3 kB} frontend {rx: 29.3 kB, tx: 28.9 kB} +[ 35.168] INFO zrok/controller/metrics.(*influxWriter).Handle: share: dh3f3jj7zhig, circuit: fNXXHVSuw backend {rx: 40.9 kB, tx: 41.2 kB} frontend {rx: 41.2 kB, tx: 40.9 kB} +[ 40.163] INFO zrok/controller/metrics.(*influxWriter).Handle: share: tr7vpyrzvmh0, circuit: MZXXjVi0w backend {rx: 31.0 kB, tx: 31.3 kB} frontend {rx: 31.3 kB, tx: 31.0 kB} +[ 40.165] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 7u9szn30ikh0, circuit: iNzXj4S0r backend {rx: 28.5 kB, tx: 28.8 kB} frontend {rx: 28.8 kB, tx: 28.5 kB} +[ 40.167] INFO zrok/controller/metrics.(*influxWriter).Handle: share: dh3f3jj7zhig, circuit: fNXXHVSuw backend {rx: 40.4 kB, tx: 40.8 kB} frontend {rx: 40.8 kB, tx: 40.4 kB} +[ 45.164] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 0evcupz5k410, circuit: cNzzH4i0w backend {rx: 60.1 kB, tx: 60.4 kB} frontend {rx: 60.4 kB, tx: 60.1 kB} +[ 45.166] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 8k6dnu7x7ag0, circuit: SNXXjViuwU backend {rx: 64.8 kB, tx: 65.2 kB} frontend {rx: 65.2 kB, tx: 64.8 kB} +[ 45.168] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 7u9szn30ikh0, circuit: iNzXj4S0r backend {rx: 39.2 kB, tx: 39.5 kB} frontend {rx: 39.5 kB, tx: 39.2 kB} +[ 45.170] INFO zrok/controller/metrics.(*influxWriter).Handle: share: dh3f3jj7zhig, circuit: fNXXHVSuw backend {rx: 23.9 kB, tx: 24.1 kB} frontend {rx: 24.1 kB, tx: 23.9 kB} +[ 50.164] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 53z6mz4re7tu, circuit: ONzzjVS0w backend {rx: 23.0 kB, tx: 23.2 kB} frontend {rx: 23.2 kB, tx: 23.0 kB} +[ 50.165] INFO zrok/controller/metrics.(*influxWriter).Handle: share: tr7vpyrzvmh0, circuit: MZXXjVi0w backend {rx: 41.4 kB, tx: 41.8 kB} frontend {rx: 41.8 kB, tx: 41.4 kB} +[ 50.167] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 8k6dnu7x7ag0, circuit: SNXXjViuwU backend {rx: 50.8 kB, tx: 51.2 kB} frontend {rx: 51.2 kB, tx: 50.8 kB} +[ 55.163] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 53z6mz4re7tu, circuit: ONzzjVS0w backend {rx: 29.2 kB, tx: 29.5 kB} frontend {rx: 29.5 kB, tx: 29.2 kB} +[ 55.165] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 0evcupz5k410, circuit: cNzzH4i0w backend {rx: 27.8 kB, tx: 28.0 kB} frontend {rx: 28.0 kB, tx: 27.8 kB} +[ 55.167] INFO zrok/controller/metrics.(*influxWriter).Handle: share: dh3f3jj7zhig, circuit: fNXXHVSuw backend {rx: 21.7 kB, tx: 21.9 kB} frontend {rx: 21.9 kB, tx: 21.7 kB} +[ 55.168] INFO zrok/controller/metrics.(*influxWriter).Handle: share: tr7vpyrzvmh0, circuit: MZXXjVi0w backend {rx: 30.0 kB, tx: 30.3 kB} frontend {rx: 30.3 kB, tx: 30.0 kB} +[ 60.164] INFO zrok/controller/metrics.(*influxWriter).Handle: share: tr7vpyrzvmh0, circuit: MZXXjVi0w backend {rx: 43.4 kB, tx: 43.7 kB} frontend {rx: 43.7 kB, tx: 43.4 kB} +[ 60.167] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 8k6dnu7x7ag0, circuit: SNXXjViuwU backend {rx: 44.7 kB, tx: 44.9 kB} frontend {rx: 44.9 kB, tx: 44.7 kB} +[ 60.168] INFO zrok/controller/metrics.(*influxWriter).Handle: share: dh3f3jj7zhig, circuit: fNXXHVSuw backend {rx: 30.6 kB, tx: 30.8 kB} frontend {rx: 30.8 kB, tx: 30.6 kB} +[ 65.164] INFO zrok/controller/metrics.(*influxWriter).Handle: share: s0uzz1p7xjrr, circuit: RZzXHVSuw backend {rx: 41.9 kB, tx: 42.2 kB} frontend {rx: 42.2 kB, tx: 41.9 kB} +[ 65.165] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 53z6mz4re7tu, circuit: ONzzjVS0w backend {rx: 38.1 kB, tx: 38.4 kB} frontend {rx: 38.4 kB, tx: 38.1 kB} +[ 65.167] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 0evcupz5k410, circuit: cNzzH4i0w backend {rx: 42.8 kB, tx: 43.3 kB} frontend {rx: 43.3 kB, tx: 42.8 kB} +[ 65.168] INFO zrok/controller/metrics.(*influxWriter).Handle: share: tr7vpyrzvmh0, circuit: MZXXjVi0w backend {rx: 28.9 kB, tx: 29.2 kB} frontend {rx: 29.2 kB, tx: 28.9 kB} +[ 70.163] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 0evcupz5k410, circuit: cNzzH4i0w backend {rx: 43.6 kB, tx: 43.9 kB} frontend {rx: 43.9 kB, tx: 43.6 kB} +[ 70.166] INFO zrok/controller/metrics.(*influxWriter).Handle: share: tr7vpyrzvmh0, circuit: MZXXjVi0w backend {rx: 30.3 kB, tx: 30.7 kB} frontend {rx: 30.7 kB, tx: 30.3 kB} +[ 70.168] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 8k6dnu7x7ag0, circuit: SNXXjViuwU backend {rx: 58.9 kB, tx: 59.5 kB} frontend {rx: 59.5 kB, tx: 58.9 kB} +[ 75.163] INFO zrok/controller/metrics.(*influxWriter).Handle: share: s0uzz1p7xjrr, circuit: RZzXHVSuw backend {rx: 32.5 kB, tx: 32.7 kB} frontend {rx: 32.7 kB, tx: 32.5 kB} +[ 75.165] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 8k6dnu7x7ag0, circuit: SNXXjViuwU backend {rx: 31.7 kB, tx: 32.2 kB} frontend {rx: 32.2 kB, tx: 31.7 kB} +[ 75.167] INFO zrok/controller/metrics.(*influxWriter).Handle: share: tr7vpyrzvmh0, circuit: MZXXjVi0w backend {rx: 42.2 kB, tx: 42.6 kB} frontend {rx: 42.6 kB, tx: 42.2 kB} +[ 75.168] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 53z6mz4re7tu, circuit: ONzzjVS0w backend {rx: 61.7 kB, tx: 62.0 kB} frontend {rx: 62.0 kB, tx: 61.7 kB} +[ 80.163] INFO zrok/controller/metrics.(*influxWriter).Handle: share: dh3f3jj7zhig, circuit: fNXXHVSuw backend {rx: 48.3 kB, tx: 48.7 kB} frontend {rx: 48.7 kB, tx: 48.3 kB} +[ 80.165] INFO zrok/controller/metrics.(*influxWriter).Handle: share: s0uzz1p7xjrr, circuit: RZzXHVSuw backend {rx: 54.5 kB, tx: 55.2 kB} frontend {rx: 55.2 kB, tx: 54.5 kB} +[ 80.167] INFO zrok/controller/metrics.(*influxWriter).Handle: share: tr7vpyrzvmh0, circuit: MZXXjVi0w backend {rx: 21.3 kB, tx: 21.5 kB} frontend {rx: 21.5 kB, tx: 21.3 kB} +[ 85.163] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 53z6mz4re7tu, circuit: ONzzjVS0w backend {rx: 47.7 kB, tx: 48.1 kB} frontend {rx: 48.1 kB, tx: 47.7 kB} +[ 85.164] INFO zrok/controller/metrics.(*influxWriter).Handle: share: dh3f3jj7zhig, circuit: fNXXHVSuw backend {rx: 27.0 kB, tx: 27.4 kB} frontend {rx: 27.4 kB, tx: 27.0 kB} +[ 85.167] INFO zrok/controller/metrics.(*influxWriter).Handle: share: s0uzz1p7xjrr, circuit: RZzXHVSuw backend {rx: 72.9 kB, tx: 73.4 kB} frontend {rx: 73.4 kB, tx: 72.9 kB} +[ 85.168] INFO zrok/controller/metrics.(*influxWriter).Handle: share: tr7vpyrzvmh0, circuit: MZXXjVi0w backend {rx: 78.6 kB, tx: 79.1 kB} frontend {rx: 79.1 kB, tx: 78.6 kB} +[ 90.163] INFO zrok/controller/metrics.(*influxWriter).Handle: share: dh3f3jj7zhig, circuit: fNXXHVSuw backend {rx: 58.7 kB, tx: 59.1 kB} frontend {rx: 59.1 kB, tx: 58.7 kB} +[ 90.166] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 8k6dnu7x7ag0, circuit: SNXXjViuwU backend {rx: 48.9 kB, tx: 49.3 kB} frontend {rx: 49.3 kB, tx: 48.9 kB} +[ 90.167] INFO zrok/controller/metrics.(*influxWriter).Handle: share: tr7vpyrzvmh0, circuit: MZXXjVi0w backend {rx: 63.4 kB, tx: 63.7 kB} frontend {rx: 63.7 kB, tx: 63.4 kB} +[ 95.164] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 0evcupz5k410, circuit: cNzzH4i0w backend {rx: 59.0 kB, tx: 59.4 kB} frontend {rx: 59.4 kB, tx: 59.0 kB} +[ 95.166] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 53z6mz4re7tu, circuit: ONzzjVS0w backend {rx: 65.9 kB, tx: 66.2 kB} frontend {rx: 66.2 kB, tx: 65.9 kB} +[ 95.168] INFO zrok/controller/metrics.(*influxWriter).Handle: share: s0uzz1p7xjrr, circuit: RZzXHVSuw backend {rx: 48.9 kB, tx: 49.3 kB} frontend {rx: 49.3 kB, tx: 48.9 kB} +[ 95.169] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 7u9szn30ikh0, circuit: iNzXj4S0r backend {rx: 27.5 kB, tx: 27.8 kB} frontend {rx: 27.8 kB, tx: 27.5 kB} +[ 100.164] INFO zrok/controller/metrics.(*influxWriter).Handle: share: s0uzz1p7xjrr, circuit: RZzXHVSuw backend {rx: 56.3 kB, tx: 56.8 kB} frontend {rx: 56.8 kB, tx: 56.3 kB} +[ 100.166] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 53z6mz4re7tu, circuit: ONzzjVS0w backend {rx: 25.8 kB, tx: 26.2 kB} frontend {rx: 26.2 kB, tx: 25.8 kB} +[ 100.168] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 7u9szn30ikh0, circuit: iNzXj4S0r backend {rx: 33.9 kB, tx: 34.2 kB} frontend {rx: 34.2 kB, tx: 33.9 kB} +[ 105.163] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 53z6mz4re7tu, circuit: ONzzjVS0w backend {rx: 30.7 kB, tx: 31.0 kB} frontend {rx: 31.0 kB, tx: 30.7 kB} +[ 105.165] INFO zrok/controller/metrics.(*influxWriter).Handle: share: tr7vpyrzvmh0, circuit: MZXXjVi0w backend {rx: 64.6 kB, tx: 64.9 kB} frontend {rx: 64.9 kB, tx: 64.6 kB} +[ 105.167] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 0evcupz5k410, circuit: cNzzH4i0w backend {rx: 49.0 kB, tx: 49.3 kB} frontend {rx: 49.3 kB, tx: 49.0 kB} +[ 105.168] INFO zrok/controller/metrics.(*influxWriter).Handle: share: s0uzz1p7xjrr, circuit: RZzXHVSuw backend {rx: 36.2 kB, tx: 36.6 kB} frontend {rx: 36.6 kB, tx: 36.2 kB} +``` + +Our first share receives a bandwidth warning, after transferring more than 1 megabyte: + +``` +[ 105.189] INFO zrok/controller/limits.(*shareWarningAction).HandleShare: warning 'tr7vpyrzvmh0' +[ 106.192] INFO zrok/controller/limits.sendLimitWarningEmail: limit warning email sent to 'michael@quigley.com' +[ 110.162] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 53z6mz4re7tu, circuit: ONzzjVS0w backend {rx: 30.6 kB, tx: 30.9 kB} frontend {rx: 30.9 kB, tx: 30.6 kB} +[ 110.165] INFO zrok/controller/metrics.(*influxWriter).Handle: share: dh3f3jj7zhig, circuit: fNXXHVSuw backend {rx: 42.9 kB, tx: 43.3 kB} frontend {rx: 43.3 kB, tx: 42.9 kB} +[ 110.170] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 0evcupz5k410, circuit: cNzzH4i0w backend {rx: 31.5 kB, tx: 31.7 kB} frontend {rx: 31.7 kB, tx: 31.5 kB} +[ 115.163] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 7u9szn30ikh0, circuit: iNzXj4S0r backend {rx: 45.3 kB, tx: 45.7 kB} frontend {rx: 45.7 kB, tx: 45.3 kB} +[ 115.164] INFO zrok/controller/metrics.(*influxWriter).Handle: share: tr7vpyrzvmh0, circuit: MZXXjVi0w backend {rx: 36.4 kB, tx: 36.8 kB} frontend {rx: 36.8 kB, tx: 36.4 kB} +[ 115.166] INFO zrok/controller/metrics.(*influxWriter).Handle: share: s0uzz1p7xjrr, circuit: RZzXHVSuw backend {rx: 46.5 kB, tx: 46.9 kB} frontend {rx: 46.9 kB, tx: 46.5 kB} +[ 115.170] INFO zrok/controller/metrics.(*influxWriter).Handle: share: dh3f3jj7zhig, circuit: fNXXHVSuw backend {rx: 63.9 kB, tx: 64.4 kB} frontend {rx: 64.4 kB, tx: 63.9 kB} +``` + +More shares start receiving bandwidth warnings: + +``` +[ 115.230] INFO zrok/controller/limits.(*shareWarningAction).HandleShare: warning 'dh3f3jj7zhig' +[ 116.575] INFO zrok/controller/limits.sendLimitWarningEmail: limit warning email sent to 'michael@quigley.com' +[ 120.164] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 53z6mz4re7tu, circuit: ONzzjVS0w backend {rx: 58.4 kB, tx: 58.8 kB} frontend {rx: 58.8 kB, tx: 58.4 kB} +[ 120.166] INFO zrok/controller/metrics.(*influxWriter).Handle: share: s0uzz1p7xjrr, circuit: RZzXHVSuw backend {rx: 30.5 kB, tx: 30.8 kB} frontend {rx: 30.8 kB, tx: 30.5 kB} +[ 120.168] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 8k6dnu7x7ag0, circuit: SNXXjViuwU backend {rx: 29.9 kB, tx: 30.2 kB} frontend {rx: 30.2 kB, tx: 29.9 kB} +[ 120.180] INFO zrok/controller/limits.(*shareWarningAction).HandleShare: warning '53z6mz4re7tu' +[ 122.733] INFO zrok/controller/limits.sendLimitWarningEmail: limit warning email sent to 'michael@quigley.com' +[ 125.163] INFO zrok/controller/metrics.(*influxWriter).Handle: share: tr7vpyrzvmh0, circuit: MZXXjVi0w backend {rx: 47.0 kB, tx: 47.3 kB} frontend {rx: 47.3 kB, tx: 47.0 kB} +[ 125.166] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 0evcupz5k410, circuit: cNzzH4i0w backend {rx: 55.5 kB, tx: 56.0 kB} frontend {rx: 56.0 kB, tx: 55.5 kB} +[ 125.167] INFO zrok/controller/metrics.(*influxWriter).Handle: share: s0uzz1p7xjrr, circuit: RZzXHVSuw backend {rx: 49.6 kB, tx: 49.9 kB} frontend {rx: 49.9 kB, tx: 49.6 kB} +[ 125.170] INFO zrok/controller/metrics.(*influxWriter).Handle: share: dh3f3jj7zhig, circuit: fNXXHVSuw backend {rx: 17.6 kB, tx: 17.8 kB} frontend {rx: 17.8 kB, tx: 17.6 kB} +[ 125.211] INFO zrok/controller/limits.(*shareWarningAction).HandleShare: warning 's0uzz1p7xjrr' +[ 126.117] INFO zrok/controller/limits.sendLimitWarningEmail: limit warning email sent to 'michael@quigley.com' +[ 130.164] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 0evcupz5k410, circuit: cNzzH4i0w backend {rx: 38.8 kB, tx: 39.0 kB} frontend {rx: 39.0 kB, tx: 38.8 kB} +[ 130.166] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 8k6dnu7x7ag0, circuit: SNXXjViuwU backend {rx: 76.6 kB, tx: 76.9 kB} frontend {rx: 76.9 kB, tx: 76.6 kB} +[ 130.168] INFO zrok/controller/metrics.(*influxWriter).Handle: share: s0uzz1p7xjrr, circuit: RZzXHVSuw backend {rx: 50.1 kB, tx: 50.5 kB} frontend {rx: 50.5 kB, tx: 50.1 kB} +[ 130.178] INFO zrok/controller/limits.(*shareWarningAction).HandleShare: warning '0evcupz5k410' +[ 130.921] INFO zrok/controller/limits.sendLimitWarningEmail: limit warning email sent to 'michael@quigley.com' +[ 135.164] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 53z6mz4re7tu, circuit: ONzzjVS0w backend {rx: 32.8 kB, tx: 33.2 kB} frontend {rx: 33.2 kB, tx: 32.8 kB} +[ 135.167] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 7u9szn30ikh0, circuit: iNzXj4S0r backend {rx: 34.7 kB, tx: 35.0 kB} frontend {rx: 35.0 kB, tx: 34.7 kB} +[ 135.169] INFO zrok/controller/metrics.(*influxWriter).Handle: share: tr7vpyrzvmh0, circuit: MZXXjVi0w backend {rx: 38.9 kB, tx: 39.2 kB} frontend {rx: 39.2 kB, tx: 38.9 kB} +[ 135.170] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 0evcupz5k410, circuit: cNzzH4i0w backend {rx: 51.4 kB, tx: 51.8 kB} frontend {rx: 51.8 kB, tx: 51.4 kB} +[ 140.165] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 7u9szn30ikh0, circuit: iNzXj4S0r backend {rx: 52.8 kB, tx: 53.2 kB} frontend {rx: 53.2 kB, tx: 52.8 kB} +[ 140.168] INFO zrok/controller/metrics.(*influxWriter).Handle: share: tr7vpyrzvmh0, circuit: MZXXjVi0w backend {rx: 33.1 kB, tx: 33.4 kB} frontend {rx: 33.4 kB, tx: 33.1 kB} +[ 140.169] INFO zrok/controller/metrics.(*influxWriter).Handle: share: dh3f3jj7zhig, circuit: fNXXHVSuw backend {rx: 35.6 kB, tx: 36.0 kB} frontend {rx: 36.0 kB, tx: 35.6 kB} +[ 145.163] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 7u9szn30ikh0, circuit: iNzXj4S0r backend {rx: 27.5 kB, tx: 27.8 kB} frontend {rx: 27.8 kB, tx: 27.5 kB} +[ 145.165] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 53z6mz4re7tu, circuit: ONzzjVS0w backend {rx: 24.6 kB, tx: 25.1 kB} frontend {rx: 25.1 kB, tx: 24.6 kB} +[ 145.167] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 0evcupz5k410, circuit: cNzzH4i0w backend {rx: 30.1 kB, tx: 30.5 kB} frontend {rx: 30.5 kB, tx: 30.1 kB} +[ 145.169] INFO zrok/controller/metrics.(*influxWriter).Handle: share: s0uzz1p7xjrr, circuit: RZzXHVSuw backend {rx: 24.7 kB, tx: 25.1 kB} frontend {rx: 25.1 kB, tx: 24.7 kB} +[ 150.164] INFO zrok/controller/metrics.(*influxWriter).Handle: share: tr7vpyrzvmh0, circuit: MZXXjVi0w backend {rx: 72.0 kB, tx: 72.4 kB} frontend {rx: 72.4 kB, tx: 72.0 kB} +[ 150.166] INFO zrok/controller/metrics.(*influxWriter).Handle: share: s0uzz1p7xjrr, circuit: RZzXHVSuw backend {rx: 31.8 kB, tx: 32.1 kB} frontend {rx: 32.1 kB, tx: 31.8 kB} +[ 150.167] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 7u9szn30ikh0, circuit: iNzXj4S0r backend {rx: 43.7 kB, tx: 43.9 kB} frontend {rx: 43.9 kB, tx: 43.7 kB} +[ 155.164] INFO zrok/controller/metrics.(*influxWriter).Handle: share: dh3f3jj7zhig, circuit: fNXXHVSuw backend {rx: 49.4 kB, tx: 49.8 kB} frontend {rx: 49.8 kB, tx: 49.4 kB} +[ 155.166] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 53z6mz4re7tu, circuit: ONzzjVS0w backend {rx: 46.4 kB, tx: 46.6 kB} frontend {rx: 46.6 kB, tx: 46.4 kB} +[ 155.168] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 7u9szn30ikh0, circuit: iNzXj4S0r backend {rx: 50.7 kB, tx: 51.0 kB} frontend {rx: 51.0 kB, tx: 50.7 kB} +[ 155.169] INFO zrok/controller/metrics.(*influxWriter).Handle: share: s0uzz1p7xjrr, circuit: RZzXHVSuw backend {rx: 58.5 kB, tx: 58.9 kB} frontend {rx: 58.9 kB, tx: 58.5 kB} +[ 160.164] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 0evcupz5k410, circuit: cNzzH4i0w backend {rx: 43.0 kB, tx: 43.3 kB} frontend {rx: 43.3 kB, tx: 43.0 kB} +[ 160.166] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 53z6mz4re7tu, circuit: ONzzjVS0w backend {rx: 66.0 kB, tx: 66.4 kB} frontend {rx: 66.4 kB, tx: 66.0 kB} +[ 160.168] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 8k6dnu7x7ag0, circuit: SNXXjViuwU backend {rx: 31.5 kB, tx: 31.9 kB} frontend {rx: 31.9 kB, tx: 31.5 kB} +[ 165.164] INFO zrok/controller/metrics.(*influxWriter).Handle: share: s0uzz1p7xjrr, circuit: RZzXHVSuw backend {rx: 60.0 kB, tx: 60.3 kB} frontend {rx: 60.3 kB, tx: 60.0 kB} +[ 165.167] INFO zrok/controller/metrics.(*influxWriter).Handle: share: dh3f3jj7zhig, circuit: fNXXHVSuw backend {rx: 47.3 kB, tx: 47.6 kB} frontend {rx: 47.6 kB, tx: 47.3 kB} +[ 165.168] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 8k6dnu7x7ag0, circuit: SNXXjViuwU backend {rx: 41.1 kB, tx: 41.3 kB} frontend {rx: 41.3 kB, tx: 41.1 kB} +[ 165.170] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 7u9szn30ikh0, circuit: iNzXj4S0r backend {rx: 37.2 kB, tx: 37.5 kB} frontend {rx: 37.5 kB, tx: 37.2 kB} +[ 165.216] INFO zrok/controller/limits.(*shareWarningAction).HandleShare: warning '8k6dnu7x7ag0' +[ 165.930] INFO zrok/controller/limits.sendLimitWarningEmail: limit warning email sent to 'michael@quigley.com' +[ 170.163] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 0evcupz5k410, circuit: cNzzH4i0w backend {rx: 43.1 kB, tx: 43.5 kB} frontend {rx: 43.5 kB, tx: 43.1 kB} +[ 170.165] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 53z6mz4re7tu, circuit: ONzzjVS0w backend {rx: 45.4 kB, tx: 45.8 kB} frontend {rx: 45.8 kB, tx: 45.4 kB} +[ 170.167] INFO zrok/controller/metrics.(*influxWriter).Handle: share: s0uzz1p7xjrr, circuit: RZzXHVSuw backend {rx: 58.0 kB, tx: 58.3 kB} frontend {rx: 58.3 kB, tx: 58.0 kB} +[ 175.164] INFO zrok/controller/metrics.(*influxWriter).Handle: share: tr7vpyrzvmh0, circuit: MZXXjVi0w backend {rx: 63.5 kB, tx: 63.9 kB} frontend {rx: 63.9 kB, tx: 63.5 kB} +[ 175.167] INFO zrok/controller/metrics.(*influxWriter).Handle: share: s0uzz1p7xjrr, circuit: RZzXHVSuw backend {rx: 45.0 kB, tx: 45.3 kB} frontend {rx: 45.3 kB, tx: 45.0 kB} +[ 175.169] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 0evcupz5k410, circuit: cNzzH4i0w backend {rx: 35.0 kB, tx: 35.2 kB} frontend {rx: 35.2 kB, tx: 35.0 kB} +[ 175.171] INFO zrok/controller/metrics.(*influxWriter).Handle: share: dh3f3jj7zhig, circuit: fNXXHVSuw backend {rx: 22.8 kB, tx: 23.2 kB} frontend {rx: 23.2 kB, tx: 22.8 kB} +[ 180.164] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 8k6dnu7x7ag0, circuit: SNXXjViuwU backend {rx: 42.3 kB, tx: 42.6 kB} frontend {rx: 42.6 kB, tx: 42.3 kB} +[ 180.167] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 7u9szn30ikh0, circuit: iNzXj4S0r backend {rx: 39.6 kB, tx: 40.1 kB} frontend {rx: 40.1 kB, tx: 39.6 kB} +[ 180.168] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 0evcupz5k410, circuit: cNzzH4i0w backend {rx: 53.1 kB, tx: 53.4 kB} frontend {rx: 53.4 kB, tx: 53.1 kB} +[ 185.163] INFO zrok/controller/metrics.(*influxWriter).Handle: share: tr7vpyrzvmh0, circuit: MZXXjVi0w backend {rx: 74.1 kB, tx: 74.6 kB} frontend {rx: 74.6 kB, tx: 74.1 kB} +[ 185.165] INFO zrok/controller/metrics.(*influxWriter).Handle: share: dh3f3jj7zhig, circuit: fNXXHVSuw backend {rx: 71.0 kB, tx: 71.4 kB} frontend {rx: 71.4 kB, tx: 71.0 kB} +[ 185.166] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 7u9szn30ikh0, circuit: iNzXj4S0r backend {rx: 78.8 kB, tx: 79.2 kB} frontend {rx: 79.2 kB, tx: 78.8 kB} +[ 185.168] INFO zrok/controller/metrics.(*influxWriter).Handle: share: s0uzz1p7xjrr, circuit: RZzXHVSuw backend {rx: 37.8 kB, tx: 38.2 kB} frontend {rx: 38.2 kB, tx: 37.8 kB} +[ 185.213] INFO zrok/controller/limits.(*shareWarningAction).HandleShare: warning '7u9szn30ikh0' +[ 186.862] INFO zrok/controller/limits.sendLimitWarningEmail: limit warning email sent to 'michael@quigley.com' +[ 190.164] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 53z6mz4re7tu, circuit: ONzzjVS0w backend {rx: 43.3 kB, tx: 43.8 kB} frontend {rx: 43.8 kB, tx: 43.3 kB} +[ 190.166] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 0evcupz5k410, circuit: cNzzH4i0w backend {rx: 39.6 kB, tx: 39.9 kB} frontend {rx: 39.9 kB, tx: 39.6 kB} +[ 190.168] INFO zrok/controller/metrics.(*influxWriter).Handle: share: tr7vpyrzvmh0, circuit: MZXXjVi0w backend {rx: 38.6 kB, tx: 38.9 kB} frontend {rx: 38.9 kB, tx: 38.6 kB} +[ 195.163] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 53z6mz4re7tu, circuit: ONzzjVS0w backend {rx: 44.0 kB, tx: 44.4 kB} frontend {rx: 44.4 kB, tx: 44.0 kB} +[ 195.165] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 7u9szn30ikh0, circuit: iNzXj4S0r backend {rx: 45.2 kB, tx: 45.5 kB} frontend {rx: 45.5 kB, tx: 45.2 kB} +[ 195.170] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 8k6dnu7x7ag0, circuit: SNXXjViuwU backend {rx: 67.1 kB, tx: 67.5 kB} frontend {rx: 67.5 kB, tx: 67.1 kB} +[ 195.172] INFO zrok/controller/metrics.(*influxWriter).Handle: share: dh3f3jj7zhig, circuit: fNXXHVSuw backend {rx: 44.4 kB, tx: 44.8 kB} frontend {rx: 44.8 kB, tx: 44.4 kB} +[ 200.164] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 8k6dnu7x7ag0, circuit: SNXXjViuwU backend {rx: 23.7 kB, tx: 23.9 kB} frontend {rx: 23.9 kB, tx: 23.7 kB} +[ 200.166] INFO zrok/controller/metrics.(*influxWriter).Handle: share: dh3f3jj7zhig, circuit: fNXXHVSuw backend {rx: 46.7 kB, tx: 47.1 kB} frontend {rx: 47.1 kB, tx: 46.7 kB} +[ 200.168] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 7u9szn30ikh0, circuit: iNzXj4S0r backend {rx: 48.7 kB, tx: 49.1 kB} frontend {rx: 49.1 kB, tx: 48.7 kB} +[ 205.163] INFO zrok/controller/metrics.(*influxWriter).Handle: share: tr7vpyrzvmh0, circuit: MZXXjVi0w backend {rx: 47.8 kB, tx: 48.1 kB} frontend {rx: 48.1 kB, tx: 47.8 kB} +[ 205.165] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 0evcupz5k410, circuit: cNzzH4i0w backend {rx: 57.2 kB, tx: 57.6 kB} frontend {rx: 57.6 kB, tx: 57.2 kB} +[ 205.167] INFO zrok/controller/metrics.(*influxWriter).Handle: share: dh3f3jj7zhig, circuit: fNXXHVSuw backend {rx: 47.7 kB, tx: 47.9 kB} frontend {rx: 47.9 kB, tx: 47.7 kB} +[ 205.168] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 8k6dnu7x7ag0, circuit: SNXXjViuwU backend {rx: 38.9 kB, tx: 39.3 kB} frontend {rx: 39.3 kB, tx: 38.9 kB} +[ 210.163] INFO zrok/controller/metrics.(*influxWriter).Handle: share: dh3f3jj7zhig, circuit: fNXXHVSuw backend {rx: 37.5 kB, tx: 37.8 kB} frontend {rx: 37.8 kB, tx: 37.5 kB} +[ 210.165] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 8k6dnu7x7ag0, circuit: SNXXjViuwU backend {rx: 15.3 kB, tx: 15.5 kB} frontend {rx: 15.5 kB, tx: 15.3 kB} +[ 210.166] INFO zrok/controller/metrics.(*influxWriter).Handle: share: s0uzz1p7xjrr, circuit: RZzXHVSuw backend {rx: 41.3 kB, tx: 41.5 kB} frontend {rx: 41.5 kB, tx: 41.3 kB} +[ 215.163] INFO zrok/controller/metrics.(*influxWriter).Handle: share: dh3f3jj7zhig, circuit: fNXXHVSuw backend {rx: 28.0 kB, tx: 28.4 kB} frontend {rx: 28.4 kB, tx: 28.0 kB} +[ 215.165] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 7u9szn30ikh0, circuit: iNzXj4S0r backend {rx: 42.5 kB, tx: 42.8 kB} frontend {rx: 42.8 kB, tx: 42.5 kB} +[ 215.167] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 8k6dnu7x7ag0, circuit: SNXXjViuwU backend {rx: 47.6 kB, tx: 48.0 kB} frontend {rx: 48.0 kB, tx: 47.6 kB} +[ 215.168] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 53z6mz4re7tu, circuit: ONzzjVS0w backend {rx: 43.4 kB, tx: 43.8 kB} frontend {rx: 43.8 kB, tx: 43.4 kB} +[ 220.164] INFO zrok/controller/metrics.(*influxWriter).Handle: share: tr7vpyrzvmh0, circuit: MZXXjVi0w backend {rx: 19.4 kB, tx: 19.7 kB} frontend {rx: 19.7 kB, tx: 19.4 kB} +[ 220.166] INFO zrok/controller/metrics.(*influxWriter).Handle: share: dh3f3jj7zhig, circuit: fNXXHVSuw backend {rx: 37.1 kB, tx: 37.4 kB} frontend {rx: 37.4 kB, tx: 37.1 kB} +[ 220.168] INFO zrok/controller/metrics.(*influxWriter).Handle: share: s0uzz1p7xjrr, circuit: RZzXHVSuw backend {rx: 69.1 kB, tx: 69.5 kB} frontend {rx: 69.5 kB, tx: 69.1 kB} +``` + +Our first share crosses the 2 megabyte boundary and the system limits its ability to transfer additional data by removing its dial service policy: + +``` +[ 220.195] INFO zrok/controller/limits.(*shareLimitAction).HandleShare: limiting 'dh3f3jj7zhig' +[ 220.211] INFO zrok/controller/zrokEdgeSdk.DeleteServicePolicy: deleted service policy '7GerqbN5lVfcOng91J2J6I' for environment 'd.wJYlpt9' +[ 220.211] INFO zrok/controller/limits.(*shareLimitAction).HandleShare: removed dial service policy for 'dh3f3jj7zhig' +[ 225.163] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 0evcupz5k410, circuit: cNzzH4i0w backend {rx: 45.1 kB, tx: 45.5 kB} frontend {rx: 45.5 kB, tx: 45.1 kB} +[ 225.165] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 7u9szn30ikh0, circuit: iNzXj4S0r backend {rx: 26.9 kB, tx: 27.3 kB} frontend {rx: 27.3 kB, tx: 26.9 kB} +[ 225.166] INFO zrok/controller/metrics.(*influxWriter).Handle: share: dh3f3jj7zhig, circuit: fNXXHVSuw backend {rx: 40.9 kB, tx: 41.0 kB} frontend {rx: 41.0 kB, tx: 40.9 kB} +[ 225.168] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 8k6dnu7x7ag0, circuit: SNXXjViuwU backend {rx: 28.8 kB, tx: 29.1 kB} frontend {rx: 29.1 kB, tx: 28.8 kB} +[ 230.163] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 0evcupz5k410, circuit: cNzzH4i0w backend {rx: 55.4 kB, tx: 55.8 kB} frontend {rx: 55.8 kB, tx: 55.4 kB} +[ 230.165] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 7u9szn30ikh0, circuit: iNzXj4S0r backend {rx: 44.8 kB, tx: 45.2 kB} frontend {rx: 45.2 kB, tx: 44.8 kB} +[ 230.167] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 53z6mz4re7tu, circuit: ONzzjVS0w backend {rx: 52.2 kB, tx: 52.5 kB} frontend {rx: 52.5 kB, tx: 52.2 kB} +[ 235.163] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 8k6dnu7x7ag0, circuit: SNXXjViuwU backend {rx: 53.2 kB, tx: 53.6 kB} frontend {rx: 53.6 kB, tx: 53.2 kB} +[ 235.165] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 0evcupz5k410, circuit: cNzzH4i0w backend {rx: 43.1 kB, tx: 43.4 kB} frontend {rx: 43.4 kB, tx: 43.1 kB} +[ 235.166] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 53z6mz4re7tu, circuit: ONzzjVS0w backend {rx: 45.9 kB, tx: 46.2 kB} frontend {rx: 46.2 kB, tx: 45.9 kB} +[ 240.163] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 8k6dnu7x7ag0, circuit: SNXXjViuwU backend {rx: 50.6 kB, tx: 51.0 kB} frontend {rx: 51.0 kB, tx: 50.6 kB} +[ 240.165] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 0evcupz5k410, circuit: cNzzH4i0w backend {rx: 49.7 kB, tx: 50.0 kB} frontend {rx: 50.0 kB, tx: 49.7 kB} +[ 240.167] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 7u9szn30ikh0, circuit: iNzXj4S0r backend {rx: 37.3 kB, tx: 37.6 kB} frontend {rx: 37.6 kB, tx: 37.3 kB} +``` + +More shares become limited and are prevented from transferring data. Notice the metrics output reducing in the logs. As more shares become limited, we're naturally seeing less data transfer occurring on the OpenZiti network: + +``` +[ 240.188] INFO zrok/controller/limits.(*shareLimitAction).HandleShare: limiting '0evcupz5k410' +[ 240.203] INFO zrok/controller/zrokEdgeSdk.DeleteServicePolicy: deleted service policy '74f2gUotsC7DteqpsWrxp0' for environment 'd.wJYlpt9' +[ 240.203] INFO zrok/controller/limits.(*shareLimitAction).HandleShare: removed dial service policy for '0evcupz5k410' +[ 245.163] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 8k6dnu7x7ag0, circuit: SNXXjViuwU backend {rx: 28.2 kB, tx: 28.5 kB} frontend {rx: 28.5 kB, tx: 28.2 kB} +[ 245.166] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 53z6mz4re7tu, circuit: dev-h4iuwD backend {rx: 47.3 kB, tx: 47.9 kB} frontend {rx: 47.9 kB, tx: 47.3 kB} +[ 245.167] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 7u9szn30ikh0, circuit: iNzXj4S0r backend {rx: 48.2 kB, tx: 48.5 kB} frontend {rx: 48.5 kB, tx: 48.2 kB} +[ 245.194] INFO zrok/controller/limits.(*shareLimitAction).HandleShare: limiting '53z6mz4re7tu' +[ 245.196] INFO zrok/controller/zrokEdgeSdk.DeleteServicePolicy: deleted service policy '1oo3LuBKxduKAs1wsKndtW' for environment 'd.wJYlpt9' +[ 245.197] INFO zrok/controller/limits.(*shareLimitAction).HandleShare: removed dial service policy for '53z6mz4re7tu' +[ 250.164] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 53z6mz4re7tu, circuit: dev-h4iuwD backend {rx: 33.2 kB, tx: 33.5 kB} frontend {rx: 33.5 kB, tx: 33.2 kB} +[ 250.167] INFO zrok/controller/metrics.(*influxWriter).Handle: share: s0uzz1p7xjrr, circuit: RZzXHVSuw backend {rx: 48.2 kB, tx: 48.4 kB} frontend {rx: 48.4 kB, tx: 48.2 kB} +[ 250.191] INFO zrok/controller/limits.(*shareLimitAction).HandleShare: limiting 's0uzz1p7xjrr' +[ 250.194] INFO zrok/controller/zrokEdgeSdk.DeleteServicePolicy: deleted service policy '7eB3ubrntSHxkeHBCGJcOY' for environment 'd.wJYlpt9' +[ 250.194] INFO zrok/controller/limits.(*shareLimitAction).HandleShare: removed dial service policy for 's0uzz1p7xjrr' +[ 255.163] INFO zrok/controller/metrics.(*influxWriter).Handle: share: tr7vpyrzvmh0, circuit: MZXXjVi0w backend {rx: 35.8 kB, tx: 36.0 kB} frontend {rx: 36.0 kB, tx: 35.8 kB} +[ 255.165] INFO zrok/controller/metrics.(*influxWriter).Handle: share: s0uzz1p7xjrr, circuit: RZzXHVSuw backend {rx: 50.4 kB, tx: 50.6 kB} frontend {rx: 50.6 kB, tx: 50.4 kB} +[ 255.179] INFO zrok/controller/limits.(*shareLimitAction).HandleShare: limiting 'tr7vpyrzvmh0' +[ 255.182] INFO zrok/controller/zrokEdgeSdk.DeleteServicePolicy: deleted service policy '1cURGP202D8n6fzpzWhcgK' for environment 'd.wJYlpt9' +[ 255.182] INFO zrok/controller/limits.(*shareLimitAction).HandleShare: removed dial service policy for 'tr7vpyrzvmh0' +[ 260.163] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 8k6dnu7x7ag0, circuit: SNXXjViuwU backend {rx: 37.3 kB, tx: 47.7 kB} frontend {rx: 47.7 kB, tx: 37.3 kB} +[ 260.165] INFO zrok/controller/metrics.(*influxWriter).Handle: share: tr7vpyrzvmh0, circuit: MZXXjVi0w backend {rx: 69.2 kB, tx: 69.7 kB} frontend {rx: 69.7 kB, tx: 69.2 kB} +[ 265.163] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 7u9szn30ikh0, circuit: iNzXj4S0r backend {rx: 59.7 kB, tx: 60.1 kB} frontend {rx: 60.1 kB, tx: 59.7 kB} +[ 270.163] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 7u9szn30ikh0, circuit: iNzXj4S0r backend {rx: 46.9 kB, tx: 47.2 kB} frontend {rx: 47.2 kB, tx: 46.9 kB} +[ 275.163] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 7u9szn30ikh0, circuit: iNzXj4S0r backend {rx: 32.9 kB, tx: 33.2 kB} frontend {rx: 33.2 kB, tx: 32.9 kB} +[ 280.163] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 7u9szn30ikh0, circuit: iNzXj4S0r backend {rx: 43.2 kB, tx: 43.7 kB} frontend {rx: 43.7 kB, tx: 43.2 kB} +[ 285.163] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 8k6dnu7x7ag0, circuit: SNXXjViuwU backend {rx: 50.0 kB, tx: 50.4 kB} frontend {rx: 50.4 kB, tx: 50.0 kB} +[ 290.162] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 8k6dnu7x7ag0, circuit: SNXXjViuwU backend {rx: 51.8 kB, tx: 52.3 kB} frontend {rx: 52.3 kB, tx: 51.8 kB} +``` + +By this point, we're seeing very little traffic on the OpenZiti network: + +``` +[ 290.176] INFO zrok/controller/limits.(*shareLimitAction).HandleShare: limiting '8k6dnu7x7ag0' +[ 290.190] INFO zrok/controller/zrokEdgeSdk.DeleteServicePolicy: deleted service policy '5UHCkXZabFHeWYHmF01Zoc' for environment 'd.wJYlpt9' +[ 290.191] INFO zrok/controller/limits.(*shareLimitAction).HandleShare: removed dial service policy for '8k6dnu7x7ag0' +[ 295.163] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 7u9szn30ikh0, circuit: iNzXj4S0r backend {rx: 44.0 kB, tx: 44.4 kB} frontend {rx: 44.4 kB, tx: 44.0 kB} +[ 295.178] INFO zrok/controller/limits.(*shareLimitAction).HandleShare: limiting '7u9szn30ikh0' +[ 295.181] INFO zrok/controller/zrokEdgeSdk.DeleteServicePolicy: deleted service policy '3dBtc3v2G70aqqDSqujQOy' for environment 'd.wJYlpt9' +[ 295.181] INFO zrok/controller/limits.(*shareLimitAction).HandleShare: removed dial service policy for '7u9szn30ikh0' +``` +Notice the timestamps on the log messages. There have been no metrics messages for 60 seconds. + +The limits agent runs a periodic process to look for limited resources to re-enable. It produces messages like this when there are no resources to re-enable: + +``` +[ 355.183] INFO zrok/controller/limits.(*Agent).relax: relaxing +[ 355.188] INFO zrok/controller/limits.(*Agent).relax: share 'dh3f3jj7zhig' still over limit +[ 355.192] INFO zrok/controller/limits.(*Agent).relax: share '0evcupz5k410' still over limit +[ 355.196] INFO zrok/controller/limits.(*Agent).relax: share '53z6mz4re7tu' still over limit +[ 355.199] INFO zrok/controller/limits.(*Agent).relax: share 's0uzz1p7xjrr' still over limit +[ 355.203] INFO zrok/controller/limits.(*Agent).relax: share 'tr7vpyrzvmh0' still over limit +[ 355.207] INFO zrok/controller/limits.(*Agent).relax: share '8k6dnu7x7ag0' still over limit +[ 355.220] INFO zrok/controller/limits.(*Agent).relax: share '7u9szn30ikh0' still over limit +[ 415.223] INFO zrok/controller/limits.(*Agent).relax: relaxing +[ 415.228] INFO zrok/controller/limits.(*Agent).relax: share 'dh3f3jj7zhig' still over limit +[ 415.232] INFO zrok/controller/limits.(*Agent).relax: share '0evcupz5k410' still over limit +[ 415.236] INFO zrok/controller/limits.(*Agent).relax: share '53z6mz4re7tu' still over limit +[ 415.240] INFO zrok/controller/limits.(*Agent).relax: share 's0uzz1p7xjrr' still over limit +[ 415.245] INFO zrok/controller/limits.(*Agent).relax: share 'tr7vpyrzvmh0' still over limit +[ 415.250] INFO zrok/controller/limits.(*Agent).relax: share '8k6dnu7x7ag0' still over limit +[ 415.253] INFO zrok/controller/limits.(*Agent).relax: share '7u9szn30ikh0' still over limit +``` +Enough time has finally passed that the agent is able to remove the restrictions on some of the services: + +``` +[ 475.255] INFO zrok/controller/limits.(*Agent).relax: relaxing +[ 475.260] INFO zrok/controller/limits.(*shareRelaxAction).HandleShare: relaxing 'dh3f3jj7zhig' +[ 475.274] INFO zrok/controller/zrokEdgeSdk.CreateServicePolicyDial: created dial service policy '3LQG2ptwUxIuWtRzTLAqAc' for service 'nyKOLlxUWWbCzD7h9Jhjq' for identities '[rBayMvm7UI]' +[ 475.274] INFO zrok/controller/limits.(*shareRelaxAction).HandleShare: added dial service policy for 'dh3f3jj7zhig' +[ 475.279] INFO zrok/controller/limits.(*shareRelaxAction).HandleShare: relaxing '0evcupz5k410' +[ 475.281] INFO zrok/controller/zrokEdgeSdk.CreateServicePolicyDial: created dial service policy '4BPqQhFsGGmoBsqFDIWlWA' for service '3WHJGqUdxkDtPYLgEL5V3q' for identities '[rBayMvm7UI]' +[ 475.281] INFO zrok/controller/limits.(*shareRelaxAction).HandleShare: added dial service policy for '0evcupz5k410' +[ 475.285] INFO zrok/controller/limits.(*shareRelaxAction).HandleShare: relaxing '53z6mz4re7tu' +[ 475.287] INFO zrok/controller/zrokEdgeSdk.CreateServicePolicyDial: created dial service policy '64Kz6F7CluxH1drfyMkzDx' for service '2NiotGOyBHBEbFZwbTFJ2u' for identities '[rBayMvm7UI]' +[ 475.287] INFO zrok/controller/limits.(*shareRelaxAction).HandleShare: added dial service policy for '53z6mz4re7tu' +[ 475.292] INFO zrok/controller/limits.(*shareRelaxAction).HandleShare: relaxing 's0uzz1p7xjrr' +[ 475.295] INFO zrok/controller/zrokEdgeSdk.CreateServicePolicyDial: created dial service policy '6MZ8i9sqvom96P70P24FJQ' for service 'KtK5E46HR93YIBrrwUlIN' for identities '[rBayMvm7UI]' +[ 475.295] INFO zrok/controller/limits.(*shareRelaxAction).HandleShare: added dial service policy for 's0uzz1p7xjrr' +[ 475.299] INFO zrok/controller/limits.(*shareRelaxAction).HandleShare: relaxing 'tr7vpyrzvmh0' +[ 475.301] INFO zrok/controller/zrokEdgeSdk.CreateServicePolicyDial: created dial service policy '1kfuMP2APitf3qC2tsOC1b' for service '7jyiTZ0z2ediD5hZbxu7KH' for identities '[rBayMvm7UI]' +[ 475.301] INFO zrok/controller/limits.(*shareRelaxAction).HandleShare: added dial service policy for 'tr7vpyrzvmh0' +[ 475.305] INFO zrok/controller/limits.(*shareRelaxAction).HandleShare: relaxing '8k6dnu7x7ag0' +[ 475.308] INFO zrok/controller/zrokEdgeSdk.CreateServicePolicyDial: created dial service policy '12jWOvjIIuvYRW9vXfkRKw' for service '2J0I9dPe2JGnY1GwjmM6n7' for identities '[rBayMvm7UI]' +[ 475.308] INFO zrok/controller/limits.(*shareRelaxAction).HandleShare: added dial service policy for '8k6dnu7x7ag0' +[ 475.313] INFO zrok/controller/limits.(*Agent).relax: share '7u9szn30ikh0' still over limit +``` +And notice that we're now starting to see traffic on those shares again: + +``` +[ 485.164] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 53z6mz4re7tu, circuit: CjNBpViur backend {rx: 59.7 kB, tx: 60.0 kB} frontend {rx: 60.0 kB, tx: 59.7 kB} +[ 485.166] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 8k6dnu7x7ag0, circuit: qwlLhVS0w backend {rx: 50.1 kB, tx: 50.4 kB} frontend {rx: 50.4 kB, tx: 50.1 kB} +[ 485.168] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 0evcupz5k410, circuit: fMNBpVi0w backend {rx: 80.3 kB, tx: 80.7 kB} frontend {rx: 80.7 kB, tx: 80.3 kB} +[ 485.200] INFO zrok/controller/limits.(*shareWarningAction).HandleShare: warning '8k6dnu7x7ag0' +[ 486.095] INFO zrok/controller/limits.sendLimitWarningEmail: limit warning email sent to 'michael@quigley.com' +[ 490.162] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 53z6mz4re7tu, circuit: CjNBpViur backend {rx: 40.6 kB, tx: 40.9 kB} frontend {rx: 40.9 kB, tx: 40.6 kB} +[ 490.164] INFO zrok/controller/metrics.(*influxWriter).Handle: share: dh3f3jj7zhig, circuit: 5TNBhVS0r backend {rx: 44.5 kB, tx: 45.0 kB} frontend {rx: 45.0 kB, tx: 44.5 kB} +[ 490.166] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 0evcupz5k410, circuit: fMNBpVi0w backend {rx: 60.7 kB, tx: 61.1 kB} frontend {rx: 61.1 kB, tx: 60.7 kB} +[ 495.163] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 53z6mz4re7tu, circuit: CjNBpViur backend {rx: 45.3 kB, tx: 45.6 kB} frontend {rx: 45.6 kB, tx: 45.3 kB} +[ 495.165] INFO zrok/controller/metrics.(*influxWriter).Handle: share: dh3f3jj7zhig, circuit: 5TNBhVS0r backend {rx: 42.0 kB, tx: 42.4 kB} frontend {rx: 42.4 kB, tx: 42.0 kB} +[ 495.167] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 8k6dnu7x7ag0, circuit: qwlLhVS0w backend {rx: 33.3 kB, tx: 33.8 kB} frontend {rx: 33.8 kB, tx: 33.3 kB} +[ 500.163] INFO zrok/controller/metrics.(*influxWriter).Handle: share: tr7vpyrzvmh0, circuit: LdZLhVSuw backend {rx: 28.2 kB, tx: 28.5 kB} frontend {rx: 28.5 kB, tx: 28.2 kB} +[ 500.165] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 8k6dnu7x7ag0, circuit: qwlLhVS0w backend {rx: 40.0 kB, tx: 40.3 kB} frontend {rx: 40.3 kB, tx: 40.0 kB} +[ 500.167] INFO zrok/controller/metrics.(*influxWriter).Handle: share: dh3f3jj7zhig, circuit: 5TNBhVS0r backend {rx: 53.6 kB, tx: 54.0 kB} frontend {rx: 54.0 kB, tx: 53.6 kB} +[ 505.201] INFO zrok/controller/metrics.(*influxWriter).Handle: share: dh3f3jj7zhig, circuit: 5TNBhVS0r backend {rx: 38.4 kB, tx: 38.6 kB} frontend {rx: 38.6 kB, tx: 38.4 kB} +[ 505.208] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 53z6mz4re7tu, circuit: CjNBpViur backend {rx: 33.8 kB, tx: 34.2 kB} frontend {rx: 34.2 kB, tx: 33.8 kB} +[ 505.210] INFO zrok/controller/metrics.(*influxWriter).Handle: share: tr7vpyrzvmh0, circuit: LdZLhVSuw backend {rx: 39.7 kB, tx: 40.0 kB} frontend {rx: 40.0 kB, tx: 39.7 kB} +[ 510.164] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 0evcupz5k410, circuit: fMNBpVi0w backend {rx: 74.0 kB, tx: 74.5 kB} frontend {rx: 74.5 kB, tx: 74.0 kB} +[ 510.167] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 8k6dnu7x7ag0, circuit: qwlLhVS0w backend {rx: 51.5 kB, tx: 51.8 kB} frontend {rx: 51.8 kB, tx: 51.5 kB} +[ 510.169] INFO zrok/controller/metrics.(*influxWriter).Handle: share: s0uzz1p7xjrr, circuit: OJyBpVS0w backend {rx: 33.5 kB, tx: 33.9 kB} frontend {rx: 33.9 kB, tx: 33.5 kB} +[ 515.163] INFO zrok/controller/metrics.(*influxWriter).Handle: share: tr7vpyrzvmh0, circuit: LdZLhVSuw backend {rx: 62.7 kB, tx: 63.0 kB} frontend {rx: 63.0 kB, tx: 62.7 kB} +[ 515.165] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 53z6mz4re7tu, circuit: CjNBpViur backend {rx: 32.5 kB, tx: 32.9 kB} frontend {rx: 32.9 kB, tx: 32.5 kB} +[ 515.166] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 8k6dnu7x7ag0, circuit: qwlLhVS0w backend {rx: 47.4 kB, tx: 47.7 kB} frontend {rx: 47.7 kB, tx: 47.4 kB} +[ 520.164] INFO zrok/controller/metrics.(*influxWriter).Handle: share: s0uzz1p7xjrr, circuit: OJyBpVS0w backend {rx: 48.2 kB, tx: 48.5 kB} frontend {rx: 48.5 kB, tx: 48.2 kB} +[ 520.166] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 53z6mz4re7tu, circuit: CjNBpViur backend {rx: 45.8 kB, tx: 46.1 kB} frontend {rx: 46.1 kB, tx: 45.8 kB} +[ 520.167] INFO zrok/controller/metrics.(*influxWriter).Handle: share: tr7vpyrzvmh0, circuit: LdZLhVSuw backend {rx: 34.2 kB, tx: 34.4 kB} frontend {rx: 34.4 kB, tx: 34.2 kB} +[ 525.163] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 8k6dnu7x7ag0, circuit: qwlLhVS0w backend {rx: 35.0 kB, tx: 35.4 kB} frontend {rx: 35.4 kB, tx: 35.0 kB} +[ 525.165] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 53z6mz4re7tu, circuit: CjNBpViur backend {rx: 40.1 kB, tx: 40.4 kB} frontend {rx: 40.4 kB, tx: 40.1 kB} +[ 525.167] INFO zrok/controller/metrics.(*influxWriter).Handle: share: tr7vpyrzvmh0, circuit: LdZLhVSuw backend {rx: 24.7 kB, tx: 25.0 kB} frontend {rx: 25.0 kB, tx: 24.7 kB} +[ 530.164] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 8k6dnu7x7ag0, circuit: qwlLhVS0w backend {rx: 57.3 kB, tx: 57.9 kB} frontend {rx: 57.9 kB, tx: 57.3 kB} +[ 530.167] INFO zrok/controller/metrics.(*influxWriter).Handle: share: s0uzz1p7xjrr, circuit: OJyBpVS0w backend {rx: 51.4 kB, tx: 51.7 kB} frontend {rx: 51.7 kB, tx: 51.4 kB} +[ 530.168] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 53z6mz4re7tu, circuit: CjNBpViur backend {rx: 40.6 kB, tx: 41.0 kB} frontend {rx: 41.0 kB, tx: 40.6 kB} +[ 535.164] INFO zrok/controller/metrics.(*influxWriter).Handle: share: tr7vpyrzvmh0, circuit: LdZLhVSuw backend {rx: 41.5 kB, tx: 41.9 kB} frontend {rx: 41.9 kB, tx: 41.5 kB} +[ 535.166] INFO zrok/controller/metrics.(*influxWriter).Handle: share: s0uzz1p7xjrr, circuit: OJyBpVS0w backend {rx: 61.4 kB, tx: 61.9 kB} frontend {rx: 61.9 kB, tx: 61.4 kB} +[ 535.168] INFO zrok/controller/metrics.(*influxWriter).Handle: share: dh3f3jj7zhig, circuit: 5TNBhVS0r backend {rx: 33.3 kB, tx: 33.6 kB} frontend {rx: 33.6 kB, tx: 33.3 kB} +[ 540.163] INFO zrok/controller/metrics.(*influxWriter).Handle: share: tr7vpyrzvmh0, circuit: LdZLhVSuw backend {rx: 37.2 kB, tx: 37.5 kB} frontend {rx: 37.5 kB, tx: 37.2 kB} +[ 540.165] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 8k6dnu7x7ag0, circuit: qwlLhVS0w backend {rx: 53.8 kB, tx: 54.3 kB} frontend {rx: 54.3 kB, tx: 53.8 kB} +[ 540.167] INFO zrok/controller/metrics.(*influxWriter).Handle: share: dh3f3jj7zhig, circuit: 5TNBhVS0r backend {rx: 75.8 kB, tx: 76.4 kB} frontend {rx: 76.4 kB, tx: 75.8 kB} +[ 545.164] INFO zrok/controller/metrics.(*influxWriter).Handle: share: tr7vpyrzvmh0, circuit: LdZLhVSuw backend {rx: 69.9 kB, tx: 70.2 kB} frontend {rx: 70.2 kB, tx: 69.9 kB} +[ 545.166] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 0evcupz5k410, circuit: fMNBpVi0w backend {rx: 24.9 kB, tx: 25.2 kB} frontend {rx: 25.2 kB, tx: 24.9 kB} +[ 545.168] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 53z6mz4re7tu, circuit: CjNBpViur backend {rx: 39.4 kB, tx: 39.6 kB} frontend {rx: 39.6 kB, tx: 39.4 kB} +[ 550.164] INFO zrok/controller/metrics.(*influxWriter).Handle: share: s0uzz1p7xjrr, circuit: OJyBpVS0w backend {rx: 64.0 kB, tx: 64.3 kB} frontend {rx: 64.3 kB, tx: 64.0 kB} +[ 550.166] INFO zrok/controller/metrics.(*influxWriter).Handle: share: dh3f3jj7zhig, circuit: 5TNBhVS0r backend {rx: 39.2 kB, tx: 39.6 kB} frontend {rx: 39.6 kB, tx: 39.2 kB} +[ 550.168] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 0evcupz5k410, circuit: fMNBpVi0w backend {rx: 47.6 kB, tx: 47.9 kB} frontend {rx: 47.9 kB, tx: 47.6 kB} +[ 555.165] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 53z6mz4re7tu, circuit: CjNBpViur backend {rx: 54.2 kB, tx: 54.8 kB} frontend {rx: 54.8 kB, tx: 54.2 kB} +[ 555.167] INFO zrok/controller/metrics.(*influxWriter).Handle: share: tr7vpyrzvmh0, circuit: LdZLhVSuw backend {rx: 44.5 kB, tx: 44.8 kB} frontend {rx: 44.8 kB, tx: 44.5 kB} +[ 555.169] INFO zrok/controller/metrics.(*influxWriter).Handle: share: s0uzz1p7xjrr, circuit: OJyBpVS0w backend {rx: 66.3 kB, tx: 66.7 kB} frontend {rx: 66.7 kB, tx: 66.3 kB} +[ 560.164] INFO zrok/controller/metrics.(*influxWriter).Handle: share: dh3f3jj7zhig, circuit: 5TNBhVS0r backend {rx: 18.9 kB, tx: 19.2 kB} frontend {rx: 19.2 kB, tx: 18.9 kB} +[ 560.166] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 8k6dnu7x7ag0, circuit: qwlLhVS0w backend {rx: 51.5 kB, tx: 51.8 kB} frontend {rx: 51.8 kB, tx: 51.5 kB} +[ 560.167] INFO zrok/controller/metrics.(*influxWriter).Handle: share: s0uzz1p7xjrr, circuit: OJyBpVS0w backend {rx: 36.3 kB, tx: 36.7 kB} frontend {rx: 36.7 kB, tx: 36.3 kB} +[ 565.163] INFO zrok/controller/metrics.(*influxWriter).Handle: share: s0uzz1p7xjrr, circuit: OJyBpVS0w backend {rx: 70.7 kB, tx: 71.0 kB} frontend {rx: 71.0 kB, tx: 70.7 kB} +[ 565.165] INFO zrok/controller/metrics.(*influxWriter).Handle: share: dh3f3jj7zhig, circuit: 5TNBhVS0r backend {rx: 58.7 kB, tx: 59.1 kB} frontend {rx: 59.1 kB, tx: 58.7 kB} +[ 565.167] INFO zrok/controller/metrics.(*influxWriter).Handle: share: tr7vpyrzvmh0, circuit: LdZLhVSuw backend {rx: 33.8 kB, tx: 34.0 kB} frontend {rx: 34.0 kB, tx: 33.8 kB} +[ 570.163] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 8k6dnu7x7ag0, circuit: qwlLhVS0w backend {rx: 35.4 kB, tx: 35.7 kB} frontend {rx: 35.7 kB, tx: 35.4 kB} +[ 570.166] INFO zrok/controller/metrics.(*influxWriter).Handle: share: dh3f3jj7zhig, circuit: 5TNBhVS0r backend {rx: 47.2 kB, tx: 47.6 kB} frontend {rx: 47.6 kB, tx: 47.2 kB} +[ 570.167] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 53z6mz4re7tu, circuit: CjNBpViur backend {rx: 75.5 kB, tx: 75.8 kB} frontend {rx: 75.8 kB, tx: 75.5 kB} +[ 575.164] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 53z6mz4re7tu, circuit: CjNBpViur backend {rx: 34.3 kB, tx: 34.6 kB} frontend {rx: 34.6 kB, tx: 34.3 kB} +[ 575.167] INFO zrok/controller/metrics.(*influxWriter).Handle: share: tr7vpyrzvmh0, circuit: LdZLhVSuw backend {rx: 36.2 kB, tx: 36.6 kB} frontend {rx: 36.6 kB, tx: 36.2 kB} +[ 575.169] INFO zrok/controller/metrics.(*influxWriter).Handle: share: s0uzz1p7xjrr, circuit: OJyBpVS0w backend {rx: 53.9 kB, tx: 54.2 kB} frontend {rx: 54.2 kB, tx: 53.9 kB} +[ 575.178] INFO zrok/controller/limits.(*shareWarningAction).HandleShare: warning '53z6mz4re7tu' +[ 575.953] INFO zrok/controller/limits.sendLimitWarningEmail: limit warning email sent to 'michael@quigley.com' +[ 580.164] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 8k6dnu7x7ag0, circuit: qwlLhVS0w backend {rx: 50.3 kB, tx: 50.7 kB} frontend {rx: 50.7 kB, tx: 50.3 kB} +[ 580.166] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 53z6mz4re7tu, circuit: CjNBpViur backend {rx: 55.7 kB, tx: 56.1 kB} frontend {rx: 56.1 kB, tx: 55.7 kB} +[ 580.168] INFO zrok/controller/metrics.(*influxWriter).Handle: share: tr7vpyrzvmh0, circuit: LdZLhVSuw backend {rx: 41.0 kB, tx: 41.3 kB} frontend {rx: 41.3 kB, tx: 41.0 kB} +[ 585.164] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 0evcupz5k410, circuit: fMNBpVi0w backend {rx: 32.3 kB, tx: 32.6 kB} frontend {rx: 32.6 kB, tx: 32.3 kB} +[ 585.165] INFO zrok/controller/metrics.(*influxWriter).Handle: share: tr7vpyrzvmh0, circuit: LdZLhVSuw backend {rx: 18.5 kB, tx: 18.8 kB} frontend {rx: 18.8 kB, tx: 18.5 kB} +[ 585.167] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 53z6mz4re7tu, circuit: CjNBpViur backend {rx: 43.2 kB, tx: 43.6 kB} frontend {rx: 43.6 kB, tx: 43.2 kB} +[ 590.164] INFO zrok/controller/metrics.(*influxWriter).Handle: share: dh3f3jj7zhig, circuit: 5TNBhVS0r backend {rx: 32.8 kB, tx: 33.0 kB} frontend {rx: 33.0 kB, tx: 32.8 kB} +[ 590.166] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 53z6mz4re7tu, circuit: CjNBpViur backend {rx: 63.4 kB, tx: 63.7 kB} frontend {rx: 63.7 kB, tx: 63.4 kB} +[ 590.167] INFO zrok/controller/metrics.(*influxWriter).Handle: share: tr7vpyrzvmh0, circuit: LdZLhVSuw backend {rx: 18.1 kB, tx: 18.3 kB} frontend {rx: 18.3 kB, tx: 18.1 kB} +[ 590.208] INFO zrok/controller/limits.(*shareWarningAction).HandleShare: warning 'tr7vpyrzvmh0' +[ 591.168] INFO zrok/controller/limits.sendLimitWarningEmail: limit warning email sent to 'michael@quigley.com' +[ 595.163] INFO zrok/controller/metrics.(*influxWriter).Handle: share: dh3f3jj7zhig, circuit: 5TNBhVS0r backend {rx: 34.1 kB, tx: 34.5 kB} frontend {rx: 34.5 kB, tx: 34.1 kB} +[ 595.166] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 53z6mz4re7tu, circuit: CjNBpViur backend {rx: 46.0 kB, tx: 46.3 kB} frontend {rx: 46.3 kB, tx: 46.0 kB} +[ 595.169] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 8k6dnu7x7ag0, circuit: qwlLhVS0w backend {rx: 49.1 kB, tx: 49.4 kB} frontend {rx: 49.4 kB, tx: 49.1 kB} +[ 600.163] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 0evcupz5k410, circuit: fMNBpVi0w backend {rx: 34.0 kB, tx: 34.3 kB} frontend {rx: 34.3 kB, tx: 34.0 kB} +[ 600.165] INFO zrok/controller/metrics.(*influxWriter).Handle: share: s0uzz1p7xjrr, circuit: OJyBpVS0w backend {rx: 46.6 kB, tx: 47.1 kB} frontend {rx: 47.1 kB, tx: 46.6 kB} +[ 600.167] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 53z6mz4re7tu, circuit: CjNBpViur backend {rx: 23.2 kB, tx: 23.5 kB} frontend {rx: 23.5 kB, tx: 23.2 kB} +[ 600.189] INFO zrok/controller/limits.(*shareWarningAction).HandleShare: warning 's0uzz1p7xjrr' +[ 600.949] INFO zrok/controller/limits.sendLimitWarningEmail: limit warning email sent to 'michael@quigley.com' +[ 605.163] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 53z6mz4re7tu, circuit: CjNBpViur backend {rx: 61.5 kB, tx: 61.8 kB} frontend {rx: 61.8 kB, tx: 61.5 kB} +[ 605.165] INFO zrok/controller/metrics.(*influxWriter).Handle: share: tr7vpyrzvmh0, circuit: LdZLhVSuw backend {rx: 38.3 kB, tx: 38.7 kB} frontend {rx: 38.7 kB, tx: 38.3 kB} +[ 605.167] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 0evcupz5k410, circuit: fMNBpVi0w backend {rx: 35.1 kB, tx: 35.5 kB} frontend {rx: 35.5 kB, tx: 35.1 kB} +[ 610.163] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 8k6dnu7x7ag0, circuit: qwlLhVS0w backend {rx: 37.7 kB, tx: 38.1 kB} frontend {rx: 38.1 kB, tx: 37.7 kB} +[ 610.165] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 0evcupz5k410, circuit: fMNBpVi0w backend {rx: 50.4 kB, tx: 50.7 kB} frontend {rx: 50.7 kB, tx: 50.4 kB} +[ 610.167] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 53z6mz4re7tu, circuit: CjNBpViur backend {rx: 27.9 kB, tx: 28.2 kB} frontend {rx: 28.2 kB, tx: 27.9 kB} +[ 615.163] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 8k6dnu7x7ag0, circuit: qwlLhVS0w backend {rx: 25.7 kB, tx: 26.0 kB} frontend {rx: 26.0 kB, tx: 25.7 kB} +[ 615.165] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 0evcupz5k410, circuit: fMNBpVi0w backend {rx: 32.2 kB, tx: 32.5 kB} frontend {rx: 32.5 kB, tx: 32.2 kB} +[ 615.169] INFO zrok/controller/metrics.(*influxWriter).Handle: share: s0uzz1p7xjrr, circuit: OJyBpVS0w backend {rx: 47.2 kB, tx: 47.6 kB} frontend {rx: 47.6 kB, tx: 47.2 kB} +[ 620.165] INFO zrok/controller/metrics.(*influxWriter).Handle: share: dh3f3jj7zhig, circuit: 5TNBhVS0r backend {rx: 35.7 kB, tx: 36.2 kB} frontend {rx: 36.2 kB, tx: 35.7 kB} +[ 620.167] INFO zrok/controller/metrics.(*influxWriter).Handle: share: s0uzz1p7xjrr, circuit: OJyBpVS0w backend {rx: 60.6 kB, tx: 60.9 kB} frontend {rx: 60.9 kB, tx: 60.6 kB} +[ 620.169] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 53z6mz4re7tu, circuit: CjNBpViur backend {rx: 51.8 kB, tx: 52.3 kB} frontend {rx: 52.3 kB, tx: 51.8 kB} +[ 620.178] INFO zrok/controller/limits.(*shareWarningAction).HandleShare: warning 'dh3f3jj7zhig' +[ 620.929] INFO zrok/controller/limits.sendLimitWarningEmail: limit warning email sent to 'michael@quigley.com' +[ 625.162] INFO zrok/controller/metrics.(*influxWriter).Handle: share: s0uzz1p7xjrr, circuit: OJyBpVS0w backend {rx: 41.6 kB, tx: 42.0 kB} frontend {rx: 42.0 kB, tx: 41.6 kB} +[ 625.164] INFO zrok/controller/metrics.(*influxWriter).Handle: share: dh3f3jj7zhig, circuit: 5TNBhVS0r backend {rx: 46.4 kB, tx: 46.7 kB} frontend {rx: 46.7 kB, tx: 46.4 kB} +[ 625.166] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 53z6mz4re7tu, circuit: CjNBpViur backend {rx: 48.4 kB, tx: 48.7 kB} frontend {rx: 48.7 kB, tx: 48.4 kB} +[ 630.164] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 8k6dnu7x7ag0, circuit: qwlLhVS0w backend {rx: 29.3 kB, tx: 29.5 kB} frontend {rx: 29.5 kB, tx: 29.3 kB} +[ 630.166] INFO zrok/controller/metrics.(*influxWriter).Handle: share: s0uzz1p7xjrr, circuit: OJyBpVS0w backend {rx: 49.7 kB, tx: 50.2 kB} frontend {rx: 50.2 kB, tx: 49.7 kB} +[ 630.168] INFO zrok/controller/metrics.(*influxWriter).Handle: share: tr7vpyrzvmh0, circuit: LdZLhVSuw backend {rx: 47.7 kB, tx: 48.0 kB} frontend {rx: 48.0 kB, tx: 47.7 kB} +[ 635.164] INFO zrok/controller/metrics.(*influxWriter).Handle: share: s0uzz1p7xjrr, circuit: OJyBpVS0w backend {rx: 69.2 kB, tx: 69.6 kB} frontend {rx: 69.6 kB, tx: 69.2 kB} +[ 635.166] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 0evcupz5k410, circuit: fMNBpVi0w backend {rx: 45.8 kB, tx: 46.2 kB} frontend {rx: 46.2 kB, tx: 45.8 kB} +[ 635.167] INFO zrok/controller/metrics.(*influxWriter).Handle: share: dh3f3jj7zhig, circuit: 5TNBhVS0r backend {rx: 38.6 kB, tx: 39.1 kB} frontend {rx: 39.1 kB, tx: 38.6 kB} +[ 640.164] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 53z6mz4re7tu, circuit: CjNBpViur backend {rx: 41.7 kB, tx: 42.0 kB} frontend {rx: 42.0 kB, tx: 41.7 kB} +[ 640.166] INFO zrok/controller/metrics.(*influxWriter).Handle: share: tr7vpyrzvmh0, circuit: LdZLhVSuw backend {rx: 27.5 kB, tx: 28.0 kB} frontend {rx: 28.0 kB, tx: 27.5 kB} +[ 640.167] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 8k6dnu7x7ag0, circuit: qwlLhVS0w backend {rx: 28.4 kB, tx: 28.7 kB} frontend {rx: 28.7 kB, tx: 28.4 kB} +[ 645.164] INFO zrok/controller/metrics.(*influxWriter).Handle: share: tr7vpyrzvmh0, circuit: LdZLhVSuw backend {rx: 39.8 kB, tx: 40.0 kB} frontend {rx: 40.0 kB, tx: 39.8 kB} +[ 645.166] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 0evcupz5k410, circuit: fMNBpVi0w backend {rx: 52.2 kB, tx: 52.5 kB} frontend {rx: 52.5 kB, tx: 52.2 kB} +[ 645.168] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 53z6mz4re7tu, circuit: CjNBpViur backend {rx: 39.3 kB, tx: 39.6 kB} frontend {rx: 39.6 kB, tx: 39.3 kB} +[ 645.300] INFO zrok/controller/limits.(*shareWarningAction).HandleShare: warning '0evcupz5k410' +[ 647.031] INFO zrok/controller/limits.sendLimitWarningEmail: limit warning email sent to 'michael@quigley.com' +[ 650.164] INFO zrok/controller/metrics.(*influxWriter).Handle: share: dh3f3jj7zhig, circuit: 5TNBhVS0r backend {rx: 36.3 kB, tx: 36.7 kB} frontend {rx: 36.7 kB, tx: 36.3 kB} +[ 650.166] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 0evcupz5k410, circuit: fMNBpVi0w backend {rx: 50.7 kB, tx: 51.0 kB} frontend {rx: 51.0 kB, tx: 50.7 kB} +[ 650.168] INFO zrok/controller/metrics.(*influxWriter).Handle: share: tr7vpyrzvmh0, circuit: LdZLhVSuw backend {rx: 48.5 kB, tx: 48.8 kB} frontend {rx: 48.8 kB, tx: 48.5 kB} +[ 655.164] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 53z6mz4re7tu, circuit: CjNBpViur backend {rx: 24.6 kB, tx: 24.9 kB} frontend {rx: 24.9 kB, tx: 24.6 kB} +[ 655.166] INFO zrok/controller/metrics.(*influxWriter).Handle: share: s0uzz1p7xjrr, circuit: OJyBpVS0w backend {rx: 45.6 kB, tx: 46.0 kB} frontend {rx: 46.0 kB, tx: 45.6 kB} +[ 655.167] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 8k6dnu7x7ag0, circuit: qwlLhVS0w backend {rx: 51.8 kB, tx: 52.1 kB} frontend {rx: 52.1 kB, tx: 51.8 kB} +[ 655.284] INFO zrok/controller/limits.(*shareLimitAction).HandleShare: limiting '53z6mz4re7tu' +[ 655.299] INFO zrok/controller/zrokEdgeSdk.DeleteServicePolicy: deleted service policy '64Kz6F7CluxH1drfyMkzDx' for environment 'd.wJYlpt9' +[ 655.299] INFO zrok/controller/limits.(*shareLimitAction).HandleShare: removed dial service policy for '53z6mz4re7tu' +[ 660.164] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 8k6dnu7x7ag0, circuit: qwlLhVS0w backend {rx: 70.9 kB, tx: 71.4 kB} frontend {rx: 71.4 kB, tx: 70.9 kB} +[ 660.166] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 53z6mz4re7tu, circuit: CjNBpViur backend {rx: 49.0 kB, tx: 49.5 kB} frontend {rx: 49.5 kB, tx: 49.0 kB} +[ 660.168] INFO zrok/controller/metrics.(*influxWriter).Handle: share: tr7vpyrzvmh0, circuit: LdZLhVSuw backend {rx: 36.2 kB, tx: 36.5 kB} frontend {rx: 36.5 kB, tx: 36.2 kB} +[ 665.164] INFO zrok/controller/metrics.(*influxWriter).Handle: share: s0uzz1p7xjrr, circuit: OJyBpVS0w backend {rx: 48.3 kB, tx: 48.7 kB} frontend {rx: 48.7 kB, tx: 48.3 kB} +[ 665.166] INFO zrok/controller/metrics.(*influxWriter).Handle: share: tr7vpyrzvmh0, circuit: LdZLhVSuw backend {rx: 42.1 kB, tx: 42.4 kB} frontend {rx: 42.4 kB, tx: 42.1 kB} +[ 665.168] INFO zrok/controller/metrics.(*influxWriter).Handle: share: dh3f3jj7zhig, circuit: 5TNBhVS0r backend {rx: 47.4 kB, tx: 47.7 kB} frontend {rx: 47.7 kB, tx: 47.4 kB} +[ 670.164] INFO zrok/controller/metrics.(*influxWriter).Handle: share: tr7vpyrzvmh0, circuit: LdZLhVSuw backend {rx: 40.2 kB, tx: 40.6 kB} frontend {rx: 40.6 kB, tx: 40.2 kB} +[ 670.167] INFO zrok/controller/metrics.(*influxWriter).Handle: share: s0uzz1p7xjrr, circuit: OJyBpVS0w backend {rx: 62.1 kB, tx: 62.4 kB} frontend {rx: 62.4 kB, tx: 62.1 kB} +[ 675.164] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 0evcupz5k410, circuit: fMNBpVi0w backend {rx: 13.8 kB, tx: 14.1 kB} frontend {rx: 14.1 kB, tx: 13.8 kB} +[ 675.166] INFO zrok/controller/metrics.(*influxWriter).Handle: share: tr7vpyrzvmh0, circuit: LdZLhVSuw backend {rx: 36.6 kB, tx: 36.8 kB} frontend {rx: 36.8 kB, tx: 36.6 kB} +[ 675.168] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 8k6dnu7x7ag0, circuit: qwlLhVS0w backend {rx: 35.3 kB, tx: 35.6 kB} frontend {rx: 35.6 kB, tx: 35.3 kB} +[ 680.164] INFO zrok/controller/metrics.(*influxWriter).Handle: share: dh3f3jj7zhig, circuit: 5TNBhVS0r backend {rx: 55.3 kB, tx: 55.8 kB} frontend {rx: 55.8 kB, tx: 55.3 kB} +[ 680.166] INFO zrok/controller/metrics.(*influxWriter).Handle: share: tr7vpyrzvmh0, circuit: LdZLhVSuw backend {rx: 46.6 kB, tx: 46.9 kB} frontend {rx: 46.9 kB, tx: 46.6 kB} +[ 685.164] INFO zrok/controller/metrics.(*influxWriter).Handle: share: tr7vpyrzvmh0, circuit: LdZLhVSuw backend {rx: 56.2 kB, tx: 56.5 kB} frontend {rx: 56.5 kB, tx: 56.2 kB} +[ 685.172] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 0evcupz5k410, circuit: fMNBpVi0w backend {rx: 42.4 kB, tx: 42.8 kB} frontend {rx: 42.8 kB, tx: 42.4 kB} +[ 685.175] INFO zrok/controller/metrics.(*influxWriter).Handle: share: dh3f3jj7zhig, circuit: 5TNBhVS0r backend {rx: 46.8 kB, tx: 47.1 kB} frontend {rx: 47.1 kB, tx: 46.8 kB} +[ 690.164] INFO zrok/controller/metrics.(*influxWriter).Handle: share: dh3f3jj7zhig, circuit: 5TNBhVS0r backend {rx: 72.4 kB, tx: 72.8 kB} frontend {rx: 72.8 kB, tx: 72.4 kB} +[ 690.167] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 8k6dnu7x7ag0, circuit: qwlLhVS0w backend {rx: 58.5 kB, tx: 58.7 kB} frontend {rx: 58.7 kB, tx: 58.5 kB} +[ 695.163] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 0evcupz5k410, circuit: fMNBpVi0w backend {rx: 21.1 kB, tx: 21.4 kB} frontend {rx: 21.4 kB, tx: 21.1 kB} +[ 695.165] INFO zrok/controller/metrics.(*influxWriter).Handle: share: tr7vpyrzvmh0, circuit: LdZLhVSuw backend {rx: 41.5 kB, tx: 41.8 kB} frontend {rx: 41.8 kB, tx: 41.5 kB} +[ 695.167] INFO zrok/controller/metrics.(*influxWriter).Handle: share: s0uzz1p7xjrr, circuit: OJyBpVS0w backend {rx: 49.5 kB, tx: 49.8 kB} frontend {rx: 49.8 kB, tx: 49.5 kB} +[ 700.164] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 0evcupz5k410, circuit: fMNBpVi0w backend {rx: 28.6 kB, tx: 28.9 kB} frontend {rx: 28.9 kB, tx: 28.6 kB} +[ 700.165] INFO zrok/controller/metrics.(*influxWriter).Handle: share: s0uzz1p7xjrr, circuit: OJyBpVS0w backend {rx: 58.6 kB, tx: 59.0 kB} frontend {rx: 59.0 kB, tx: 58.6 kB} +[ 700.193] INFO zrok/controller/limits.(*shareLimitAction).HandleShare: limiting 's0uzz1p7xjrr' +[ 700.208] INFO zrok/controller/zrokEdgeSdk.DeleteServicePolicy: deleted service policy '6MZ8i9sqvom96P70P24FJQ' for environment 'd.wJYlpt9' +[ 700.208] INFO zrok/controller/limits.(*shareLimitAction).HandleShare: removed dial service policy for 's0uzz1p7xjrr' +[ 705.165] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 0evcupz5k410, circuit: fMNBpVi0w backend {rx: 40.1 kB, tx: 40.6 kB} frontend {rx: 40.6 kB, tx: 40.1 kB} +[ 705.167] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 8k6dnu7x7ag0, circuit: qwlLhVS0w backend {rx: 55.7 kB, tx: 56.1 kB} frontend {rx: 56.1 kB, tx: 55.7 kB} +[ 705.169] INFO zrok/controller/metrics.(*influxWriter).Handle: share: s0uzz1p7xjrr, circuit: OJyBpVS0w backend {rx: 46.0 kB, tx: 46.2 kB} frontend {rx: 46.2 kB, tx: 46.0 kB} +[ 710.164] INFO zrok/controller/metrics.(*influxWriter).Handle: share: tr7vpyrzvmh0, circuit: LdZLhVSuw backend {rx: 20.4 kB, tx: 20.6 kB} frontend {rx: 20.6 kB, tx: 20.4 kB} +[ 710.166] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 0evcupz5k410, circuit: fMNBpVi0w backend {rx: 74.0 kB, tx: 74.4 kB} frontend {rx: 74.4 kB, tx: 74.0 kB} +[ 710.178] INFO zrok/controller/limits.(*shareLimitAction).HandleShare: limiting 'tr7vpyrzvmh0' +[ 710.192] INFO zrok/controller/zrokEdgeSdk.DeleteServicePolicy: deleted service policy '1kfuMP2APitf3qC2tsOC1b' for environment 'd.wJYlpt9' +[ 710.192] INFO zrok/controller/limits.(*shareLimitAction).HandleShare: removed dial service policy for 'tr7vpyrzvmh0' +[ 715.165] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 0evcupz5k410, circuit: fMNBpVi0w backend {rx: 59.7 kB, tx: 60.2 kB} frontend {rx: 60.2 kB, tx: 59.7 kB} +[ 715.167] INFO zrok/controller/metrics.(*influxWriter).Handle: share: tr7vpyrzvmh0, circuit: LdZLhVSuw backend {rx: 67.5 kB, tx: 67.8 kB} frontend {rx: 67.8 kB, tx: 67.5 kB} +[ 720.163] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 8k6dnu7x7ag0, circuit: qwlLhVS0w backend {rx: 43.7 kB, tx: 44.1 kB} frontend {rx: 44.1 kB, tx: 43.7 kB} +[ 725.164] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 8k6dnu7x7ag0, circuit: qwlLhVS0w backend {rx: 36.4 kB, tx: 36.6 kB} frontend {rx: 36.6 kB, tx: 36.4 kB} +[ 725.166] INFO zrok/controller/metrics.(*influxWriter).Handle: share: dh3f3jj7zhig, circuit: 5TNBhVS0r backend {rx: 72.2 kB, tx: 72.7 kB} frontend {rx: 72.7 kB, tx: 72.2 kB} +[ 730.164] INFO zrok/controller/metrics.(*influxWriter).Handle: share: dh3f3jj7zhig, circuit: 5TNBhVS0r backend {rx: 41.0 kB, tx: 41.4 kB} frontend {rx: 41.4 kB, tx: 41.0 kB} +[ 735.163] INFO zrok/controller/metrics.(*influxWriter).Handle: share: dh3f3jj7zhig, circuit: 5TNBhVS0r backend {rx: 31.3 kB, tx: 31.6 kB} frontend {rx: 31.6 kB, tx: 31.3 kB} +[ 735.165] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 0evcupz5k410, circuit: fMNBpVi0w backend {rx: 39.1 kB, tx: 39.4 kB} frontend {rx: 39.4 kB, tx: 39.1 kB} +[ 740.163] INFO zrok/controller/metrics.(*influxWriter).Handle: share: dh3f3jj7zhig, circuit: 5TNBhVS0r backend {rx: 30.7 kB, tx: 31.0 kB} frontend {rx: 31.0 kB, tx: 30.7 kB} +[ 740.177] INFO zrok/controller/limits.(*shareLimitAction).HandleShare: limiting 'dh3f3jj7zhig' +[ 740.192] INFO zrok/controller/zrokEdgeSdk.DeleteServicePolicy: deleted service policy '3LQG2ptwUxIuWtRzTLAqAc' for environment 'd.wJYlpt9' +[ 740.192] INFO zrok/controller/limits.(*shareLimitAction).HandleShare: removed dial service policy for 'dh3f3jj7zhig' +[ 745.164] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 0evcupz5k410, circuit: fMNBpVi0w backend {rx: 38.2 kB, tx: 38.5 kB} frontend {rx: 38.5 kB, tx: 38.2 kB} +[ 745.165] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 8k6dnu7x7ag0, circuit: qwlLhVS0w backend {rx: 42.3 kB, tx: 42.7 kB} frontend {rx: 42.7 kB, tx: 42.3 kB} +[ 745.192] INFO zrok/controller/limits.(*shareLimitAction).HandleShare: limiting '8k6dnu7x7ag0' +[ 745.195] INFO zrok/controller/zrokEdgeSdk.DeleteServicePolicy: deleted service policy '12jWOvjIIuvYRW9vXfkRKw' for environment 'd.wJYlpt9' +[ 745.195] INFO zrok/controller/limits.(*shareLimitAction).HandleShare: removed dial service policy for '8k6dnu7x7ag0' +[ 750.164] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 0evcupz5k410, circuit: fMNBpVi0w backend {rx: 36.4 kB, tx: 36.7 kB} frontend {rx: 36.7 kB, tx: 36.4 kB} +[ 760.164] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 0evcupz5k410, circuit: fMNBpVi0w backend {rx: 57.5 kB, tx: 58.0 kB} frontend {rx: 58.0 kB, tx: 57.5 kB} +[ 760.178] INFO zrok/controller/limits.(*shareLimitAction).HandleShare: limiting '0evcupz5k410' +[ 760.194] INFO zrok/controller/zrokEdgeSdk.DeleteServicePolicy: deleted service policy '4BPqQhFsGGmoBsqFDIWlWA' for environment 'd.wJYlpt9' +[ 760.194] INFO zrok/controller/limits.(*shareLimitAction).HandleShare: removed dial service policy for '0evcupz5k410' +[ 820.195] INFO zrok/controller/limits.(*Agent).relax: relaxing +[ 820.200] ERROR zrok/controller/limits.(*Agent).checkShareLimit: expected 2 results; got '0' (from(bucket: "zrok")|> range(start: -5m0s)|> filter(fn: (r) => r["_measurement"] == "xfer")|> filter(fn: (r) => r["_field"] == "rx" or r["_field"] == "tx")|> filter(fn: (r) => r["namespace"] == "backend")|> filter(fn: (r) => r["share"] == "7u9szn30ikh0")|> sum()) +[ 820.201] INFO zrok/controller/limits.(*shareRelaxAction).HandleShare: relaxing '7u9szn30ikh0' +[ 820.215] INFO zrok/controller/zrokEdgeSdk.CreateServicePolicyDial: created dial service policy '4yz1WSGg04BeARMuVkmxf7' for service '6FzYnK0RFJmT0rDSP1bzVE' for identities '[rBayMvm7UI]' +[ 820.215] INFO zrok/controller/limits.(*shareRelaxAction).HandleShare: added dial service policy for '7u9szn30ikh0' +[ 820.219] INFO zrok/controller/limits.(*Agent).relax: share '53z6mz4re7tu' still over limit +[ 820.223] INFO zrok/controller/limits.(*Agent).relax: share 's0uzz1p7xjrr' still over limit +[ 820.227] INFO zrok/controller/limits.(*Agent).relax: share 'tr7vpyrzvmh0' still over limit +[ 820.231] INFO zrok/controller/limits.(*Agent).relax: share 'dh3f3jj7zhig' still over limit +[ 820.236] INFO zrok/controller/limits.(*Agent).relax: share '8k6dnu7x7ag0' still over limit +[ 820.240] INFO zrok/controller/limits.(*Agent).relax: share '0evcupz5k410' still over limit +[ 830.164] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 7u9szn30ikh0, circuit: ESgSh4i0r backend {rx: 61.6 kB, tx: 61.9 kB} frontend {rx: 61.9 kB, tx: 61.6 kB} +[ 840.164] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 7u9szn30ikh0, circuit: ESgSh4i0r backend {rx: 61.4 kB, tx: 61.7 kB} frontend {rx: 61.7 kB, tx: 61.4 kB} +[ 850.164] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 7u9szn30ikh0, circuit: ESgSh4i0r backend {rx: 30.4 kB, tx: 30.7 kB} frontend {rx: 30.7 kB, tx: 30.4 kB} +[ 860.163] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 7u9szn30ikh0, circuit: ESgSh4i0r backend {rx: 52.6 kB, tx: 53.0 kB} frontend {rx: 53.0 kB, tx: 52.6 kB} +[ 870.163] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 7u9szn30ikh0, circuit: ESgSh4i0r backend {rx: 42.2 kB, tx: 42.6 kB} frontend {rx: 42.6 kB, tx: 42.2 kB} +[ 880.163] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 7u9szn30ikh0, circuit: ESgSh4i0r backend {rx: 27.1 kB, tx: 27.4 kB} frontend {rx: 27.4 kB, tx: 27.1 kB} +[ 890.163] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 7u9szn30ikh0, circuit: ESgSh4i0r backend {rx: 49.9 kB, tx: 50.3 kB} frontend {rx: 50.3 kB, tx: 49.9 kB} +[ 900.164] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 7u9szn30ikh0, circuit: ESgSh4i0r backend {rx: 51.5 kB, tx: 51.8 kB} frontend {rx: 51.8 kB, tx: 51.5 kB} +[ 910.163] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 7u9szn30ikh0, circuit: ESgSh4i0r backend {rx: 44.0 kB, tx: 44.5 kB} frontend {rx: 44.5 kB, tx: 44.0 kB} +[ 920.163] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 7u9szn30ikh0, circuit: ESgSh4i0r backend {rx: 43.5 kB, tx: 43.8 kB} frontend {rx: 43.8 kB, tx: 43.5 kB} +[ 930.164] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 7u9szn30ikh0, circuit: ESgSh4i0r backend {rx: 61.3 kB, tx: 61.7 kB} frontend {rx: 61.7 kB, tx: 61.3 kB} +[ 930.177] INFO zrok/controller/limits.(*shareWarningAction).HandleShare: warning '7u9szn30ikh0' +[ 931.057] INFO zrok/controller/limits.sendLimitWarningEmail: limit warning email sent to 'michael@quigley.com' +[ 940.163] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 7u9szn30ikh0, circuit: ESgSh4i0r backend {rx: 30.2 kB, tx: 30.5 kB} frontend {rx: 30.5 kB, tx: 30.2 kB} +[ 950.163] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 7u9szn30ikh0, circuit: ESgSh4i0r backend {rx: 56.2 kB, tx: 56.6 kB} frontend {rx: 56.6 kB, tx: 56.2 kB} +[ 960.163] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 7u9szn30ikh0, circuit: ESgSh4i0r backend {rx: 73.1 kB, tx: 73.6 kB} frontend {rx: 73.6 kB, tx: 73.1 kB} +[ 970.164] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 7u9szn30ikh0, circuit: ESgSh4i0r backend {rx: 35.1 kB, tx: 35.4 kB} frontend {rx: 35.4 kB, tx: 35.1 kB} +[ 980.163] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 7u9szn30ikh0, circuit: ESgSh4i0r backend {rx: 63.6 kB, tx: 64.0 kB} frontend {rx: 64.0 kB, tx: 63.6 kB} +[ 990.163] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 7u9szn30ikh0, circuit: ESgSh4i0r backend {rx: 46.6 kB, tx: 47.0 kB} frontend {rx: 47.0 kB, tx: 46.6 kB} +[1000.163] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 7u9szn30ikh0, circuit: ESgSh4i0r backend {rx: 36.8 kB, tx: 37.3 kB} frontend {rx: 37.3 kB, tx: 36.8 kB} +[1010.163] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 7u9szn30ikh0, circuit: ESgSh4i0r backend {rx: 24.5 kB, tx: 24.9 kB} frontend {rx: 24.9 kB, tx: 24.5 kB} +[1020.164] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 7u9szn30ikh0, circuit: ESgSh4i0r backend {rx: 47.3 kB, tx: 47.7 kB} frontend {rx: 47.7 kB, tx: 47.3 kB} +[1030.164] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 7u9szn30ikh0, circuit: ESgSh4i0r backend {rx: 29.6 kB, tx: 29.9 kB} frontend {rx: 29.9 kB, tx: 29.6 kB} +[1040.164] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 7u9szn30ikh0, circuit: ESgSh4i0r backend {rx: 48.7 kB, tx: 49.1 kB} frontend {rx: 49.1 kB, tx: 48.7 kB} +[1050.164] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 7u9szn30ikh0, circuit: ESgSh4i0r backend {rx: 41.8 kB, tx: 42.0 kB} frontend {rx: 42.0 kB, tx: 41.8 kB} +[1050.284] INFO zrok/controller/limits.(*shareLimitAction).HandleShare: limiting '7u9szn30ikh0' +[1050.300] INFO zrok/controller/zrokEdgeSdk.DeleteServicePolicy: deleted service policy '4yz1WSGg04BeARMuVkmxf7' for environment 'd.wJYlpt9' +[1050.300] INFO zrok/controller/limits.(*shareLimitAction).HandleShare: removed dial service policy for '7u9szn30ikh0' +[1110.301] INFO zrok/controller/limits.(*Agent).relax: relaxing +[1110.307] ERROR zrok/controller/limits.(*Agent).checkShareLimit: expected 2 results; got '0' (from(bucket: "zrok")|> range(start: -5m0s)|> filter(fn: (r) => r["_measurement"] == "xfer")|> filter(fn: (r) => r["_field"] == "rx" or r["_field"] == "tx")|> filter(fn: (r) => r["namespace"] == "backend")|> filter(fn: (r) => r["share"] == "53z6mz4re7tu")|> sum()) +[1110.307] INFO zrok/controller/limits.(*shareRelaxAction).HandleShare: relaxing '53z6mz4re7tu' +[1110.321] INFO zrok/controller/zrokEdgeSdk.CreateServicePolicyDial: created dial service policy 'WxOiC60VDWvHHlbtcaJ6D' for service '2NiotGOyBHBEbFZwbTFJ2u' for identities '[rBayMvm7UI]' +[1110.321] INFO zrok/controller/limits.(*shareRelaxAction).HandleShare: added dial service policy for '53z6mz4re7tu' +[1110.325] ERROR zrok/controller/limits.(*Agent).checkShareLimit: expected 2 results; got '0' (from(bucket: "zrok")|> range(start: -5m0s)|> filter(fn: (r) => r["_measurement"] == "xfer")|> filter(fn: (r) => r["_field"] == "rx" or r["_field"] == "tx")|> filter(fn: (r) => r["namespace"] == "backend")|> filter(fn: (r) => r["share"] == "s0uzz1p7xjrr")|> sum()) +[1110.325] INFO zrok/controller/limits.(*shareRelaxAction).HandleShare: relaxing 's0uzz1p7xjrr' +[1110.327] INFO zrok/controller/zrokEdgeSdk.CreateServicePolicyDial: created dial service policy '2ubWYvKo2EOnrn1U4MQ4Cu' for service 'KtK5E46HR93YIBrrwUlIN' for identities '[rBayMvm7UI]' +[1110.327] INFO zrok/controller/limits.(*shareRelaxAction).HandleShare: added dial service policy for 's0uzz1p7xjrr' +[1110.331] ERROR zrok/controller/limits.(*Agent).checkShareLimit: expected 2 results; got '0' (from(bucket: "zrok")|> range(start: -5m0s)|> filter(fn: (r) => r["_measurement"] == "xfer")|> filter(fn: (r) => r["_field"] == "rx" or r["_field"] == "tx")|> filter(fn: (r) => r["namespace"] == "backend")|> filter(fn: (r) => r["share"] == "tr7vpyrzvmh0")|> sum()) +[1110.331] INFO zrok/controller/limits.(*shareRelaxAction).HandleShare: relaxing 'tr7vpyrzvmh0' +[1110.343] INFO zrok/controller/zrokEdgeSdk.CreateServicePolicyDial: created dial service policy '1Q2DMHZ9AFsBA8D2SNzC4l' for service '7jyiTZ0z2ediD5hZbxu7KH' for identities '[rBayMvm7UI]' +[1110.343] INFO zrok/controller/limits.(*shareRelaxAction).HandleShare: added dial service policy for 'tr7vpyrzvmh0' +[1110.348] ERROR zrok/controller/limits.(*Agent).checkShareLimit: expected 2 results; got '0' (from(bucket: "zrok")|> range(start: -5m0s)|> filter(fn: (r) => r["_measurement"] == "xfer")|> filter(fn: (r) => r["_field"] == "rx" or r["_field"] == "tx")|> filter(fn: (r) => r["namespace"] == "backend")|> filter(fn: (r) => r["share"] == "dh3f3jj7zhig")|> sum()) +[1110.349] INFO zrok/controller/limits.(*shareRelaxAction).HandleShare: relaxing 'dh3f3jj7zhig' +[1110.351] INFO zrok/controller/zrokEdgeSdk.CreateServicePolicyDial: created dial service policy 'BrG9wKvUsajfhPkVfz44g' for service 'nyKOLlxUWWbCzD7h9Jhjq' for identities '[rBayMvm7UI]' +[1110.351] INFO zrok/controller/limits.(*shareRelaxAction).HandleShare: added dial service policy for 'dh3f3jj7zhig' +[1110.356] ERROR zrok/controller/limits.(*Agent).checkShareLimit: expected 2 results; got '0' (from(bucket: "zrok")|> range(start: -5m0s)|> filter(fn: (r) => r["_measurement"] == "xfer")|> filter(fn: (r) => r["_field"] == "rx" or r["_field"] == "tx")|> filter(fn: (r) => r["namespace"] == "backend")|> filter(fn: (r) => r["share"] == "8k6dnu7x7ag0")|> sum()) +[1110.356] INFO zrok/controller/limits.(*shareRelaxAction).HandleShare: relaxing '8k6dnu7x7ag0' +[1110.364] INFO zrok/controller/zrokEdgeSdk.CreateServicePolicyDial: created dial service policy '1kbYWDgPbtk0JYjIPsRGOC' for service '2J0I9dPe2JGnY1GwjmM6n7' for identities '[rBayMvm7UI]' +[1110.364] INFO zrok/controller/limits.(*shareRelaxAction).HandleShare: added dial service policy for '8k6dnu7x7ag0' +[1110.372] ERROR zrok/controller/limits.(*Agent).checkShareLimit: expected 2 results; got '0' (from(bucket: "zrok")|> range(start: -5m0s)|> filter(fn: (r) => r["_measurement"] == "xfer")|> filter(fn: (r) => r["_field"] == "rx" or r["_field"] == "tx")|> filter(fn: (r) => r["namespace"] == "backend")|> filter(fn: (r) => r["share"] == "0evcupz5k410")|> sum()) +[1110.372] INFO zrok/controller/limits.(*shareRelaxAction).HandleShare: relaxing '0evcupz5k410' +[1110.374] INFO zrok/controller/zrokEdgeSdk.CreateServicePolicyDial: created dial service policy 'E30643mY9M6vU6bQSQHa9' for service '3WHJGqUdxkDtPYLgEL5V3q' for identities '[rBayMvm7UI]' +[1110.374] INFO zrok/controller/limits.(*shareRelaxAction).HandleShare: added dial service policy for '0evcupz5k410' +[1110.378] INFO zrok/controller/limits.(*Agent).relax: share '7u9szn30ikh0' still over limit +[1115.165] INFO zrok/controller/metrics.(*influxWriter).Handle: share: tr7vpyrzvmh0, circuit: gaSGp4i0r backend {rx: 3.4 kB, tx: 3.4 kB} frontend {rx: 3.4 kB, tx: 3.4 kB} +[1120.165] INFO zrok/controller/metrics.(*influxWriter).Handle: share: tr7vpyrzvmh0, circuit: gaSGp4i0r backend {rx: 26.5 kB, tx: 26.7 kB} frontend {rx: 26.7 kB, tx: 26.5 kB} +[1120.167] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 8k6dnu7x7ag0, circuit: nESTh4iur backend {rx: 65.6 kB, tx: 66.1 kB} frontend {rx: 66.1 kB, tx: 65.6 kB} +[1120.169] INFO zrok/controller/metrics.(*influxWriter).Handle: share: s0uzz1p7xjrr, circuit: GGiTp4S0w backend {rx: 53.5 kB, tx: 54.0 kB} frontend {rx: 54.0 kB, tx: 53.5 kB} +[1125.164] INFO zrok/controller/metrics.(*influxWriter).Handle: share: tr7vpyrzvmh0, circuit: gaSGp4i0r backend {rx: 43.7 kB, tx: 44.1 kB} frontend {rx: 44.1 kB, tx: 43.7 kB} +[1125.167] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 53z6mz4re7tu, circuit: fSiGh4iur backend {rx: 17.8 kB, tx: 18.0 kB} frontend {rx: 18.0 kB, tx: 17.8 kB} +[1125.169] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 0evcupz5k410, circuit: k4SGhVSuw backend {rx: 51.9 kB, tx: 52.3 kB} frontend {rx: 52.3 kB, tx: 51.9 kB} +[1130.163] INFO zrok/controller/metrics.(*influxWriter).Handle: share: tr7vpyrzvmh0, circuit: gaSGp4i0r backend {rx: 50.9 kB, tx: 51.2 kB} frontend {rx: 51.2 kB, tx: 50.9 kB} +[1130.165] INFO zrok/controller/metrics.(*influxWriter).Handle: share: s0uzz1p7xjrr, circuit: GGiTp4S0w backend {rx: 48.6 kB, tx: 49.0 kB} frontend {rx: 49.0 kB, tx: 48.6 kB} +[1130.166] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 53z6mz4re7tu, circuit: fSiGh4iur backend {rx: 37.8 kB, tx: 38.0 kB} frontend {rx: 38.0 kB, tx: 37.8 kB} +[1135.164] INFO zrok/controller/metrics.(*influxWriter).Handle: share: tr7vpyrzvmh0, circuit: gaSGp4i0r backend {rx: 57.6 kB, tx: 58.1 kB} frontend {rx: 58.1 kB, tx: 57.6 kB} +[1135.166] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 53z6mz4re7tu, circuit: fSiGh4iur backend {rx: 43.6 kB, tx: 44.1 kB} frontend {rx: 44.1 kB, tx: 43.6 kB} +[1135.167] INFO zrok/controller/metrics.(*influxWriter).Handle: share: s0uzz1p7xjrr, circuit: GGiTp4S0w backend {rx: 51.0 kB, tx: 51.4 kB} frontend {rx: 51.4 kB, tx: 51.0 kB} +[1140.165] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 8k6dnu7x7ag0, circuit: nESTh4iur backend {rx: 28.4 kB, tx: 28.6 kB} frontend {rx: 28.6 kB, tx: 28.4 kB} +[1140.167] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 53z6mz4re7tu, circuit: fSiGh4iur backend {rx: 31.6 kB, tx: 32.0 kB} frontend {rx: 32.0 kB, tx: 31.6 kB} +[1140.169] INFO zrok/controller/metrics.(*influxWriter).Handle: share: s0uzz1p7xjrr, circuit: GGiTp4S0w backend {rx: 23.8 kB, tx: 24.2 kB} frontend {rx: 24.2 kB, tx: 23.8 kB} +[1141.514] INFO zrok/controller/zrokEdgeSdk.DeleteServiceEdgeRouterPolicy: deleted service edge router policy '2RIKOBMOckfbI2xMSLAKxC' for environment 'd.wJYlpt9' +[1141.517] INFO zrok/controller/zrokEdgeSdk.DeleteServicePolicy: deleted service policy '1kbYWDgPbtk0JYjIPsRGOC' for environment 'd.wJYlpt9' +[1141.519] INFO zrok/controller/zrokEdgeSdk.DeleteServicePolicy: deleted service policy '4vT5eEPahgWEVdAuKN91Sd' for environment 'd.wJYlpt9' +[1141.521] INFO zrok/controller/zrokEdgeSdk.DeleteConfig: deleted config '5nG9jM8VNl0uBFcRRt3AvI' for 'd.wJYlpt9' +[1141.522] INFO zrok/controller/zrokEdgeSdk.DeleteService: deleted service '2J0I9dPe2JGnY1GwjmM6n7' for environment 'd.wJYlpt9' +[1141.599] INFO zrok/controller/zrokEdgeSdk.DeleteServiceEdgeRouterPolicy: deleted service edge router policy '2CM03d1cNpG4rma38BLzCQ' for environment 'd.wJYlpt9' +[1141.602] INFO zrok/controller/zrokEdgeSdk.DeleteServicePolicy: deleted service policy 'WxOiC60VDWvHHlbtcaJ6D' for environment 'd.wJYlpt9' +[1141.635] INFO zrok/controller/zrokEdgeSdk.DeleteServicePolicy: deleted service policy 'RRfDaA5kjCqUBVC9LvN1H' for environment 'd.wJYlpt9' +[1141.639] INFO zrok/controller/zrokEdgeSdk.DeleteConfig: deleted config '6U3XDGnBjtONN5H6pUze12' for 'd.wJYlpt9' +[1141.645] INFO zrok/controller/zrokEdgeSdk.DeleteService: deleted service '2NiotGOyBHBEbFZwbTFJ2u' for environment 'd.wJYlpt9' +[1141.701] INFO zrok/controller/zrokEdgeSdk.DeleteServiceEdgeRouterPolicy: deleted service edge router policy '2ZnnIXSTQ3Zscha1kykqQr' for environment 'd.wJYlpt9' +[1141.704] INFO zrok/controller/zrokEdgeSdk.DeleteServicePolicy: deleted service policy 'BrG9wKvUsajfhPkVfz44g' for environment 'd.wJYlpt9' +[1141.706] INFO zrok/controller/zrokEdgeSdk.DeleteServicePolicy: deleted service policy '1xF4ky6cDJm63tzlNTqoLC' for environment 'd.wJYlpt9' +[1141.707] INFO zrok/controller/zrokEdgeSdk.DeleteConfig: deleted config '76iBDASRcxOmGtdwjVHo26' for 'd.wJYlpt9' +[1141.708] INFO zrok/controller/zrokEdgeSdk.DeleteService: deleted service 'nyKOLlxUWWbCzD7h9Jhjq' for environment 'd.wJYlpt9' +[1141.926] INFO zrok/controller/zrokEdgeSdk.DeleteServiceEdgeRouterPolicy: deleted service edge router policy '3xAG26zA9yska3LeZQUJ3N' for environment 'd.wJYlpt9' +[1141.927] INFO zrok/controller/zrokEdgeSdk.DeleteServicePolicy: did not find a service policy +[1141.929] INFO zrok/controller/zrokEdgeSdk.DeleteServicePolicy: deleted service policy '1mabRt9jefSe52CJh6FmhB' for environment 'd.wJYlpt9' +[1141.931] INFO zrok/controller/zrokEdgeSdk.DeleteConfig: deleted config '2gid15nP0GIUVuaFQ15GWV' for 'd.wJYlpt9' +[1141.932] INFO zrok/controller/zrokEdgeSdk.DeleteService: deleted service '6FzYnK0RFJmT0rDSP1bzVE' for environment 'd.wJYlpt9' +[1142.053] INFO zrok/controller/zrokEdgeSdk.DeleteServiceEdgeRouterPolicy: deleted service edge router policy '2nMZaiChQAPpFnblNn1ljP' for environment 'd.wJYlpt9' +[1142.056] INFO zrok/controller/zrokEdgeSdk.DeleteServicePolicy: deleted service policy '1Q2DMHZ9AFsBA8D2SNzC4l' for environment 'd.wJYlpt9' +[1142.058] INFO zrok/controller/zrokEdgeSdk.DeleteServicePolicy: deleted service policy '6RwWEoIsb8gBVKJfZP3ur3' for environment 'd.wJYlpt9' +[1142.064] INFO zrok/controller/zrokEdgeSdk.DeleteConfig: deleted config '1FnBhnGNXDe58dwTpbFc1x' for 'd.wJYlpt9' +[1142.066] INFO zrok/controller/zrokEdgeSdk.DeleteService: deleted service '7jyiTZ0z2ediD5hZbxu7KH' for environment 'd.wJYlpt9' +[1142.320] INFO zrok/controller/zrokEdgeSdk.DeleteServiceEdgeRouterPolicy: deleted service edge router policy '2AqCUMqNtarmglOfhvnkI' for environment 'd.wJYlpt9' +[1142.324] INFO zrok/controller/zrokEdgeSdk.DeleteServicePolicy: deleted service policy 'E30643mY9M6vU6bQSQHa9' for environment 'd.wJYlpt9' +[1142.326] INFO zrok/controller/zrokEdgeSdk.DeleteServicePolicy: deleted service policy '4V8FsgCt63ySkG2pFWG5fz' for environment 'd.wJYlpt9' +[1142.329] INFO zrok/controller/zrokEdgeSdk.DeleteConfig: deleted config '19cyxfHo32R6fhVsYHZ84g' for 'd.wJYlpt9' +[1142.330] INFO zrok/controller/zrokEdgeSdk.DeleteService: deleted service '3WHJGqUdxkDtPYLgEL5V3q' for environment 'd.wJYlpt9' +[1142.701] INFO zrok/controller/zrokEdgeSdk.DeleteServiceEdgeRouterPolicy: deleted service edge router policy '2CGCz8dcquNvZC0ZUwDZ5F' for environment 'd.wJYlpt9' +[1142.704] INFO zrok/controller/zrokEdgeSdk.DeleteServicePolicy: deleted service policy '2ubWYvKo2EOnrn1U4MQ4Cu' for environment 'd.wJYlpt9' +[1142.708] INFO zrok/controller/zrokEdgeSdk.DeleteServicePolicy: deleted service policy '6oohOQFEo75yl9vnIbyzdj' for environment 'd.wJYlpt9' +[1142.709] INFO zrok/controller/zrokEdgeSdk.DeleteConfig: deleted config '4AN4sOtdQv99uHmFn3erx4' for 'd.wJYlpt9' +[1142.710] INFO zrok/controller/zrokEdgeSdk.DeleteService: deleted service 'KtK5E46HR93YIBrrwUlIN' for environment 'd.wJYlpt9' +``` \ No newline at end of file diff --git a/website/versioned_docs/version-0.4/concepts/_backend_http.mdx b/website/versioned_docs/version-0.4/concepts/_backend_http.mdx new file mode 100644 index 00000000..1b06e694 --- /dev/null +++ b/website/versioned_docs/version-0.4/concepts/_backend_http.mdx @@ -0,0 +1,5 @@ + +- `proxy` mode forwards requests received by the frontend to the target server ([more](/concepts/http.md)) +- `web` mode serves a target folder as a file index web page ([more](/concepts/files.md)) +- `drive` mode serves a target folder with WebDAV ([guide](/guides/drives.mdx)) +- `caddy` mode runs the built-in Caddy server with the targeted Caddyfile ([example](pathname:///simple_reverse_proxy.Caddyfile)) diff --git a/website/versioned_docs/version-0.4/concepts/_category_.json b/website/versioned_docs/version-0.4/concepts/_category_.json new file mode 100644 index 00000000..430f3573 --- /dev/null +++ b/website/versioned_docs/version-0.4/concepts/_category_.json @@ -0,0 +1,8 @@ +{ + "label": "Concepts", + "position": 30, + "link": { + "type": "doc", + "id": "concepts/index" + } +} diff --git a/website/versioned_docs/version-0.4/concepts/files.md b/website/versioned_docs/version-0.4/concepts/files.md new file mode 100644 index 00000000..9b436618 --- /dev/null +++ b/website/versioned_docs/version-0.4/concepts/files.md @@ -0,0 +1,52 @@ +--- +title: Sharing Websites and Files +sidebar_position: 30 +--- + +With `zrok` it is possible to share files quickly and easily as well. To share files using `zrok` use +the `--backend-mode web`, for example: `zrok share private . --backend-mode web`. + +Running with this mode will make it trivially easy to share files from the directory which the command +was run from. + +For example if you have a directory with a structure like this: + +```shell +-rw-r--r--+ 1 Michael None 7090 Apr 17 12:53 CHANGELOG.md +-rw-r--r--+ 1 Michael None 11346 Apr 17 12:53 LICENSE +-rw-r--r--+ 1 Michael None 2885 Apr 17 12:53 README.md +-rwxr-xr-x+ 1 Michael None 44250624 Apr 17 13:00 zrok.exe* +``` + +The files can be shared using a command such as: + +```shell +zrok share public --backend-mode web . +``` + +Then the files can be access with a `private` or `public` share, for example as shown: + +![zrok_share_web_files](../images/zrok_share_web_files.png) + +`zrok` will automatically provide a stock website, which will allow the accessing user to browse and navigate the file tree. Clicking the files allows the user to download them. + +`zrok` can also share a pre-rendered static HTML website. If you have a directory like this: + +```shell +-rw-rw-r--+ 1 Michael None 56 Jun 26 13:23 index.html +``` + +If `index.html` contains valid HTML, like this: + +```html + + +

Hello zrok

+ +``` + +Sharing the directory will result in the following when you access the share in a web browser: + +![zrok_share_web_website](../images/zrok_share_web_website.png) + +`zrok` contains a built-in web server, which you can use to serve static websites as a share. \ No newline at end of file diff --git a/website/versioned_docs/version-0.4/concepts/hosting.md b/website/versioned_docs/version-0.4/concepts/hosting.md new file mode 100644 index 00000000..8d975ff1 --- /dev/null +++ b/website/versioned_docs/version-0.4/concepts/hosting.md @@ -0,0 +1,16 @@ +--- +sidebar_position: 200 +--- + +# Hosting + +## Self-Hosted + +`zrok` is not limited to a managed offering. You can [host your own](/guides/self-hosting/linux/index.mdx) instance of `zrok` as well. `zrok` is +also freely available as open source software hosted by GitHub under a very permissive Apache v2 license. + +## Managed Service + +`zrok` is also offered as a cloud service, making it instantly accessible to a large population immediately. +NetFoundry provides a manged version of `zrok` at https://zrok.io. This provides the easy-to-use, +quick to demonstrate features of `zrok` without needing to deploy and host `zrok` yourself. diff --git a/website/versioned_docs/version-0.4/concepts/http.md b/website/versioned_docs/version-0.4/concepts/http.md new file mode 100644 index 00000000..19c9945e --- /dev/null +++ b/website/versioned_docs/version-0.4/concepts/http.md @@ -0,0 +1,32 @@ +--- +sidebar_position: 22 +--- + +# Sharing HTTP Servers + +`zrok` can share HTTP and HTTPS resources natively. If you have an existing web server that you want to share with other users, you can use the `zrok share` command using the `--backend-mode proxy` flag. + +The `--backend-mode proxy` is the default backend mode, so if you do not specify a `--backend-mode` you will get the `proxy` mode by default. + +If you have a web server running on `localhost` that you want to expose to other users using `zrok`, you can execute a command like the following: + +``` +$ zrok share public localhost:8080 +``` +When you execute this command, you'll get a `zrok` bridge like the following: + +``` +╭───────────────────────────────────────────────────────────────╮╭────────────────╮ +│ http://cht7gj4g5pjf.share.zrok.io ││[PUBLIC] [PROXY]│ +╰───────────────────────────────────────────────────────────────╯╰────────────────╯ +╭─────────────────────────────────────────────────────────────────────────────────╮ +│ │ +│ │ +│ │ +│ │ +╰─────────────────────────────────────────────────────────────────────────────────╯ +``` + +The URL shown at the top of the bridge shows the address where you can access your `public` share. + +Hit `CTRL-C` or `q` in the bridge to exit it and delete the `public` share. diff --git a/website/versioned_docs/version-0.4/concepts/index.md b/website/versioned_docs/version-0.4/concepts/index.md new file mode 100644 index 00000000..eb92da7c --- /dev/null +++ b/website/versioned_docs/version-0.4/concepts/index.md @@ -0,0 +1,13 @@ +--- +sidebar_title: Core Features +sidebar_position: 25 +--- + +# Concepts + +`zrok` was designed to make sharing local resources both secure and easy. In this section of the `zrok` documentation, we'll tour through all of the most important features. + +Sharing with `zrok` can be either [`public`](./sharing-public.mdx) or [`private`](./sharing-private.mdx). +Naturally, regular web-based resources can be shared but `zrok` also includes support for sharing raw [TCP](./tunnels.md) and [UDP](./tunnels.md) network connections, and also includes a [website and file sharing](./files.md) feature. + +Learn about `zrok` [hosting here](./hosting.md), including instructions on how to [install your own `zrok` instance](/guides/self-hosting/linux/index.mdx). diff --git a/website/versioned_docs/version-0.4/concepts/opensource.md b/website/versioned_docs/version-0.4/concepts/opensource.md new file mode 100644 index 00000000..b313af23 --- /dev/null +++ b/website/versioned_docs/version-0.4/concepts/opensource.md @@ -0,0 +1,24 @@ +--- +sidebar_position: 100 +--- + +# Open Source + +It's important to the `zrok` project that it remain free and open source software. The code is available on [GitHub](https://github.com/openziti/zrok) +for the world to use, inspect, and build upon! + +Check out the repository over on GitHub at [https://github.com/openziti/zrok](https://github.com/openziti/zrok). If you find `zrok` to be useful, and +you want to help spread the word of `zrok` give the project a star. It really does help get the word out about the +project. + +The project also uses a very permissive license: Apache v2. We encourage people to fork the repo and use `zrok` for your own purposes how you see fit or contribute back to the project. + +## Built on OpenZiti + +The power of `zrok` really lies in `private` sharing. It's increasingly clear that security needs to be a first-class +member of any organization. To enable `private` sharing, `zrok` was built on top of another excellent open source project named OpenZiti. + +OpenZiti is a secure overlay network focusing on bringing zero trust to applications. It is the __backbone__ of `zrok`. +In fact, `zrok` proudly proclaims itself as an Ziti _native_ application. + +If you are interested in learning more about OpenZiti head over to [the docs](https://docs.openziti.io/docs/learn/introduction/), try the quickstart, and don't forget to star that project too. We couldn't build `zrok` without OpenZiti! diff --git a/website/versioned_docs/version-0.4/concepts/sharing-private.mdx b/website/versioned_docs/version-0.4/concepts/sharing-private.mdx new file mode 100644 index 00000000..4a23ed5e --- /dev/null +++ b/website/versioned_docs/version-0.4/concepts/sharing-private.mdx @@ -0,0 +1,45 @@ +--- +sidebar_position: 0 +--- + +import BackendHttp from '/../docs/concepts/_backend_http.mdx' + +# Private Shares + +`zrok` was built to share and access digital resources. A `private` share allows a resource to be +accessed on another user's system as if it were local to them. Privately shared resources can only be accessed by another `zrok` user who has the details of your unique share. You are in control of who can access your `private` shares by sharing the share token. + +Peer-to-peer private resource sharing is one of the things that makes `zrok` unique. + +`zrok` also provides `public` sharing of resources with non-`zrok` users. Public resource sharing is limited to only resources that can be accessed over `HTTP` or `HTTPS`. `private` sharing works with all of the resources types that `zrok` supports. + +Here's how private sharing works: + +## Peer to Peer + +![zrok_public_share](../images/zrok_private_share.png) + +`private` shares are accessed using the `zrok access` command, and require the accessing user to have a `zrok enable`-d account on the same service instance where the share was created. + +The `private` share is identified by a _share token_. The accessing user will use the share token, along with the `zrok access` command to create a local endpoint on their system, which lets them use the shared resource as if it were local to their system. + +`zrok` does not require you to open any firewall ports or otherwise compromise the security of your local system; there is never an attack surface open to the public internet. As soon as you terminate the `zrok share` process, you immediately terminate any possible access to your shared resource. + +The shared resource can be a development web server to share with friends and colleagues, a webhook from a server running in the cloud which has `zrok` running and has been instructed to `access` the private resource. `zrok` can also share files, websites, and low-level TCP and UDP network connections using the `tunnel` backend. What matters is that the access to the shared resource is not done in a public way, and can only be accessed by other `zrok` users that have access to your share token. + +The peer-to-peer capabilities of `zrok` are an important property of the underlying [OpenZiti](https://docs.openziti.io/docs/learn/introduction/) network that `zrok` uses to provide connectivity between users and resources. + +Creating `private` shares is easy and is accomplished using the `zrok share private` command. Run `zrok share private` to see the usage output and to further learn how to use the command. + +## Private Backend Modes + +The default backend mode is `proxy` which targets an HTTP URL that must be reachable by the backend. + +```bash title="proxy example" +zrok share private 80 +``` + + +- `tcpTunnel`, `udpTunnel` modes forward the data payload to the target server ([more](/concepts/tunnels.md)) +- `socks` mode provides a SOCKS5 dynamic proxy on the private access bind port that tunnels TCP payloads to the share backend where they are forwarded to their destinations ([blog](https://blog.openziti.io/the-zrok-socks-backend)) +- `vpn` mode provides a network layer tunnel between the private access and the share backend ([guide](guides/vpn/vpn.md)) diff --git a/website/versioned_docs/version-0.4/concepts/sharing-public.mdx b/website/versioned_docs/version-0.4/concepts/sharing-public.mdx new file mode 100644 index 00000000..0e6f1e26 --- /dev/null +++ b/website/versioned_docs/version-0.4/concepts/sharing-public.mdx @@ -0,0 +1,29 @@ +--- +sidebar_position: 10 +--- + +import BackendHttp from '/../docs/concepts/_backend_http.mdx' + +# Public Shares + +`zrok` supports `public` sharing for web-based (HTTP and HTTPS) resources. These resources are easily shared with the general internet through public access points. + +## Peer to Public + +![zrok_public_share](../images/zrok_public_share.png) + +`public` sharing is most useful when the person or service accessing your resources does not have `zrok` running locally and cannot make use of the `private` sharing mode built into `zrok`. Many users share development web servers, webhooks, and other HTTP/HTTPS resources. + +As with `private` sharing, `public` sharing does not require you to open any firewall ports or otherwise compromise the security of your local environments. A `public` share goes away as soon as you terminate the `zrok share` command. + +Using `public` shares is easy and is accomplished using the `zrok share public` command. Run `zrok share public` to see the command-line help and to learn how to use `public` shares. + +## Public Backend Modes + +The default backend mode is `proxy` which targets an HTTP URL that must be reachable by the backend. + +```bash title="proxy example" +zrok share public 80 +``` + + diff --git a/website/versioned_docs/version-0.4/concepts/sharing-reserved.md b/website/versioned_docs/version-0.4/concepts/sharing-reserved.md new file mode 100644 index 00000000..a705d3fd --- /dev/null +++ b/website/versioned_docs/version-0.4/concepts/sharing-reserved.md @@ -0,0 +1,31 @@ +--- +sidebar_position: 10 +--- + +# Reserved Shares + +By default, a `public` or `private` share is assigned a _share token_ when you create a share using the `zrok share` command. The `zrok share` command is the bridge between your local environment and the users you are sharing with. When you terminate the `zrok share`, the bridge is eliminated and the _share token_ is deleted. If you run `zrok share` again, you will be allocated a brand new _share token_. + +You can use a `reserved` share to persist your _share token_ across multiple runs of the `zrok share` bridge. When you use a `reserved` share, the share token will not be deleted between multiple runs of `zrok share`. + +To use a `reserved` share, you will first run the `zrok reserve` command to create the reserved share (see `zrok reserve --help` for details). Once you've created your `reserved` share, you will use the `zrok share reserved` command (see `--help` for details) to run the bridge for the shared resource. + +This pattern works for both `public` and `private` shares, and for all resource types supported by `zrok`. + +To delete your `reserved` share use the `zrok release` command or click the delete button in the share's _Actions_ tab in the web console. + +## Unique Names + +The default is to generate a random _share token_ and you may specify a _unique name_. + +This reserves public share token "myshare." + +```bash title="Reserve with the Command Line" +zrok reserve public 80 --unique-name "myshare" +``` + +This shares `127.0.0.1:80` as `https://myshare.zrok.example.com` where `https://{token}.zrok.example.com` is the frontend's template. + +```bash title="Share a Reserved Token" +zrok share reserved "myshare" +``` diff --git a/website/versioned_docs/version-0.4/concepts/tunnels.md b/website/versioned_docs/version-0.4/concepts/tunnels.md new file mode 100644 index 00000000..ac2bbc36 --- /dev/null +++ b/website/versioned_docs/version-0.4/concepts/tunnels.md @@ -0,0 +1,85 @@ +--- +sidebar_position: 25 +--- + +# Sharing TCP and UDP Servers + +`zrok` includes support for sharing low-level TCP and UDP network resources using the `tcpTunnel` and `udpTunnel` backend modes. + +As of version `v0.4`, `zrok` supports sharing TCP and UDP network resources using `private` sharing. + +To share a raw network resource using `zrok`, you'll want to use the `zrok share private` command from your `enable`-d environment, like this: + +``` +$ zrok share private --backend-mode tcpTunnel 192.168.9.1:22 +``` + +This will result in a share client starting, which looks like this: + +``` +╭───────────────────────────────────────────────────────────╮╭────────────────────╮ +│ access your share with: zrok access private 5adagwfl888k ││[PRIVATE][TCPTUNNEL]│ +╰───────────────────────────────────────────────────────────╯╰────────────────────╯ +╭─────────────────────────────────────────────────────────────────────────────────╮ +│ │ +│ │ +│ │ +│ │ +╰─────────────────────────────────────────────────────────────────────────────────╯ +``` + +Then on the system where you want to access your shared resource (an SSH endpoint in this case), you'll need an `enable`-d `zrok` environment. Run the following command (shown in the banner at the top of the `zrok share` client above): + +``` +$ zrok access private 5adagwfl888k +``` + +This will start an `access` client on this system: +``` +╭─────────────────────────────────────────────────────────────────────────────────╮ +│ tcp://127.0.0.1:9191 -> 5adagwfl888k │ +╰─────────────────────────────────────────────────────────────────────────────────╯ +╭─────────────────────────────────────────────────────────────────────────────────╮ +│ │ +│ │ +│ │ +│ │ +╰─────────────────────────────────────────────────────────────────────────────────╯ +``` + +The `access` client shows the endpoint at the top where the service can be accessed. In this case, you'll want to connect your SSH client to `127.0.0.1:9191`. We'll just use `nc` (netcat) to access the shared TCP port: +``` +$ nc 127.0.0.1 9191 +SSH-2.0-OpenSSH_9.2 FreeBSD-openssh-portable-9.2.p1,1 +``` + +And both the `share` client and the `access` client show the traffic: + +``` +╭──────────────────────────────────────────────────────────╮╭─────────────────────╮ +│ access your share with: zrok access private 5adagwfl888k ││[PRIVATE] [TCPTUNNEL]│ +╰──────────────────────────────────────────────────────────╯╰─────────────────────╯ +╭─────────────────────────────────────────────────────────────────────────────────╮ +│Friday, 23-Jun-23 15:33:10 EDT ziti-edge-router │ +│connId=2147483648, logical=ziti- │ +│sdk[router=tls:ziti-lx:3022] -> ACCEPT 192.168.9.1:22 │ +│ │ +│ │ +╰─────────────────────────────────────────────────────────────────────────────────╯ +``` + +``` +╭─────────────────────────────────────────────────────────────────────────────────╮ +│ tcp://127.0.0.1:9191 -> 5adagwfl888k │ +╰─────────────────────────────────────────────────────────────────────────────────╯ +╭─────────────────────────────────────────────────────────────────────────────────╮ +│Friday, 23-Jun-23 15:33:10 EDT 127.0.0.1:42312 -> ACCEPT 5adagwfl888k │ +│ │ +│ │ +│ │ +╰─────────────────────────────────────────────────────────────────────────────────╯ +``` + +Exit the `access` client to remove the local access to the shared TCP port. Exit the `share` client to disable further accesses to the shared resource. + +For UDP network resources just use the `zrok share private --backend-mode udpTunnel` instead of `tcpTunnel`. diff --git a/website/versioned_docs/version-0.4/getting-started.mdx b/website/versioned_docs/version-0.4/getting-started.mdx new file mode 100644 index 00000000..6632c532 --- /dev/null +++ b/website/versioned_docs/version-0.4/getting-started.mdx @@ -0,0 +1,396 @@ +--- +title: Getting Started +sidebar_label: Getting Started +sidebar_position: 10 +--- + +import { AssetsProvider } from '@site/src/components/assets-context'; +import DownloadCard from '@site/src/components/download-card'; +import DownloadCardStyles from '@site/src/css/download-card.module.css'; + +## Your Secure Internet Sharing Perimeter + +`zrok` (*/ziːɹɒk/ ZEE-rock*) is a secure, open-source, self-hostable sharing platform that simplifies shielding and sharing network services or files. +There's a hardened zrok-as-a-service offering available at [myzrok.io](https://myzrok.io) with a generous free tier. + +### Your First Share + +1. Get an account token + + + + +

Hosted zrok

+
+ + Use NetFoundry's public zrok instance. + + + + + + +
+
+ + + +

Self-Hosted zrok

+
+ + Run a zrok instance on Linux, Docker, or Kubernetes. + + + + + + +
+
+
+ +2. [Download the zrok binary](#installing-the-zrok-command) +3. Enable zrok for your [user environment](#enabling-your-zrok-environment) + + ```bash + zrok enable + ``` + +4. Share `http://localhost:8080` + + ```bash + zrok share public 8080 + ``` + +5. Visit the public URL displayed in your terminal + + ![zrok share public](images/zrok_share_public.png) + +## Share Backend Modes + +zrok shares can be public or private, with different options for backend modes, including: + +* [Public shares](./concepts/sharing-public.mdx) for [web services](./concepts/http.md) or [files](./concepts/files.md) +* [Private shares for web services or files](./concepts/sharing-private.mdx) +* [TCP Tunnels](./concepts/tunnels.md) +* [UDP Tunnels](./concepts/tunnels.md) +* [File Drives](./guides/drives.mdx) +* [VPN](./guides/vpn/vpn.md) + + +## Open Source + +`zrok` is licensed under Apache 2.0. + +Check [the roadmap](https://github.com/orgs/openziti/projects/16) if you're thinking about the future. We would love to hear your ideas for `zrok`! + +The best ways to engage are [Discourse](https://openziti.discourse.group/) for questions and [GitHub Issues](https://github.com/openziti/zrok/issues) for documenting problems. + +[Read more about zrok open source](/concepts/opensource.md). + +### Ziti native + +`zrok` is a _Ziti Native Application_, built on the [OpenZiti](https://openziti.io) platform, and supported by the OpenZiti community and NetFoundry team. + +## What's it for? + +Use `zrok` to share a running service, like a web server or a network socket, or to share a directory of static files. + +If [sharing publicly](./concepts/sharing-public.mdx), you can reserve a subdomain, enable authentication options, or both. Public shares proxy HTTPS to your service or files. + +If [sharing privately](./concepts/sharing-private.mdx), only users with the share token can access your share. In addition to what you can share publicly, private shares can include TCP and UDP services. + +## Installing the zrok Command + + +
+ + + +
+
+ +## Enabling Your zrok Environment + +After you have [an account](#your-first-share), you can enable your `zrok` environment. + +A zrok environment usually refers to an enabled device where shares and accesses can be created, .e.g., `~/.zrok` on a Unix machine. It can be a specific user's environment or a system-wide agent's environment owned by the administrator. + +When your `zrok` account was created, the service generated a _secret token_ that identifies and authenticates in a single step. Protect your secret token as if it were a password, or an important account number; it's a _secret_, protect it. + +When we left off you had downloaded, extracted, and configured your `zrok` environment. In order to use that environment with your account, you'll need to `enable` it. Enabling an environment generates a secure identity and the necessary underlying security policies with the OpenZiti network hosting the `zrok` service. + +From the web console, click on your email address in the upper right corner of the header. That drop down menu contains an `Enable Your Environment` link. Click that link and a modal dialog will be shown like this: + +![Enable Modal Dialog](images/zrok_enable_modal.png) + +This dialog box shows you the `zrok enable` command that you can use to enable any shell to work with your `zrok` account with a single command. + +Let's copy that command and paste it into your shell: + +```buttonless title="Example" +$ zrok enable klFEoIi0QAg7 +⣻ contacting the zrok service... +``` + +After a few seconds, the message will change and indicate that the enable operation succeeded: + +```buttonless title="Example" +$ zrok enable klFEoIi0QAg7 +⣻ the zrok environment was successfully enabled... +``` + +Now, if we run a `zrok status` command, you will see the details of your environment: + +```txt +zrok status +``` + +```buttonless title="Output" +Config: + + CONFIG VALUE SOURCE + apiEndpoint https://api.staging.zrok.io env + +Environment: + + PROPERTY VALUE + Secret Token <> + Ziti Identity <> +``` + +Excellent... our environment is now fully enabled. + +If we return to the _web console_, we'll now see the new environment reflected in the explorer view: + +![New Environment in Web UI](images/zrok_web_ui_new_environment.png) + +In my case, the environment is named `michael@ziti-lx`, which is the username of my shell and the hostname of the system the shell is running on. + +:::note +Should you want to use a non-default name for your environment, you can pass the `-d` option to the `zrok enable` command. See `zrok enable --help` for details. +::: + +If you click on the environment node in the explorer in the _web console_, the details panel shown at the bottom of the page will change: + +![Empty Environment](images/zrok_web_ui_empty_shares.png) + +The explorer supports clicking, dragging, mouse wheel zooming, and selecting the nodes in the graph for more information (and available actions) for the selected node. If you ever get lost in the explorer, click the ![Zoom to Fit](images/zrok_zoom_to_fit.png) _zoom to fit_ icon in the lower right corner of the explorer. + +If we click on the `Detail` tab for our environment, we'll see something like: + +![Environment Detail](images/zrok_web_ui_empty_environment_detail.png) + +:::note +With your `zrok` account you can `zrok enable` multiple environments. This will allow you to run `zrok share` in one environment, and `zrok access` in other environments. +::: + +Your environment is fully ready to go. Now we can move on to the fun stuff... + +## Sharing + +`zrok` is designed to make sharing resources as effortless as possible, while providing a high degree of security and control. + +### Ephemeral by Default + +Shared resources are _ephemeral_ by default; as soon as you terminate the `zrok share` command, the entire share is removed and is no longer available to any users. Identifiers for shared resources are randomly allocated when the share is created. + +### Public Shares and Frontends + +Resources that are shared _publicly_ are exposed to any users on the internet who have access to the `zrok` instance's "frontend". + +A frontend is an HTTPS listener exposed to the internet, that lets any user with your ephemeral share token access your publicly shared resources. + +For example, I might create a public share using the `zrok share public` command, which results in my `zrok` instance exposing a URL like `https://2ptgbr8tlfvk.share.zrok.io` to access my resources. + +In this case, my share was given the "share token" of `2ptgbr8tlfvk`. That URL can be given to any user, allowing them to immediately access the shared resources directly from my local environment, all without exposing any access to my private, secure environment. The physical network location of my environment is not exposed to anonymous consumers of my resources. + +:::note +Here is the `--help` output from `zrok share public`: + +```text +zrok share public +``` + +```buttonless title="Output" +Error: accepts 1 arg(s), received 0 +Usage: + zrok share public [flags] + +Flags: + --backend-mode string The backend mode {proxy, web, caddy, drive} (default "proxy") + --basic-auth stringArray Basic authentication users (,...) + --frontends stringArray Selected frontends to use for the share (default [public]) + --headless Disable TUI and run headless + -h, --help help for public + --insecure Enable insecure TLS certificate validation for + +Global Flags: + -p, --panic Panic instead of showing pretty errors + -v, --verbose Enable verbose logging + +[ERROR]: an error occurred (accepts 1 arg(s), received 0) +``` + +`` defines the path to the local resource that you intend to share. The form of `` depends on the `--backend-mode` that you're using. + +In the case of `--backend-mode proxy`, `` should be a URL to an HTTP endpoint. + +In the case of `--backend-mode web`, `` is the path to a file on disk that serves as the "root" of the file tree to be shared. +::: + +If we return to the web console, we see our share in the explorer: + +![Web Console Share](images/zrok_web_console_explorer_share.png) + +If we click on our new share in the explorer, we can see the share details: +![Share Details](images/zrok_web_console_share_detail.png) + +If we click on the _frontend endpoint_ a new browser tab opens and we see the content of our share: +![Share Frontend](images/zrok_web_console_share_frontend.png) + +If we click on the environment in the explorer, we're shown all of the shares for that environment (including our new share), along with a spark line that shows the activity: + +![Environment Spark Line](images/zrok_web_console_environment_spark.png) + +And as soon as I terminate the `zrok share` client, the resources are removed from the `zrok` environment. + +If we try to reload the frontend endpoint in our web browser, we'll see: + +![Not Found](images/zrok_not_found.png) + +[More about public shares](/concepts/sharing-public.mdx) + +### Private Shares + +`zrok` also provides a powerful _private_ sharing model. If I execute the following command: + +```buttonless title="Example" +$ zrok share private http://localhost:8080 +``` + +The `zrok` service will respond with the following: + +```buttonless title="Output" +access your share with: zrok access private wvszln4dyz9q +``` + +Rather than allowing access to your service through a public frontend, a _private_ share is only exposed to the underlying OpenZiti network, and can only be accessed using the `zrok access` command. + +The `zrok access private wvszln4dyz9q` command can be run by any `zrok` user, allowing them to create and bind a local HTTP listener, that allows for private access to your shared resources. + +[More about private shares](/concepts/sharing-private.mdx) + +### Proxy Backend Mode + +Without specifying a _backend mode_, the `zrok share` command will assume that you're trying to share a `proxy` resource. A `proxy` resource is usually some private HTTP/HTTPS endpoint (like a development server, or a private application) running in your local environment. Usually such an endpoint would have no inbound connectivity except for however it is reachable from your local environment. It might be running on `localhost`, or only listening on a private LAN segment behind a firewall. + +For these services a `proxy` share will allow those endpoints to be reached, either _publicly_ or _privately_ through the `zrok` service. + +### Web Backend Mode + +The `zrok share` command accepts a `--backend-mode` option. Besides `proxy`, the current `v0.3` release (as of this writing) also supports a `web` mode. The `web` mode allows you to specify a local folder on your filesystem, and instantly turns your `zrok` client into a web server, exposing your web content either _publicly_ or _privately_ without having to a configure a web server. + +### Reserved Shares + +`zrok` shares are _ephemeral_ unless you specifically create a "reserved" share. + +A reserved share can be re-used multiple times; it will survive termination of the `zrok share` command, allowing for longer-lasting semi-permanent access to shared resources. + +The first step is to create the reserved share: + +```txt title="Example" +$ zrok reserve public --backend-mode web v0.3_getting_started +[ 0.275] INFO main.(*reserveCommand).run: your reserved share token is 'mltwsinym1s2' +[ 0.275] INFO main.(*reserveCommand).run: reserved frontend endpoint: https://mltwsinym1s2.share.zrok.io +``` + +I'm asking the `zrok` service to reserve a share with a `web` backend mode, pointing at my local `docs` folder. + +You'll want to remember the share token (`mltwsinym1s2` in this case), and the frontend endpoint URL. If this were a _private_ reserved share, there would not be a frontend URL. + +If we do nothing else, and then point a web browser at the frontend endpoint, we get: + +![Not Found](images/zrok_reserved_not_found.png) + +This is the `404` error message returned by the `zrok` frontend. We're getting this because we haven't yet started up a `zrok share` for the service. Let's do that: + +This command: + +```txt title="Example" +$ zrok share reserved mltwsinym1s2 +``` + +...results in a new share backend starting up and connecting to the existing reserved share: + +![zrok share reserved](images/zrok_share_reserved.png) + +And now if we refresh the frontend endpoint URL in the web browser, we'll see an index of the `docs` directory: + +![zrok docs share](images/zrok_web_console_share_frontend.png) + +With the reserved share, we're free to stop and restart the `zrok share reserved` command as many times as we want, without losing the token for our share. + +When we're done with the reserved share, we can _release_ it using this command: + +```txt title="Example" +$ zrok release mltwsinym1s2 +[ 0.230] INFO main.(*releaseCommand).run: reserved share 'mltwsinym1s2' released +``` + +[More about reserved shares](/concepts/sharing-reserved.md) + +## Concepts Review + +In summary, `zrok` lets you easily and securely share resources with both general internet users (through _public_ sharing) and also with other `zrok` users (through _private_ sharing). + +Here's a quick review of the `zrok` mental model and the vocabulary. + +### Instance and Account + +You create an _account_ with a `zrok` _instance_. Your account is identified by a username and a password, which you use to log into the _web console_. Your account also has a _secret token_, which you will use to authenticate from the `zrok` command-line to interact with the _instance_. + +You create a new _account_ with NetFoundry's `zrok` _instance_ by subscribing in [myzrok.io](https://myzrok.io) or in a self-hosted `zrok` _instance_ by running [the `zrok invite` command](/guides/self-hosting/self-service-invite.mdx) or the `zrok admin create account` command. + +### Environment + +Using your _secret token_ you use the `zrok` command-line interface to create an _environment_. An _environment_ corresponds to a single command-line user on a specific _host system_. + +You create a new _environment_ by using the `zrok enable` command. + +### Shares + +Once you've enabled an _environment_, you then create one or more _shares_. Shares have either a _public_ or _private_ _sharing mode_. _Shares_ share a specific type of resource using a _backend mode_. As of this writing `zrok` supports a `proxy` _backend mode_ to share local HTTP resources as a _reverse proxy_. `zrok` also supports a `web` _backend mode_ to share local file and HTML resources by enabling a basic HTTP server. + +Every _share_ is identified by a _share token_. _Public shares_ can be accessed through either a _frontend_ instance offered through the `zrok` _instance_, or through the `zrok access` command. _Private shares_ can only be accessed through the `zrok access` command. + +You use the `zrok share` command to create and enable _ephemeral shares_. + +### Reserved Shares + +`zrok` supports creating _shares_ that have a consistent _share token_ that survives restarts of the `zrok share` command. These are considered _non-ephemeral_, and is callled a _reserved share_. + +You use the `zrok reserve` command to create _reserved shares_. Reserved shares last until you use the `zrok release` command to delete them. + +## Self-Hosting an Instance + +Interested in self-hosting your own `zrok` instance? See the [self-hosting guides](/docs/category/self-hosting/)! + +## Resources + +- Learn about [OpenZiti](https://openziti.io/) diff --git a/website/versioned_docs/version-0.4/guides/_category_.json b/website/versioned_docs/version-0.4/guides/_category_.json new file mode 100644 index 00000000..06389212 --- /dev/null +++ b/website/versioned_docs/version-0.4/guides/_category_.json @@ -0,0 +1,7 @@ +{ + "label": "Guides", + "position": 50, + "link": { + "type": "generated-index" + } +} diff --git a/website/versioned_docs/version-0.4/guides/_frontdoor-linux.mdx b/website/versioned_docs/version-0.4/guides/_frontdoor-linux.mdx new file mode 100644 index 00000000..ac3b6fe7 --- /dev/null +++ b/website/versioned_docs/version-0.4/guides/_frontdoor-linux.mdx @@ -0,0 +1,166 @@ +import LinuxShareInstall from './_linux-share-install.mdx' +import AnsibleRepoSetup from './install/_ansible_repo_setup.yaml' +import ConcatenateYamlSnippets from '@site/src/components/cat-yaml.jsx' + +## Installation + + + +
+Ansible Playbook + + +{AnsibleRepoSetup} +{` +- name: Install zrok-share package + gather_facts: false + hosts: all + become: true + tasks: + - name: Install zrok-share + ansible.builtin.package: + name: zrok-share + state: present + + - name: Copy env config from Ansible controller to target + copy: + dest: /opt/openziti/etc/zrok/zrok-share.env + src: /opt/openziti/etc/zrok/zrok-share.env + + - name: Enable and restart service + systemd: + name: zrok-share + enabled: yes + state: restarted + daemon_reload: yes + + - name: Wait for service + systemd: + name: zrok-share + state: started + register: service_status + until: service_status.status.ActiveState == 'active' + retries: 30 + delay: 1 +`} + + +
+ +## Enable + +Save the enable token from the zrok console in the configuration file. + +```bash title="/opt/openziti/etc/zrok/zrok-share.env" +ZROK_ENABLE_TOKEN="14cbfca9772f" +``` + +## Name your Share + +This unique name becomes part of the domain name of the share, e.g. `https://my-prod-app.in.zrok.io`. A random name is generated if you don't specify one. + +```bash title="/opt/openziti/etc/zrok/zrok-share.env" +ZROK_UNIQUE_NAME="my-prod-app" +``` + +## Use Cases + +You may change the target for the current backend mode, e.g. `proxy`, by editing the configuration file and restarting the service. The reserved subdomain will remain the same. + +You may switch between backend modes or change authentication options by deleting `/var/lib/zrok-share/.zrok/reserved.json` and restarting the service. A new subdomain will be reserved. + +### Proxy a Web Server + +Proxy a reserved subdomain to an existing web server. The web server could be on a private network or on the same host as zrok. + +```bash title="/opt/openziti/etc/zrok/zrok-share.env" +ZROK_TARGET="http://127.0.0.1:3000" +ZROK_BACKEND_MODE="proxy" +``` + +If your HTTPS server has an unverifiable TLS server certificate then you must set `--insecure`. + +```bash title="/opt/openziti/etc/zrok/zrok-share.env" +ZROK_INSECURE="--insecure" +``` + +### Serve Static Files + +Run zrok's embedded web server to serve the files in a directory. If there's an `index.html` file in the directory then visitors will see that web page in their browser, otherwise they'll see a generated index of the files. The directory must be readable by 'other', e.g. `chmod -R o+rX /var/www/html`. + +```bash title="/opt/openziti/etc/zrok/zrok-share.env" +ZROK_TARGET="/var/www/html" +ZROK_BACKEND_MODE="web" +``` + +### Caddy Server + +Use zrok's built-in Caddy server to serve static files or as a reverse proxy to multiple web servers with various HTTP routes or as a load-balanced set. A sample Caddyfile is available in the path shown. + +```bash title="/opt/openziti/etc/zrok/zrok-share.env" +ZROK_TARGET="/opt/openziti/etc/zrok/multiple_upstream.Caddyfile" +ZROK_BACKEND_MODE="caddy" +``` + +### Network Drive + +This uses zrok's `drive` backend mode to serve a directory of static files as a virtual network drive. The directory must be readable by 'other', e.g. `chmod -R o+rX /usr/share/doc`. + +```bash title="/opt/openziti/etc/zrok/zrok-share.env" +ZROK_TARGET="/usr/share/doc" +ZROK_BACKEND_MODE="drive" +``` + +[Learn more about this feature in this blog post](https://blog.openziti.io/zrok-drives-an-early-preview). + +## Authentication + +You can limit access to certain email addresses with OAuth or require a password. + +### OAuth + +You can require that visitors authenticate with an email address that matches at least one of the suffixes you specify. Add the following to the configuration file. + +```bash title="/opt/openziti/etc/zrok/zrok-share.env" +ZROK_OAUTH_PROVIDER="github" # or google +ZROK_OAUTH_EMAILS="alice@example.com *@acme.example.com" +``` + +### Password + +Enable HTTP basic authentication by adding the following to the configuration file. + +```bash title="/opt/openziti/etc/zrok/zrok-share.env" +ZROK_BASIC_AUTH="user:passwd" +``` + +## Start the Service + +Start the service, and check the zrok console or the service log for the reserved subdomain. + +```bash title="run now and at startup" +sudo systemctl enable --now zrok-share.service +``` + +```bash title="run now" +sudo systemctl restart zrok-share.service +``` + +```bash +journalctl -u zrok-share.service +``` + +## Compatibility + +The Linux distribution must have a package manager that understands the `.deb` or `.rpm` format and be running systemd v232 or newer. The service was tested with: + +* Ubuntu 20.04, 22.04, 23.04 +* Debian 11 12 +* Rocky 8, 9 +* Fedora 37, 38 + +## Package Contents + +The files included in the `zrok-share` package are sourced [here in GitHub](https://github.com/openziti/zrok/tree/main/nfpm). diff --git a/website/versioned_docs/version-0.4/guides/_linux-share-install.mdx b/website/versioned_docs/version-0.4/guides/_linux-share-install.mdx new file mode 100644 index 00000000..acea45b2 --- /dev/null +++ b/website/versioned_docs/version-0.4/guides/_linux-share-install.mdx @@ -0,0 +1,17 @@ + +1. Set up `zrok`'s Linux package repository by following [the Linux install guide](/guides/install/linux.mdx#install-zrok-from-the-repository), or run this one-liner to complete the repo setup and install packages. + + ```bash + curl -sSLf https://get.openziti.io/install.bash \ + | sudo bash -s zrok-share + ``` + +1. If you set up the repository by following the guide, then also install the `zrok-share` package. This package provides the systemd service. + + ```bash title="Ubuntu, Debian" + sudo apt install zrok-share + ``` + + ```bash title="Fedora, Rocky" + sudo dnf install zrok-share + ``` diff --git a/website/versioned_docs/version-0.4/guides/docker-share/_category_.json b/website/versioned_docs/version-0.4/guides/docker-share/_category_.json new file mode 100644 index 00000000..710975a1 --- /dev/null +++ b/website/versioned_docs/version-0.4/guides/docker-share/_category_.json @@ -0,0 +1,8 @@ +{ + "label": "Docker Share", + "position": 40, + "link": { + "type": "doc", + "id": "guides/docker-share/index" + } +} diff --git a/website/versioned_docs/version-0.4/guides/docker-share/docker_private_share_guide.md b/website/versioned_docs/version-0.4/guides/docker-share/docker_private_share_guide.md new file mode 100644 index 00000000..160ef62a --- /dev/null +++ b/website/versioned_docs/version-0.4/guides/docker-share/docker_private_share_guide.md @@ -0,0 +1,143 @@ +--- +title: Docker Private Share +sidebar_position: 20 +sidebar_label: Private Share +--- + +## Goal + +Privately share a Docker Compose service with a separate zrok environment and a permanent zrok share token. + +## Overview + +With zrok, you can privately share a service that's running in Docker. You need a zrok private share running somewhere that it can reach the service you're sharing, and a zrok private access running somewhere else where you want to use the private share. Together, the private share and private access form a private point-to-point tunnel. + +Here's a short article with an overview of [private sharing with zrok](/concepts/sharing-private.mdx). + +## Walkthrough Video + + + +## How it Works + +The Docker Compose project uses your zrok account token to reserve a private share token and keep sharing the backend target. + +When the project runs it will: + +1. enable a zrok environment unless `/mnt/.zrok/environment.json` exists in the `zrok_env` volume +1. reserve a private share token for the service unless `/mnt/.zrok/reserved.json` exists +1. start sharing the target specified in the `ZROK_TARGET` environment variable + +## Before You Begin + +To follow this guide you will need [Docker](https://docs.docker.com/get-docker/). + +If you have installed Docker Desktop on macOS or Windows then you are all set. + +## Begin Sharing Privately with zrok in Docker + +First, let's create the private share. + +1. Make a folder on your computer to use as a Docker Compose project for your zrok private share. +1. In your terminal, change directory to your newly-created project folder. +1. Download [the zrok-private-share Docker Compose project file](pathname:///zrok-private-share/compose.yml) into your new project folder and make sure it's named `compose.yml`. +1. Copy your zrok environment token from the zrok web console to your clipboard and paste it in a file named `.env` in the same folder like this: + + ```bash + # file name ".env" + ZROK_ENABLE_TOKEN="8UL9-48rN0ua" + ``` + +1. If you are self-hosting zrok then it's important to set your API endpoint URL too. If you're using the hosted zrok service then you can skip this step. + + ```bash + # file name ".env" + ZROK_API_ENDPOINT="https://zrok.example.com" + ``` + +1. Run your Compose project to start sharing the built-in demo web server: + + ```bash + docker compose up + ``` + +1. Read the private share token from the output. One of the last lines is like this: + + ```bash + zrok-private-share-1 | zrok access private wr3hpf2z5fiy + ``` + + Keep track of this token so you can use it in your zrok private access project. + +## Access the Private Share + +Now that we have a private share we can access it with the zrok command or by running a separate Docker Compose project. + +1. Make a folder on your computer to use as a Docker Compose project for your zrok private access. +1. In your terminal, change directory to your newly-created project folder. +1. Download [the zrok-private-access Docker Compose project file](pathname:///zrok-private-access/compose.yml) into your new project folder and make sure it's named `compose.yml`. +1. Copy your zrok environment token from the zrok web console to your clipboard and paste it in a file named `.env` in the same folder like this: + + ```bash + # file name ".env" + ZROK_ENABLE_TOKEN="8UL9-48rN0ua" + ``` + +1. Now copy the zrok private access token from the zrok private share project's output to your clipboard and paste it in the same file named `.env` here in your private share project folder like this: + + ```bash + # file name ".env" + ZROK_ENABLE_TOKEN="8UL9-48rN0ua" + ZROK_ACCESS_TOKEN="wr3hpf2z5fiy" + ``` + +1. Run your Compose project to start accessing the private share: + + ```bash + docker compose up zrok-access + ``` + +1. Now your zrok private access proxy is ready on http://127.0.0.1:9191. You can visit the demo web server in your browser. + +## Closed Permission Mode + +Normally, you need only the share token to access a private share. You can further restrict access with "closed" permission mode. + +You must set the permission mode before you reserve the share. + +Only your own account can access the private share. + +```bash +ZROK_PERMISSION_MODE="closed" +``` + +Grant access to additional zrok accounts. + +```bash +ZROK_ACCESS_GRANTS="bob@example.com alice@example.org" +``` + +You can adjust the access grants by running the CLI inside the `zrok-share` container. + +```bash +docker compose exec zrok-share zrok modify ${ZROK_UNIQUE_NAME} --remove-access-grant bob@example.com +``` + +## Going Further with Private Access + +1. Try changing the demo web server used in the private share project. One alternative demo server is provided: `httpbin`. +1. Try accessing the private share from _inside_ a container running in the private access project. One demo client is provided: `demo-client`. You can run it like this. + + ```bash + docker compose up demo-client + ``` + +1. You'll see in the terminal output that the demo-client container is getting a response from the private share indicating the source IP of the request from the perspective of the demo server: `httpbin` that's running in the private share project. + +## Cleaning Up + +Run the "down" command in both Compose projects to destroy them when you're all done. This will stop the running containers and delete zrok environments' storage volumes. Then delete the selected zrok environment by clicking "Actions" in the web console. + +```bash +docker compose down --remove-orphans --volumes +``` diff --git a/website/versioned_docs/version-0.4/guides/docker-share/docker_public_share_guide.md b/website/versioned_docs/version-0.4/guides/docker-share/docker_public_share_guide.md new file mode 100644 index 00000000..e4c5af1d --- /dev/null +++ b/website/versioned_docs/version-0.4/guides/docker-share/docker_public_share_guide.md @@ -0,0 +1,153 @@ +--- +title: Docker Compose Public Share +sidebar_position: 10 +sidebar_label: Public Share +--- + +## Goal + +Publicly share a Docker Compose service with a separate zrok environment and a permanent zrok share URL. + +## Overview + +With zrok, you can publicly share a service that's running in Docker. You need a zrok public share running somewhere that it can reach the service you're sharing. As long as that public share is running and your service is available, anyone with the address can use your service. + +Here's a short article with an overview of [public sharing with zrok](/concepts/sharing-public.mdx). + +## Walkthrough Video + + + +## How it Works + +The Docker Compose project uses your zrok account token to reserve a public subdomain and keep sharing the backend +target. + +When the project runs it will: + +1. enable a zrok environment unless `/mnt/.zrok/environment.json` exists in the `zrok_env` volume +1. reserve a public subdomain for the service unless `/mnt/.zrok/reserved.json` exists +1. start sharing the target specified in the `ZROK_TARGET` environment variable + +## Create the Docker Project + +1. Make a folder on your computer to use as a Docker Compose project for your zrok public share with a reserved subdomain and switch to the new directory in your terminal. +1. Download [the reserved public share `compose.yml` project file](pathname:///zrok-public-reserved/compose.yml) into the same directory. +1. Copy your zrok account's enable token from the zrok web console to your clipboard and paste it in a file named `.env` in the same folder like this: + + ```bash title=".env" + ZROK_ENABLE_TOKEN="8UL9-48rN0ua" + ``` + +1. Name the Share + + This unique name becomes part of the domain name of the share, e.g. `https://my-prod-app.in.zrok.io`. A random name is generated if you don't specify one. + + ```bash title=".env" + ZROK_UNIQUE_NAME="my-prod-app" + ``` + +1. Run the Compose project to start sharing the built-in demo web server. Be sure to `--detach` so the project runs in the background if you want it to auto-restart when your computer reboots. + + ```bash + docker compose up --detach + ``` + +1. Get the public share URL from the output of the `zrok-share` service or by peeking in the zrok console where the share will appear in the graph. + + ```bash + docker compose logs zrok-share + ``` + + ```buttonless title="Output" + zrok-public-share-1 | https://w6r1vesearkj.in.zrok.io/ + ``` + +This concludes the minimum steps to begin sharing the demo web server. Read on to learn how to pivot to sharing any website or web service by leveraging additional zrok backend modes. + +## Proxy Any Web Server + +The simplest way to share your existing HTTP server is to set `ZROK_TARGET` (e.g. `https://example.com`) in the environment of the `docker compose up` command. When you restart the share will auto-configure for that URL. + +```bash title=".env" +ZROK_TARGET="http://example.com:8080" +``` + +```bash +docker compose down && docker compose up +``` + +## Require Authentication + +You can require a password or an OAuth login with certain email addresses. + +### OAuth Email + +You can allow specific email addresse patterns by setting `ZROK_OAUTH_PROVIDER` to `github` or `google` and +`ZROK_OAUTH_EMAILS`. Read more about the OAuth features in [this blog +post](https://blog.openziti.io/the-zrok-oauth-public-frontend). + +```bash title=".env" +ZROK_OAUTH_PROVIDER="github" +ZROK_OAUTH_EMAILS="alice@example.com *@acme.example.com" +``` + +## Caddy is Powerful + +The reserved public share project uses zrok's default backend mode, `proxy`. Another backend mode, `caddy`, accepts a path to [a Caddyfile](https://caddyserver.com/docs/caddyfile) as the value of `ZROK_TARGET` ([zrok Caddyfile examples](https://github.com/openziti/zrok/tree/main/etc/caddy)). + +Caddy is the most powerful and flexible backend mode in zrok. You must reserve a new public subdomain whenever you switch the backend mode, so using `caddy` reduces the risk that you'll have to share a new frontend URL with your users. + +With Caddy, you can balance the workload for websites or web services or share static sites and files or all of the above at the same time. You can update the Caddyfile and restart the Docker Compose project to start sharing the new configuration with the same reserved public subdomain. + +1. Create a Caddyfile. This example demonstrates proxying two HTTP servers with a weighted round-robin load balancer. + + ```console title="Caddyfile" + http:// { + # zrok requires this bind address template + bind {{ .ZrokBindAddress }} + reverse_proxy /* { + to http://httpbin1:8080 http://httpbin2:8080 + lb_policy weighted_round_robin 3 2 + } + } + ``` + +1. Create a file `compose.override.yml`. This example adds two `httpbin` containers for load balancing, and mounts the Caddyfile into the container. + + ```yaml title="compose.override.yml" + services: + httpbin1: + image: mccutchen/go-httpbin + expose: 8080 + httpbin2: + image: mccutchen/go-httpbin + expose: 8080 + zrok-share: + volumes: + - ./Caddyfile:/mnt/.zrok/Caddyfile + ``` + +1. Start a new Docker Compose project or delete the existing state volume. + + ```bash + docker compose down --volumes + ``` + + If you prefer to keep using the same zrok environment with the new share then delete `/mnt/.zrok/reserved.json` instead of the entire volume. + +1. Run the project to load the new configuration. + + ```bash + docker compose up --detach + ``` + +1. Note the new reserved share URL from the log. + + ```bash + docker compose logs zrok-share + ``` + + ```buttonless title="Output" + INFO: zrok public URL: https://88s803f2qvao.in.zrok.io/ + ``` diff --git a/website/versioned_docs/version-0.4/guides/docker-share/index.mdx b/website/versioned_docs/version-0.4/guides/docker-share/index.mdx new file mode 100644 index 00000000..31d0e7e6 --- /dev/null +++ b/website/versioned_docs/version-0.4/guides/docker-share/index.mdx @@ -0,0 +1,112 @@ +--- +title: Getting Started with Docker +--- + +import Details from '@theme/MDXComponents/Details'; + +## Overview + +To follow the guides in this section you will need [Docker](https://docs.docker.com/get-docker/). + +You have the option to enable a `zrok` account on the Docker host and mount it on the container or you can use the provided Docker Compose project files (`compose.yml`) to enable a separate `zrok` environment for each project. + +This page provides `docker` and `docker compose` examples of mounting the host's `zrok` environment on the container. You'll need to first [enable zrok on the Docker host](/docs/getting-started/#installing-the-zrok-command) to use this approach. + +## Permanent Public Share + +Let's say you have a `compose.yml` file that defines a web app known within the project's bridge network as `https://myapp:8080` and you want to publish it as a reliable, public site. + +1. Reserve a subdomain by running `zrok reserve public --unique-name "myapp" https://myapp:8080` on the Docker host. +1. Merge this YAML with `compose.yml` or save it in the same directory as `compose.override.yml` to let `docker compose up` merge it for you. + + ```yaml + services: + zrok: + image: openziti/zrok + restart: unless-stopped + user: "${UID}" + volumes: + - ${HOME}/.zrok:/home/ziggy/.zrok + environment: + PFXLOG_NO_JSON: "true" + command: share reserved "myapp" --headless + ``` + +The reserved share will be available at `https://myapp.share.zrok.io` each time the `zrok` container starts up. + +## Temporary Public Share + +Let's say you have a web server running on the host's private network at `https://10.11.12.13:8080`. With one additional `docker` command, you can share the web server publicly as long as the `zrok` container stays running. + +```bash title="BASH" +docker run \ + --rm \ + --network=host \ + --volume ~/.zrok:/home/ziggy/.zrok \ + --user "${UID:-1000}:${GID:-1000}" \ + openziti/zrok share public \ + --headless \ + https://10.11.12.13:8080 +``` + +
+PowerShell + +```powershell +docker.exe run ` + --rm ` + --network "host" ` + --volume "${env:USERPROFILE}\.zrok:/.zrok" ` + --user "1000" ` + openziti/zrok share public ` + --headless ` + https://10.11.12.13:8080 +``` + +
+ + +
+Command Prompt (batch) + +```cmd +docker.exe run ^ + --rm ^ + --network "host" ^ + --volume "%USERPROFILE%\.zrok:/.zrok" ^ + --user "1000" ^ + openziti/zrok share public ^ + --headless ^ + https://10.11.12.13:8080 +``` + +
+ +
+Windows Subsystem for Linux (WSL) + +```bash +docker run \ + --rm \ + --network "host" \ + --volume "/mnt/c/Users/$(powershell.exe -Command 'Write-Output $env:USERNAME' | tr -d '\r')/.zrok:/home/ziggy/.zrok" \ + --user "${UID:-1000}:${GID:-1000}" \ + openziti/zrok share public \ + --headless \ + https://10.11.12.13:8080 +``` + +
+ +The public share URL appears near the beginning of the container's log. + +Let's break down those options and arguments. + +1. `--rm` don't save this container because it's providing a temporary public share that's destroyed when the container stops +1. `--network=host` shares the host's network with the container so that the container can reach the web server directly. This is always necessary when the web server is listening only on the host's loopback interface, e.g., `https://::1:8080`, and may not be strictly necessary if the target is routeable from the default Docker bridge. +1. `--volume ~/.zrok:/home/ziggy/.zrok` mounts the `zrok` configuration from the Docker host into the container. +1. `--user "${UID:-1000}:${GID:-1000}"` sets the container's user to the current user on the Docker host to avoid permission issues with reading the mounted `zrok` configuration (defaults to `1000:1000`). +1. `openziti/zrok` is the `zrok` Docker image. +1. `share public` is the `zrok` command to share the target publicly until zrok exits. +1. `--headless` runs the `zrok` command without the interactive terminal UI. +1. `https://10.11.12.13:8080` is the target web server to share. diff --git a/website/versioned_docs/version-0.4/guides/drives.mdx b/website/versioned_docs/version-0.4/guides/drives.mdx new file mode 100644 index 00000000..1b4fe345 --- /dev/null +++ b/website/versioned_docs/version-0.4/guides/drives.mdx @@ -0,0 +1,315 @@ + +# Drives + +The zrok drives CLI tools allow for simple, ergonomic management and synchronization of local and remote files. + +## Sharing a Drive + +Virtual drives are shared through the `zrok` CLI using the `--backend-mode drive` flag through the `zrok share` command, using either the `public` or `private` sharing modes. We'll use the `private` sharing mode for this example: + +``` +$ mkdir /tmp/junk +$ zrok share private --headless --backend-mode drive /tmp/junk +[ 0.124] INFO sdk-golang/ziti.(*listenerManager).createSessionWithBackoff: {session token=[cf640aac-2706-49ae-9cc9-9a497d67d9c5]} new service session +[ 0.145] INFO main.(*sharePrivateCommand).run: allow other to access your share with the following command: +zrok access private wkcfb58vj51l +``` + +The command shown above creates an ephemeral, `private` drive share pointed at the local `/tmp/junk` folder. + +Notice that the share token allocated by `zrok` is `wkcfb58vj51l`. We'll use that share token to identify our virtual drive in the following operations. + +## Working with a Private Drive Share + +First, let's copy a file into our virtual drive using the `zrok copy` command: + +``` +$ zrok copy LICENSE zrok://wkcfb58vj51l +[ 0.119] INFO zrok/drives/sync.OneWay: => /LICENSE +copy complete! +``` + +We used the URL scheme `zrok://` to refer to the private virtual drive we allocated above using the `zrok share private` command. Use `zrok://` URLs with the drives CLI tools to refer to contents of private virtual drives. + +Next, let's get a directory listing of the virtual drive: + +``` +$ zrok ls zrok://wkcfb58vj51l +┌──────┬─────────┬─────────┬───────────────────────────────┐ +│ TYPE │ NAME │ SIZE │ MODIFIED │ +├──────┼─────────┼─────────┼───────────────────────────────┤ +│ │ LICENSE │ 11.3 kB │ 2024-01-19 12:16:46 -0500 EST │ +└──────┴─────────┴─────────┴───────────────────────────────┘ +``` + +We can make directories on the virtual drive: + +``` +$ zrok mkdir zrok://wkcfb58vj51l/stuff +$ zrok ls zrok://wkcfb58vj51l +┌──────┬─────────┬─────────┬───────────────────────────────┐ +│ TYPE │ NAME │ SIZE │ MODIFIED │ +├──────┼─────────┼─────────┼───────────────────────────────┤ +│ │ LICENSE │ 11.3 kB │ 2024-01-19 12:16:46 -0500 EST │ +│ DIR │ stuff │ │ │ +└──────┴─────────┴─────────┴───────────────────────────────┘ +``` + +We can copy the contents of a local directory into the new directory on the virtual drive: + +``` +$ ls -l util/ +total 20 +-rw-rw-r-- 1 michael michael 329 Jul 21 13:17 email.go +-rw-rw-r-- 1 michael michael 456 Jul 21 13:17 headers.go +-rw-rw-r-- 1 michael michael 609 Jul 21 13:17 proxy.go +-rw-rw-r-- 1 michael michael 361 Jul 21 13:17 size.go +-rw-rw-r-- 1 michael michael 423 Jan 2 11:57 uniqueName.go +$ zrok copy util/ zrok://wkcfb58vj51l/stuff +[ 0.123] INFO zrok/drives/sync.OneWay: => /email.go +[ 0.194] INFO zrok/drives/sync.OneWay: => /headers.go +[ 0.267] INFO zrok/drives/sync.OneWay: => /proxy.go +[ 0.337] INFO zrok/drives/sync.OneWay: => /size.go +[ 0.408] INFO zrok/drives/sync.OneWay: => /uniqueName.go +copy complete! +$ zrok ls zrok://wkcfb58vj51l/stuff +┌──────┬───────────────┬───────┬───────────────────────────────┐ +│ TYPE │ NAME │ SIZE │ MODIFIED │ +├──────┼───────────────┼───────┼───────────────────────────────┤ +│ │ email.go │ 329 B │ 2024-01-19 12:26:45 -0500 EST │ +│ │ headers.go │ 456 B │ 2024-01-19 12:26:45 -0500 EST │ +│ │ proxy.go │ 609 B │ 2024-01-19 12:26:45 -0500 EST │ +│ │ size.go │ 361 B │ 2024-01-19 12:26:45 -0500 EST │ +│ │ uniqueName.go │ 423 B │ 2024-01-19 12:26:45 -0500 EST │ +└──────┴───────────────┴───────┴───────────────────────────────┘ +``` + +And we can remove files and directories from the virtual drive: + +``` +$ zrok rm zrok://wkcfb58vj51l/LICENSE +$ zrok ls zrok://wkcfb58vj51l +┌──────┬───────┬──────┬──────────┐ +│ TYPE │ NAME │ SIZE │ MODIFIED │ +├──────┼───────┼──────┼──────────┤ +│ DIR │ stuff │ │ │ +└──────┴───────┴──────┴──────────┘ +$ zrok rm zrok://wkcfb58vj51l/stuff +$ zrok ls zrok://wkcfb58vj51l +┌──────┬──────┬──────┬──────────┐ +│ TYPE │ NAME │ SIZE │ MODIFIED │ +├──────┼──────┼──────┼──────────┤ +└──────┴──────┴──────┴──────────┘ +``` + +## Working with Public Shares + +Public shares work very similarly to private shares, they just use a different URL scheme: + +``` +$ zrok share public --headless --backend-mode drive /tmp/junk +[ 0.708] INFO sdk-golang/ziti.(*listenerManager).createSessionWithBackoff: {session token=[05e0f48b-242b-4fd9-8edb-259488535c47]} new service session +[ 0.878] INFO main.(*sharePublicCommand).run: access your zrok share at the following endpoints: + https://6kiww4bn7iok.share.zrok.io +``` + +The same commands, with a different URL scheme work with the `zrok` drives CLI: + +``` +$ zrok copy util/ https://6kiww4bn7iok.share.zrok.io +[ 0.268] INFO zrok/drives/sync.OneWay: => /email.go +[ 0.406] INFO zrok/drives/sync.OneWay: => /headers.go +[ 0.530] INFO zrok/drives/sync.OneWay: => /proxy.go +[ 0.655] INFO zrok/drives/sync.OneWay: => /size.go +[ 0.714] INFO zrok/drives/sync.OneWay: => /uniqueName.go +copy complete! +michael@fourtyfour Fri Jan 19 12:42:52 ~/Repos/nf/zrok +$ zrok ls https://6kiww4bn7iok.share.zrok.io +┌──────┬───────────────┬───────┬───────────────────────────────┐ +│ TYPE │ NAME │ SIZE │ MODIFIED │ +├──────┼───────────────┼───────┼───────────────────────────────┤ +│ │ email.go │ 329 B │ 2023-07-21 13:17:56 -0400 EDT │ +│ │ headers.go │ 456 B │ 2023-07-21 13:17:56 -0400 EDT │ +│ │ proxy.go │ 609 B │ 2023-07-21 13:17:56 -0400 EDT │ +│ │ size.go │ 361 B │ 2023-07-21 13:17:56 -0400 EDT │ +│ │ uniqueName.go │ 423 B │ 2024-01-02 11:57:14 -0500 EST │ +└──────┴───────────────┴───────┴───────────────────────────────┘ +``` + +For basic authentication provided by public shares, the `zrok` drives CLI offers the `--basic-auth` flag, which accepts a `:` parameter to specify the authentication for the public virtual drive (if it's required). + +Alternatively, the authentication can be set using the `ZROK_DRIVES_BASIC_AUTH` environment variable: + +``` +$ export ZROK_DRIVES_BASIC_AUTH=username:password +``` + +## One-way Synchronization + +The `zrok copy` command includes a `--sync` flag, which only copies files detected as _modified_. `zrok` considers a file with the same modification timestamp and size to be the same. Of course, this is not a strong guarantee that the files are equivalent. Future `zrok` drives versions will provide a cryptographically strong mechanism (a-la `rsync` and friends) to guarantee that files and trees of files are synchronized. + +For now, the `--sync` flag provides a convenience mechanism to allow resuming copies of large file trees and provide a reasonable guarantee that the trees are in sync. + +Let's take a look at `zrok copy --sync` in action: + +``` +$ zrok copy --sync docs/ https://glmv049c62p7.share.zrok.io +[ 0.636] INFO zrok/drives/sync.OneWay: => /_attic/ +[ 0.760] INFO zrok/drives/sync.OneWay: => /_attic/network/ +[ 0.816] INFO zrok/drives/sync.OneWay: => /_attic/network/_category_.json +[ 0.928] INFO zrok/drives/sync.OneWay: => /_attic/network/prod/ +[ 0.987] INFO zrok/drives/sync.OneWay: => /_attic/network/prod/ziti-ctrl.service +[ 1.048] INFO zrok/drives/sync.OneWay: => /_attic/network/prod/ziti-ctrl.yml +[ 1.107] INFO zrok/drives/sync.OneWay: => /_attic/network/prod/ziti-router0.service +[ 1.167] INFO zrok/drives/sync.OneWay: => /_attic/network/prod/ziti-router0.yml +[ 1.218] INFO zrok/drives/sync.OneWay: => /_attic/network/prod/zrok-access-public.service +[ 1.273] INFO zrok/drives/sync.OneWay: => /_attic/network/prod/zrok-ctrl.service +[ 1.328] INFO zrok/drives/sync.OneWay: => /_attic/network/prod/zrok-ctrl.yml +[ 1.382] INFO zrok/drives/sync.OneWay: => /_attic/network/prod/zrok.io-network-skeleton.md +[ 1.447] INFO zrok/drives/sync.OneWay: => /_attic/overview.md +[ 1.572] INFO zrok/drives/sync.OneWay: => /_attic/sharing/ +[ 1.622] INFO zrok/drives/sync.OneWay: => /_attic/sharing/_category_.json +[ 1.673] INFO zrok/drives/sync.OneWay: => /_attic/sharing/reserved_services.md +[ 1.737] INFO zrok/drives/sync.OneWay: => /_attic/sharing/sharing_modes.md +[ 1.793] INFO zrok/drives/sync.OneWay: => /_attic/v0.2_account_requests.md +[ 1.902] INFO zrok/drives/sync.OneWay: => /_attic/v0.4_limits.md +... +[ 9.691] INFO zrok/drives/sync.OneWay: => /images/zrok_web_ui_empty_shares.png +[ 9.812] INFO zrok/drives/sync.OneWay: => /images/zrok_web_ui_new_environment.png +[ 9.870] INFO zrok/drives/sync.OneWay: => /images/zrok_zoom_to_fit.png +copy complete! +``` + +Because the target drive was empty, `zrok copy --sync` copied the entire contents of the local `docs/` tree into the virtual drive. However, if we run that command again, we get: + +``` +$ zrok copy --sync docs/ https://glmv049c62p7.share.zrok.io +copy complete! +``` + +The virtual drive contents are already in sync with the local filesystem tree, so there is nothing for it to copy. + +Let's alter the contents of the drive and run the `--sync` again: + +``` +$ zrok rm https://glmv049c62p7.share.zrok.io/images +$ zrok copy --sync docs/ https://glmv049c62p7.share.zrok.io +[ 0.364] INFO zrok/drives/sync.OneWay: => /images/ +[ 0.456] INFO zrok/drives/sync.OneWay: => /images/zrok.png +[ 0.795] INFO zrok/drives/sync.OneWay: => /images/zrok_cover.png +[ 0.866] INFO zrok/drives/sync.OneWay: => /images/zrok_deployment.drawio +... +[ 2.254] INFO zrok/drives/sync.OneWay: => /images/zrok_web_ui_empty_shares.png +[ 2.340] INFO zrok/drives/sync.OneWay: => /images/zrok_web_ui_new_environment.png +[ 2.391] INFO zrok/drives/sync.OneWay: => /images/zrok_zoom_to_fit.png +copy complete! +``` + +Because we removed the `images/` tree from the virtual drive, `zrok copy --sync` detected this and copied the local `images/` tree back onto the virtual drive. + +## Drive-to-Drive Copies and Synchronization + +The `zrok copy` CLI can operate on pairs of virtual drives remotely, without ever having to store files locally. This allow for drive-to-drive copies and synchronization. + +Here are a couple of examples: + +``` +$ zrok copy --sync https://glmv049c62p7.share.zrok.io https://glmv049c62p7.share.zrok.io +copy complete! +``` + +Specifying the same URL for both the source and the target of a `--sync` operation should always result in nothing being copied... they are the same drive with the same state. + +We can copy files between two virtual drives with a single command: + +``` +$ zrok copy --sync https://glmv049c62p7.share.zrok.io zrok://hsml272j3xzf +[ 1.396] INFO zrok/drives/sync.OneWay: => /_attic/ +[ 2.083] INFO zrok/drives/sync.OneWay: => /_attic/overview.md +[ 2.704] INFO zrok/drives/sync.OneWay: => /_attic/sharing/ +... +[ 118.240] INFO zrok/drives/sync.OneWay: => /images/zrok_web_console_empty.png +[ 118.920] INFO zrok/drives/sync.OneWay: => /images/zrok_enable_modal.png +[ 119.589] INFO zrok/drives/sync.OneWay: => /images/zrok_cover.png +[ 120.214] INFO zrok/drives/sync.OneWay: => /getting-started.mdx +copy complete! +$ zrok copy --sync https://glmv049c62p7.share.zrok.io zrok://hsml272j3xzf +copy complete! +``` + +## Copying from Drives to the Local Filesystem + +In the current version of the drives CLI, `zrok copy` always assumes the destination is a directory. There is currently no way to do: + +``` +$ zrok copy somefile someotherfile +``` + +What you'll end up with on the local filesystem is: + +``` +somefile +someotherfile/somefile +``` + +It's in the backlog to support file destinations in a future release of `zrok`. So, when using `zrok copy`, always take note of the destination. + +`zrok copy` supports a default destination of `file://.`, so you can do single parameter `zrok copy` commands like this: + +``` +$ zrok ls https://azc47r3cwjds.share.zrok.io +┌──────┬─────────┬─────────┬───────────────────────────────┐ +│ TYPE │ NAME │ SIZE │ MODIFIED │ +├──────┼─────────┼─────────┼───────────────────────────────┤ +│ │ LICENSE │ 11.3 kB │ 2023-07-21 13:17:56 -0400 EDT │ +└──────┴─────────┴─────────┴───────────────────────────────┘ +$ zrok copy https://azc47r3cwjds.share.zrok.io/LICENSE +[ 0.260] INFO zrok/drives/sync.OneWay: => /LICENSE +copy complete! +$ ls -l +total 12 +-rw-rw-r-- 1 michael michael 11346 Jan 19 13:29 LICENSE +``` + +You can also specify a local folder as the destination for your copy: + +``` +$ zrok copy https://azc47r3cwjds.share.zrok.io/LICENSE /tmp/inbox +[ 0.221] INFO zrok/drives/sync.OneWay: => /LICENSE +copy complete! +$ l /tmp/inbox +total 12 +-rw-rw-r-- 1 michael michael 11346 Jan 19 13:30 LICENSE +``` + +## Unique Names and Reserved Shares + +Private reserved shares with unque names can be particularly useful with the drives CLI: + +``` +$ zrok reserve private -b drive --unique-name mydrive /tmp/junk +[ 0.315] INFO main.(*reserveCommand).run: your reserved share token is 'mydrive' +$ zrok share reserved --headless mydrive +[ 0.289] INFO main.(*shareReservedCommand).run: sharing target: '/tmp/junk' +[ 0.289] INFO main.(*shareReservedCommand).run: using existing backend target: /tmp/junk +[ 0.767] INFO sdk-golang/ziti.(*listenerManager).createSessionWithBackoff: {session token=[d519a436-9fb5-4207-afd5-7cbc28fb779a]} new service session +[ 0.927] INFO main.(*shareReservedCommand).run: use this command to access your zrok share: 'zrok access private mydrive' +``` + +This makes working with `zrok://` URLs particularly convenient: + +``` +$ zrok ls zrok://mydrive +┌──────┬─────────┬─────────┬───────────────────────────────┐ +│ TYPE │ NAME │ SIZE │ MODIFIED │ +├──────┼─────────┼─────────┼───────────────────────────────┤ +│ │ LICENSE │ 11.3 kB │ 2023-07-21 13:17:56 -0400 EDT │ +└──────┴─────────┴─────────┴───────────────────────────────┘ +``` + +## Future Enhancements + +Coming in a future release of `zrok` drives are features like: + +* two-way synchronization between multiple hosts... allowing for shared "dropbox-like" usage scenarios between multiple environments +* better ergonomics for single-file destinations diff --git a/website/versioned_docs/version-0.4/guides/frontdoor.mdx b/website/versioned_docs/version-0.4/guides/frontdoor.mdx new file mode 100644 index 00000000..dec7bd5f --- /dev/null +++ b/website/versioned_docs/version-0.4/guides/frontdoor.mdx @@ -0,0 +1,81 @@ +--- +title: zrok frontdoor +sidebar_label: frontdoor +sidebar_position: 20 +hide_table_of_contents: true +--- + +import OsTabs from '@theme/OsTabs'; +import TabItem from '@theme/TabItem'; +import LinuxService from './_frontdoor-linux.mdx'; +import ThemedImage from '@theme/ThemedImage'; +import useBaseUrl from '@docusaurus/useBaseUrl'; + +**zrok frontdoor** is the heavy-duty front door to your app or site. It makes your website or app available to your online audience through the shield of zrok.io's hardened, managed frontends. + + + +## Overview + +zrok frontends are the parts of zrok that proxy incoming public web traffic to zrok backend shares via OpenZiti. When you use zrok with a `zrok.io` frontend, you're using **zrok frontdoor**. `zrok.io` is zrok-as-a-service by NetFoundry, the team behind OpenZiti. You need a free account to use **zrok frontdoor**. + + + + +## Choose your OS + +Choose between installing the Linux package or running zrok with Docker (Linux, macOS, or Windows). + +{/* The OsTabs component must be aligned with these specific values: `Linux`, `Docker` which are auto-selected based on +the detected OS of the visitor's browser */} + + + + +On Linux, zrok frontdoor is implemented natively as a system service provided by the `zrok-share` DEB or RPM package. + +## Goal + +Proxy a reserved public subdomain to a backend target with an always-on Linux system service. + +## How it Works + +The `zrok-share` package creates a `zrok-share.service` unit in systemd. The administrator edits the service's configuration file to specify the: + +1. zrok account token +1. target URL or files to be shared and backend mode, e.g. `proxy` +1. authentication options, if wanted + +When the service starts it will: + +1. enable the zrok environment unless `/var/lib/zrok-share/.zrok/environment.json` exists +1. reserve a public subdomain for the service unless `/var/lib/zrok-share/.zrok/reserved.json` exists +1. start sharing the target specified as `ZROK_TARGET` in the environment file + + + + + + + +On macOS and Windows, zrok frontdoor is implemented as a Docker Compose project which reserves a public subdomain for your website or service and manages a zrok environment that's separate from the Docker host. [Link to the Docker Public Share Guide](/guides/docker-share/docker_public_share_guide.md) + + + + + +## Concepts + +Overview of [zrok reserved shares](/concepts/sharing-reserved.md) diff --git a/website/versioned_docs/version-0.4/guides/install/_ansible_repo_setup.yaml b/website/versioned_docs/version-0.4/guides/install/_ansible_repo_setup.yaml new file mode 100644 index 00000000..8cd3719d --- /dev/null +++ b/website/versioned_docs/version-0.4/guides/install/_ansible_repo_setup.yaml @@ -0,0 +1,55 @@ +- name: Set up zrok Package Repo + gather_facts: true + hosts: all + become: true + tasks: + - name: Set up apt repo + when: ansible_os_family == "Debian" + block: + - name: Install playbook dependencies + ansible.builtin.package: + name: + - gnupg + state: present + + - name: Fetch armored pubkey + ansible.builtin.uri: + url: https://get.openziti.io/tun/package-repos.gpg + return_content: yes + register: armored_pubkey + + - name: Dearmor pubkey + ansible.builtin.shell: | + gpg --dearmor --output /usr/share/keyrings/openziti.gpg <<< "{{ armored_pubkey.content }}" + args: + creates: /usr/share/keyrings/openziti.gpg + executable: /bin/bash + + - name: Set pubkey filemode + ansible.builtin.file: + path: /usr/share/keyrings/openziti.gpg + mode: 'a+rX' + + - name: Install OpenZiti repo deb source + ansible.builtin.copy: + dest: /etc/apt/sources.list.d/openziti-release.list + content: | + deb [signed-by=/usr/share/keyrings/openziti.gpg] https://packages.openziti.org/zitipax-openziti-deb-stable debian main + + - name: Refresh Repo Sources + ansible.builtin.apt: + update_cache: yes + cache_valid_time: 3600 + + - name: Set up yum repo + when: ansible_os_family == "RedHat" + block: + - name: Install OpenZiti repo rpm source + ansible.builtin.yum_repository: + name: OpenZitiRelease + description: OpenZiti Release + baseurl: https://packages.openziti.org/zitipax-openziti-rpm-stable/redhat/$basearch + enabled: yes + gpgkey: https://packages.openziti.org/zitipax-openziti-rpm-stable/redhat/$basearch/repodata/repomd.xml.key + repo_gpgcheck: yes + gpgcheck: no diff --git a/website/versioned_docs/version-0.4/guides/install/_category_.json b/website/versioned_docs/version-0.4/guides/install/_category_.json new file mode 100644 index 00000000..b7acc861 --- /dev/null +++ b/website/versioned_docs/version-0.4/guides/install/_category_.json @@ -0,0 +1,8 @@ +{ + "label": "Install", + "position": 10, + "link": { + "type": "doc", + "id": "guides/install/index" + } +} diff --git a/website/versioned_docs/version-0.4/guides/install/index.mdx b/website/versioned_docs/version-0.4/guides/install/index.mdx new file mode 100644 index 00000000..e70acbd9 --- /dev/null +++ b/website/versioned_docs/version-0.4/guides/install/index.mdx @@ -0,0 +1,31 @@ +--- +title: Install +--- + +import { AssetsProvider } from '@site/src/components/assets-context'; +import DownloadCard from '@site/src/components/download-card'; +import styles from '@site/src/css/download-card.module.css'; + + +
+ + + +
+
+ diff --git a/website/versioned_docs/version-0.4/guides/install/linux.mdx b/website/versioned_docs/version-0.4/guides/install/linux.mdx new file mode 100644 index 00000000..b66131f2 --- /dev/null +++ b/website/versioned_docs/version-0.4/guides/install/linux.mdx @@ -0,0 +1,197 @@ +--- +title: Install zrok in Linux +sidebar_label: Linux +--- + +import { AssetsProvider } from '@site/src/components/assets-context'; +import DownloadCard from '@site/src/components/download-card'; +import styles from '@site/src/css/download-card.module.css'; +import AnsibleRepoSetup from './_ansible_repo_setup.yaml' +import ConcatenateYamlSnippets from '@site/src/components/cat-yaml.jsx' + +## Linux Binary + + +
+ +
+
+ +Download the binary distribution for your Linux distribution's architecture or run the install script below to pick the correct CPU architecture automatically. For Intel and AMD 64-bit machines use the `amd64` distribution. For Raspberry Pi use the `arm64` distribution. + +
+Manually install in `~/bin/zrok` + +1. Unarchive the distribution in a temporary directory. + + ```text + mkdir /tmp/zrok && tar -xf ./zrok*linux*.tar.gz -C /tmp/zrok + ``` + +1. Install the `zrok` executable. + + ```text + mkdir -p ~/bin && install /tmp/zrok/zrok ~/bin/ + ``` + +1. Add `~/bin` to your shell's executable search path. Optionally add this to your ~/.zshenv to persist the change. + + ```text + PATH=~/bin:$PATH + ``` + +1. With the `zrok` executable in your path, you can then execute the `zrok` command from your shell: + + ```text + zrok version + ``` + + ```buttonless title="Output" + _ + _____ __ ___ | | __ + |_ / '__/ _ \| |/ / + / /| | | (_) | < + /___|_| \___/|_|\_\ + + v0.4.0 [c889005] + ``` + +
+ +
+Script to install binary in `/usr/local/bin/zrok` + +This script auto-selects the correct architecture and may be helpful for Raspberry Pi users. + +```text +cd $(mktemp -d); + +ZROK_VERSION=$( + curl -sSf https://api.github.com/repos/openziti/zrok/releases/latest \ + | jq -r '.tag_name' +); + +case $(uname -m) in + x86_64) GOXARCH=amd64 + ;; + aarch64|arm64) GOXARCH=arm64 + ;; + arm*) GOXARCH=armv7 + ;; + *) echo "ERROR: unknown arch '$(uname -m)'" >&2 + exit 1 + ;; +esac; + +curl -sSfL \ + "https://github.com/openziti/zrok/releases/download/${ZROK_VERSION}/zrok_${ZROK_VERSION#v}_linux_${GOXARCH}.tar.gz" \ + | tar -xz -f -; + +sudo install -o root -g root ./zrok /usr/local/bin/; + +zrok version; +``` + +
+## Install `zrok` from the Repository + +We recommend that you install `zrok` from the Linux package repository with the manual steps or the setup script. DEB and RPM packages are available for amd64, arm64, and armv7 architectures. + +:::info + +Check out [zrok frontdoor](/guides/frontdoor.mdx?os=Linux) for running `zrok` as an always-on service. + +::: + +
+Manually set up DEB repository + +```text +(set -euo pipefail; + +curl -sSLf https://get.openziti.io/tun/package-repos.gpg \ +| sudo gpg --dearmor --output /usr/share/keyrings/openziti.gpg; +sudo chmod a+r /usr/share/keyrings/openziti.gpg; + +sudo tee /etc/apt/sources.list.d/openziti-release.list >/dev/null < + +
+Manually set up RPM repository + +```text +(set -euo pipefail; + +sudo tee /etc/yum.repos.d/openziti-release.repo >/dev/null <<\EOF; +[OpenZitiRelease] +name=OpenZiti Release +baseurl=https://packages.openziti.org/zitipax-openziti-rpm-stable/redhat/$basearch +enabled=1 +gpgcheck=0 +gpgkey=https://packages.openziti.org/zitipax-openziti-rpm-stable/redhat/$basearch/repodata/repomd.xml.key +repo_gpgcheck=1 +EOF + +sudo dnf update; +sudo dnf install zrok; +zrok version; +) +``` + +
+ +
+Script to set up DEB or RPM repository + +1. Download the zrok install script. + + ```text + curl -sSLfo ./zrok-install.bash https://get.openziti.io/install.bash + ``` + +1. Inspect the script to ensure it is suitable to run as root on your system. + + ```text + less ./zrok-install.bash + ``` + +1. Run the script as root to add the package repo and install the `zrok` package. + + ```text + sudo bash ./zrok-install.bash zrok + ``` + +
+ +
+Ansible Playbook + + +{AnsibleRepoSetup} +{` +- name: Install zrok package + gather_facts: false + hosts: all + become: true + tasks: + - name: Install zrok + ansible.builtin.package: + name: zrok + state: present +`} + + +
diff --git a/website/versioned_docs/version-0.4/guides/install/macos.mdx b/website/versioned_docs/version-0.4/guides/install/macos.mdx new file mode 100644 index 00000000..c7983404 --- /dev/null +++ b/website/versioned_docs/version-0.4/guides/install/macos.mdx @@ -0,0 +1,55 @@ +--- +title: Install zrok in macOS +sidebar_label: macOS +--- + +import { AssetsProvider } from '@site/src/components/assets-context'; +import DownloadCard from '@site/src/components/download-card'; +import styles from '@site/src/css/download-card.module.css'; + +## Darwin Binary + + +
+ +
+
+ +Download the binary distribution for your macOS architecture. For Intel Macs use the `amd64` distribution. For Apple Silicon Macs use the `arm64` distribution. + +1. Unarchive the distribution in a temporary directory. + + ```text + cd ~/Downloads && mkdir -p /tmp/zrok && tar -xf ./zrok*darwin*.tar.gz -C /tmp/zrok + ``` + +1. Install the `zrok` executable. + + ```text + mkdir -p ~/bin && install /tmp/zrok/zrok ~/bin/ + ``` + +1. Add `~/bin` to your shell's executable search path. Optionally add this to your ~/.zshenv to persist the change. + + ```text + PATH=~/bin:$PATH + ``` + +1. With the `zrok` executable in your path, you can then execute the `zrok` command from your shell: + + ```text + zrok version + ``` + + ```buttonless title="Output" + _ + _____ __ ___ | | __ + |_ / '__/ _ \| |/ / + / /| | | (_) | < + /___|_| \___/|_|\_\ + + v0.4.0 [c889005] + ``` diff --git a/website/versioned_docs/version-0.4/guides/install/windows.mdx b/website/versioned_docs/version-0.4/guides/install/windows.mdx new file mode 100644 index 00000000..e0a4760d --- /dev/null +++ b/website/versioned_docs/version-0.4/guides/install/windows.mdx @@ -0,0 +1,60 @@ +--- +title: Install zrok in Windows +sidebar_label: Windows +--- + +import { AssetsProvider } from '@site/src/components/assets-context'; +import DownloadCard from '@site/src/components/download-card'; +import styles from '@site/src/css/download-card.module.css'; + +## Windows Binary + + +
+ +
+
+ +1. In PowerShell, change to the directory where you downloaded zrok. + + ```text + cd "$env:USERPROFILE\Downloads" + ``` + +1. In PowerShell, install zrok in your home directory (`bin\zrok.exe`), and permanently set the executable search path. + + ```text + $binDir = Join-Path -Path $env:USERPROFILE -ChildPath "bin" + New-Item -Path $binDir -ItemType Directory -ErrorAction SilentlyContinue + $latest = Get-ChildItem -Path .\zrok*windows*.tar.gz | Sort-Object LastWriteTime | Select-Object -Last 1 + tar -xf $latest.FullName -C $binDir zrok.exe + $currentPath = [System.Environment]::GetEnvironmentVariable('PATH', [System.EnvironmentVariableTarget]::User) + if ($currentPath -notlike "*$binDir*") { + $newPath = "$currentPath;$binDir" + [System.Environment]::SetEnvironmentVariable('PATH', $newPath, [System.EnvironmentVariableTarget]::User) + $env:Path = $newPath + } + ``` + +1. With the `zrok` executable in your path, you can then execute the `zrok` directly. + + ```text + zrok version + ``` + + ```buttonless title="Output" + + _____ __ ___ | | __ + |_ / '__/ _ \| |/ / + / /| | | (_) | < + /___|_| \___/|_|\_\ + + v0.4.0 [c889005] + ``` + +## Wintun for zrok VPN + +On Windows, you must install Wintun to use zrok's VPN backend mode. See the [VPN guide](/guides/vpn/vpn.md) for more details. diff --git a/website/versioned_docs/version-0.4/guides/linux-user-share/_category_.json b/website/versioned_docs/version-0.4/guides/linux-user-share/_category_.json new file mode 100644 index 00000000..16892730 --- /dev/null +++ b/website/versioned_docs/version-0.4/guides/linux-user-share/_category_.json @@ -0,0 +1,8 @@ +{ + "label": "Linux User Share", + "position": 40, + "link": { + "type": "doc", + "id": "guides/linux-user-share/index" + } +} diff --git a/website/versioned_docs/version-0.4/guides/linux-user-share/index.mdx b/website/versioned_docs/version-0.4/guides/linux-user-share/index.mdx new file mode 100644 index 00000000..6b9679e2 --- /dev/null +++ b/website/versioned_docs/version-0.4/guides/linux-user-share/index.mdx @@ -0,0 +1,44 @@ +--- +title: Linux User Share +--- + +import LinuxShareInstall from '/../docs/guides/_linux-share-install.mdx' + +## Overview + +You can run any number of zrok share services as `systemd --user` units with your Linux user's zrok environment in `~/.zrok`. This is like [zrok frontdoor](/guides/frontdoor.mdx) except that frontdoor is a system service managed by root separately from your user's login. Linux user shares, Linux system services, and Docker shares all use the same configuration environment variables. + +## Install the Linux Package + +The package provides the `zrok` executable and service unit template. + + + +## Create a User Share Configuration File + +Substitute a name for your instance in place of `my-instance` in the following example. To avoid character escaping problems, use only letters, numbers, hyphens, and underscores in the instance name, not spaces or other special characters. + +```bash +ZROK_INSTANCE="my-instance" +cp /opt/openziti/etc/zrok/zrok-share.env ~/.zrok/zrok-share@${ZROK_INSTANCE}.env +``` + +## Edit the User Share Configuration File + +Edit the configuration file in `~/.zrok/zrok-share@${ZROK_INSTANCE}.env` as you would for [zrok frontdoor](/guides/frontdoor.mdx), except ignore the first section "ZROK ENVIRONMENT" because user shares re-use `~/.zrok` and do not need a separate zrok environment. + +## Start the User Share Service + +```bash +systemctl --user enable --now zrok-share@${ZROK_INSTANCE}.service +``` + +## Check the User Share Journal + +```bash +journalctl --user -lfu zrok-share@${ZROK_INSTANCE}.service +``` + +## Add Another User Share + +To create another user share, choose another instance name, copy the `zrok-share.env` file, edit the configuration file, and start the service. diff --git a/website/versioned_docs/version-0.4/guides/permission-modes.md b/website/versioned_docs/version-0.4/guides/permission-modes.md new file mode 100644 index 00000000..8cab041b --- /dev/null +++ b/website/versioned_docs/version-0.4/guides/permission-modes.md @@ -0,0 +1,77 @@ +--- +sidebar_position: 22 +sidebar_label: Permission Modes +--- + +# Permission Modes + +Shares created in zrok `v0.4.26` and newer now include a choice of _permission mode_. + +Shares created with zrok `v0.4.25` and older were created using what is now called the _open permission mode_. Whether _public_ or _private_, these shares can be accessed by any user of the zrok service instance, as long as they know the _share token_ of the share. Effectively shares with the _open permission mode_ are accessible by any user of the zrok service instance. + +zrok now supports a _closed permission mode_, which allows for more fine-grained control over which zrok users are allowed to privately access your shares using `zrok access private`. + +zrok defaults to continuing to create shares with the _open permission mode_. This will likely change in a future release. We're leaving the default behavior in place to allow users a period of time to get comfortable with the new permission modes. + +## Creating a Share with Closed Permission Mode + +Adding the `--closed` flag to the `zrok share` or `zrok reserve` commands will create shares using the _closed permission mode_: + +``` +$ zrok share private --headless --closed -b web . +[ 0.066] INFO main.(*sharePrivateCommand).run: allow other to access your share with the following command: +zrok access private 0vzwzodf0c7g +``` + +By default any environment owned by the account that created the share is _allowed_ to access the new share. But a user trying to access the share from an environment owned by a different account will enounter the following error message: + +``` +$ zrok access private 0vzwzodf0c7g +[ERROR]: unable to access ([POST /access][401] accessUnauthorized) +``` + +The `zrok share` and `zrok reserve` commands now include an `--access-grant` flag, which allows you to specify additional zrok accounts that are allowed to access your shares: + +``` +$ zrok share private --headless --closed --access-grant anotheruser@test.com -b web . +[ 0.062] INFO main.(*sharePrivateCommand).run: allow other to access your share with the following command: +zrok access private y6h4at5xvn6o +``` + +And now `anotheruser@test.com` will be allowed to access the share: + +``` +$ zrok access private --headless y6h4at5xvn6o +[ 0.049] INFO main.(*accessPrivateCommand).run: allocated frontend 'VyvrJihAOEHD' +[ 0.051] INFO main.(*accessPrivateCommand).run: access the zrok share at the following endpoint: http://127.0.0.1:9191 +``` + +## Adding and Removing Access Grants for Existing Shares + +If you've created a share (either reserved or ephemeral) and you forgot to include an access grant, or want to remove an access grant that was mistakenly added, you can use the `zrok modify share` command to make the adjustments: + +Create a share: + +``` +$ zrok share private --headless --closed -b web . +[ 0.064] INFO main.(*sharePrivateCommand).run: allow other to access your share with the following command: +zrok access private s4czjylwk7wa +``` + +In another shell in the same environment you can execute: + +``` +$ zrok modify share s4czjylwk7wa --add-access-grant anotheruser@test.com +updated +``` + +And to remove the grant: + +``` +$ zrok modify share s4czjylwk7wa --remove-access-grant anotheruser@test.com +updated +``` + +## Limitations + +As of `v0.4.26` there is currently no way to _list_ the current access grants. This will be addressed shortly in a subsequent update. \ No newline at end of file diff --git a/website/versioned_docs/version-0.4/guides/self-hosting/_category_.json b/website/versioned_docs/version-0.4/guides/self-hosting/_category_.json new file mode 100644 index 00000000..391aa9bb --- /dev/null +++ b/website/versioned_docs/version-0.4/guides/self-hosting/_category_.json @@ -0,0 +1,7 @@ +{ + "label": "Self Hosting", + "position": 80, + "link": { + "type": "generated-index" + } +} diff --git a/website/versioned_docs/version-0.4/guides/self-hosting/docker.mdx b/website/versioned_docs/version-0.4/guides/self-hosting/docker.mdx new file mode 100644 index 00000000..2afb4a79 --- /dev/null +++ b/website/versioned_docs/version-0.4/guides/self-hosting/docker.mdx @@ -0,0 +1,9 @@ +--- +title: Self-hosting guide for Docker +sidebar_label: Docker +sidebar_position: 45 +--- + +import DockerInstance from '/../docker/compose/zrok-instance/README.md' + + diff --git a/website/versioned_docs/version-0.4/guides/self-hosting/instance-configuration.mdx b/website/versioned_docs/version-0.4/guides/self-hosting/instance-configuration.mdx new file mode 100644 index 00000000..bc0d7480 --- /dev/null +++ b/website/versioned_docs/version-0.4/guides/self-hosting/instance-configuration.mdx @@ -0,0 +1,46 @@ +--- +title: Use Another zrok Instance +sidebar_label: Instance Config +--- + +:::note +This guide is relevant if you are self-hosting or using a friend's `zrok` instance instead of using zrok-as-a-service from `zrok.io`. +::: + +The `zrok` *command* on your computer uses a `zrok` *instance* over the network. + +The default instance API endpoint for the `zrok` command is `api.zrok.io`. Set the API endpoint to another instance's API endpoint: + +```text +zrok config set apiEndpoint https://zrok.example.com +``` + +```buttonless title="Output" +[WARNING]: unable to open environment metadata; ignoring + +zrok configuration updated +``` + +:::note +The `WARNING` about `environment metadata` is expected when you run `zrok config set` before `zrok enable`. +::: + +You can use the `zrok status` command to inspect the state of your local _environment_. `zrok` refers to each shell where you install and `enable` a copy of `zrok` as an _environment_. + +```text +zrok status +``` + +```buttonless title="Output" +Config: + + CONFIG VALUE SOURCE + apiEndpoint https://zrok.mydomain.com config + +[WARNING]: Unable to load your local environment! + +To create a local environment use the zrok enable command. +``` + +The `zrok status` command shows the configured API service that your environment is using, as well as the `SOURCE` where the setting was retrieved. In this case, `config` means that the setting was set into the environment using the `zrok config` command. + diff --git a/website/versioned_docs/version-0.4/guides/self-hosting/interstitial-page.md b/website/versioned_docs/version-0.4/guides/self-hosting/interstitial-page.md new file mode 100644 index 00000000..182680cd --- /dev/null +++ b/website/versioned_docs/version-0.4/guides/self-hosting/interstitial-page.md @@ -0,0 +1,67 @@ +--- +title: Interstitial Pages +sidebar_label: Interstitial Pages +sidebar_position: 18 +--- + +On large zrok installations that support open registration and shared public frontends, abuse can become an issue. In order to mitigate phishing and other similar forms of abuse, zrok offers an interstitial page that announces to the visiting user that the share is hosted through zrok, and probably isn't their financial institution. + +Interstitial pages can be enabled on a per-frontend basis. This allows the interstitial to be enabled on open public frontends but not closed public frontends (closed public frontends require a grant to use). + +The interstitial page requirement can also be overridden on a per-account basis, allowing shares created by specific accounts to bypass the interstitial requirement on frontends that enable it. This facilitates building infrastructure that grants trusted users additional privileges. + +By default, if you do not specifically enable interstitial pages on a public frontend, then your self-hosted service instance will not offer them. + +Let's take a look at how the interstitial pages mechanism works. The following diagram shows the share configuration rendezvous made between the zrok controller and a zrok frontend: + +![zrok_interstitial_rendezvous](../../images/zrok_interstitial_rendezvous.png) + +Every zrok share has a _config_ recorded in the underlying OpenZiti network. The config is of type `zrok.proxy.v1`. The frontend uses the information in this config to understand the disposition of the share. The config can contain an `interstitial: true` setting. If the config has this setting, and the frontend is configured to enable interstitial pages, then end users accessing the share will receive the interstitial page on first visit. + +By default the zrok controller will record `interstitial: true` in the share config _unless_ a row is present in the `skip_interstitial_grants` table in the underlying database for the account creating the share. The `skip_interstitial_grants` table is a basic SQL structure that allows inserting a row per account. + +``` +create table skip_interstitial_grants ( + id serial primary key, + + account_id integer references accounts (id) not null, + + created_at timestamptz not null default(current_timestamp), + updated_at timestamptz not null default(current_timestamp), + deleted boolean not null default(false) +); +``` + +If an account has a row present in this table when creating a share, then the controller will write `interstitial: false` into the config for the share, which will bypass the interstitial regardless of frontend configuration. The `skip_interstitial_grants` controls what the zrok controller will store in the share config when creating the share. + +The frontend configuration controls what the frontend will do with the share config it finds in OpenZiti. The new stanza looks like this: + +``` +# Configure interstitial pages for this frontend. The interstitial page presents a warning to internet users, alerting +# them to the fact that they're visiting a zrok share. +# +#interstitial: +# # Enable or disable interstitial pages on this frontend. +# # +# enabled: true +# +# # Specify a list of User-Agent prefixes that should receive the interstitial page. If interstitial pages are enabled +# # and this list is not set, all user agents will receive an interstitial page. +# # +# user_agent_prefixes: +# - "Mozilla/5.0" +``` + +Setting `enabled: true` in the `interstitial` stanza of the frontend config will allow the configured frontend to offer an interstitial page if the share config enables the interstitial page for that share. The `user_agent_prefixes` array can be used to specify which specific `User-Agent` types receive the interstitial. User agents that match a prefix in the list will receive the interstitial, while others will not. If the `user_agent_prefixes` list is omitted, _all_ user agents will receive the interstitial page. + +## Bypassing the Interstitial + +The interstitial page will be presented unless the client shows up with a `zrok_interstitial` cookie (depending on `user_agent_prefixes` configuration). When the user is presented with the interstitial page, there is a button they can click which sets the necessary cookie and allows them to visit the site. The cookie is set to expire in one week. + +Typically the `user_agent_prefixes` list contains `Mozilla/5.0`, which matches all typical interactive mobile and desktop browsers. Setting a non-standard `User-Agent` in an interactive browser will bypass the interstitial pages for frontends configured with the usual `Mozilla/5.0` prefix. + +End users can offer an HTTP header of `skip_zrok_interstitial`, set to any value to bypass the interstitial page. Setting this header means that the user most likely understands what a zrok share is and will hopefully not fall for a phishing attack. + +The `skip_zrok_interstitial` header is especially useful for API clients (like `curl`) and other types of non-interactive clients. + +The `drive` backend mode does not currently support `GET` requests and cannot be accessed with a conventional web browser, so it bypasses the interstitial page requirement. \ No newline at end of file diff --git a/website/versioned_docs/version-0.4/guides/self-hosting/kubernetes.mdx b/website/versioned_docs/version-0.4/guides/self-hosting/kubernetes.mdx new file mode 100644 index 00000000..e0a6f180 --- /dev/null +++ b/website/versioned_docs/version-0.4/guides/self-hosting/kubernetes.mdx @@ -0,0 +1,9 @@ +--- +title: Self-host a zrok Instance in Kubernetes +sidebar_label: Kubernetes +sidebar_position: 55 +--- + +The Helm chart for zrok is available from the main OpenZiti charts repo. + +[Link to README in GitHub](https://github.com/openziti/helm-charts/tree/main/charts/zrok#readme) \ No newline at end of file diff --git a/website/versioned_docs/version-0.4/guides/self-hosting/linux/_category_.json b/website/versioned_docs/version-0.4/guides/self-hosting/linux/_category_.json new file mode 100644 index 00000000..b2e94028 --- /dev/null +++ b/website/versioned_docs/version-0.4/guides/self-hosting/linux/_category_.json @@ -0,0 +1,8 @@ +{ + "label": "Linux", + "position": 10, + "link": { + "type": "doc", + "id": "index" + } +} diff --git a/website/versioned_docs/version-0.4/guides/self-hosting/linux/index.mdx b/website/versioned_docs/version-0.4/guides/self-hosting/linux/index.mdx new file mode 100644 index 00000000..1dbc2d04 --- /dev/null +++ b/website/versioned_docs/version-0.4/guides/self-hosting/linux/index.mdx @@ -0,0 +1,334 @@ +--- +sidebar_position: 40 +title: Self-Hosting Guide for Linux +sidebar_label: Linux +--- + +## Walkthrough Video + + + +## Before you Begin + +This will get you up and running with a self-hosted instance of `zrok`. I'll assume you have the following: + +* a Linux server with a public IP +* a wildcard DNS record like `*.zrok.quigley.com` that resolves to the server IP + +## OpenZiti + +OpenZiti (a.k.a. "Ziti") provides secure network backhaul for `zrok` public and private shares. You need a Ziti Controller and a Ziti Router. You can run everything on the same Linux VPS. + + +1. Install the Ziti Controller package by following the [Linux controller deployment guide](https://openziti.io/docs/category/deployments). + 1. Ensure your answer file (`/opt/openziti/etc/controller/bootstrap.env`) has the FQDN of your Linux server and an admin password defined. + 1. Ensure your firewall allows the controller port from the answer file. + 1. Start the controller service (`ziti-controller.service`) and check the status. +1. Log in to the Ziti Controller + + ```bash + ziti edge login localhost:1280 -u admin -p + ``` + +1. Administratively Create a Ziti Router + + ```bash + ziti edge create edge-router "router1" -o /tmp/router1.jwt + ``` + +1. Install the Ziti Router package by following [the Linux router deployment guide](https://openziti.io/docs/category/deployments). + 1. Ensure your answer file (`/opt/openziti/etc/router/bootstrap.env`) has the FQDN of your Linux server for both controller and router addresses and the enrollment token from the previous step. + 1. Ensure your firewall allows the router port from the answer file. + 1. Start the router service (`ziti-router.service`) and check the status. + +1. Verify the new router is online. + + ```bash + ziti edge list edge-routers + ``` + +## Install zrok + +Debian and RPM packages are available for `zrok`. + +```bash +sudo apt install zrok +``` + +Follow [the Linux installation guide](/guides/install/linux.mdx) to install the `zrok` package from the repository or manually install the binary for your platform. + +## Configure the Controller + +Create a `zrok` controller configuration file in `etc/ctrl.yml`. The controller can terminate TLS or you may front the server with a reverse proxy that continually renews the necessary wildcard certificate (e.g., Caddy w/ a DNS provider plugin). This example will expose the non-TLS listener for the controller. + +```yaml +# _____ __ ___ | | __ +# |_ / '__/ _ \| |/ / +# / /| | | (_) | < +# /___|_| \___/|_|\_\ +# controller configuration + +v: 3 + +admin: + # generate these admin tokens from a source of randomness, e.g. + # LC_ALL=C tr -dc _A-Z-a-z-0-9 < /dev/urandom | head -c32 + secrets: + - Q8V0LqnNb5wNX9kE1fgQ0H6VlcvJybB1 # be sure to change this! + +endpoint: + host: 0.0.0.0 + port: 18080 + +invites: + invites_open: true + +store: + path: zrok.db + type: sqlite3 + +ziti: + api_endpoint: "https://127.0.0.1:1280" + username: admin + password: "XO0xHp75uuyeireO2xmmVlK91T7B9fpD" + +# you can use certbot to renew the wildcard cert for the controller with a DNS provider API token or front this `zrok` # controller with Caddy +#tls: +# cert_path: "/Path/To/Cert/zrok.crt" +# key_path: "/Path/To/Cert/zrok.key" + +``` + +The `admin` section defines privileged administrative credentials and must be set in the `ZROK_ADMIN_TOKEN` environment variable in shells where you want to run `zrok admin`. + +The `endpoint` section defines where your `zrok` controller will listen. + +The `store` section defines the local `sqlite3` database used by the controller. + +The `ziti` section defines how the `zrok` controller should communicate with your OpenZiti installation. When using the OpenZiti quickstart, an administrative password will be generated; the `password` in the `ziti` stanza should reflect this password. + +:::note + +Be sure to see the [reference configuration at `etc/ctrl.yml`](../../../../../../etc/ctrl.yml) for the complete documentation of the current configuration file format for the `zrok` controller and service instance components. + +See the separate guides on [configuring metrics](/guides/self-hosting/metrics-and-limits/configuring-metrics.md) and [configuring limits](/guides/self-hosting/metrics-and-limits/configuring-limits.md) for details about both of these specialized areas of service instance configuration. + +::: + +## Environment Variables + +The `zrok` binaries are configured to work with the global `zrok.io` service, and default to using `api.zrok.io` as the endpoint for communicating with the service. + +To work with a self-hosted `zrok` deployment, you'll need to set the `ZROK_API_ENDPOINT` environment variable to point to the address where your `zrok` controller will be listening, according to `endpoint` in the configuration file above. + +In my case, I've set: + +```bash +export ZROK_API_ENDPOINT=http://127.0.0.1:18080 +``` + +[Read more about configuring your self-hosted `zrok` instance](/guides/self-hosting/instance-configuration.mdx). + +## Bootstrap OpenZiti for zrok + +With your OpenZiti network running and your configuration saved to a local file (I refer to mine as `etc/ctrl.yml` in these examples), you're ready to bootstrap the Ziti network. + +Use the `zrok admin bootstrap` command to bootstrap like this: + +```bash +$ zrok admin bootstrap etc/ctrl.yml +[ 0.002] INFO main.(*adminBootstrap).run: { + ... +} +[ 0.002] INFO zrok/controller/store.Open: database connected +[ 0.006] INFO zrok/controller/store.(*Store).migrate: applied 0 migrations +[ 0.006] INFO zrok/controller.Bootstrap: connecting to the ziti edge management api +[ 0.039] INFO zrok/controller.Bootstrap: creating identity for controller ziti access +[ 0.071] INFO zrok/controller.Bootstrap: controller identity: jKd8AINSz +[ 0.082] INFO zrok/controller.assertIdentity: asserted identity 'jKd8AINSz' +[ 0.085] INFO zrok/controller.assertErpForIdentity: asserted erps for 'ctrl' (jKd8AINSz) +[ 0.085] INFO zrok/controller.Bootstrap: creating identity for frontend ziti access +[ 0.118] INFO zrok/controller.Bootstrap: frontend identity: sqJRAINSiB +[ 0.119] INFO zrok/controller.assertIdentity: asserted identity 'sqJRAINSiB' +[ 0.120] INFO zrok/controller.assertErpForIdentity: asserted erps for 'frontend' (sqJRAINSiB) +[ 0.120] WARNING zrok/controller.Bootstrap: missing public frontend for ziti id 'sqJRAINSiB'; please use 'zrok admin create frontend sqJRAINSiB public https://{token}.your.dns.name' to create a frontend instance +[ 0.123] INFO zrok/controller.assertZrokProxyConfigType: found 'zrok.proxy.v1' config type with id '33CyjNbIepkXHN5VzGDA8L' +[ 0.124] INFO zrok/controller.assertMetricsService: creating 'metrics' service +[ 0.126] INFO zrok/controller.assertMetricsService: asserted 'metrics' service (5RpPZZ7T8bZf1ENjwGiPc3) +[ 0.128] INFO zrok/controller.assertMetricsSerp: creating 'metrics' serp +[ 0.130] INFO zrok/controller.assertMetricsSerp: asserted 'metrics' serp +[ 0.134] INFO zrok/controller.assertCtrlMetricsBind: creating 'ctrl-metrics-bind' service policy +[ 0.135] INFO zrok/controller.assertCtrlMetricsBind: asserted 'ctrl-metrics-bind' service policy +[ 0.138] INFO zrok/controller.assertFrontendMetricsDial: creating 'frontend-metrics-dial' service policy +[ 0.140] INFO zrok/controller.assertFrontendMetricsDial: asserted 'frontend-metrics-dial' service policy +[ 0.140] INFO main.(*adminBootstrap).run: bootstrap complete! +``` + +The `zrok admin bootstrap` command configures the `zrok` database, the necessary OpenZiti identities, and all of the OpenZiti policies required to run a `zrok` service. + +Notice this warning: + +``` +[ 0.120] WARNING zrok/controller.Bootstrap: missing public frontend for ziti id 'sqJRAINSiB'; please use 'zrok admin create frontend sqJRAINSiB public https://{token}.your.dns.name' to create a frontend instance +``` + +If you find it necessary to re-run the `zrok admin bootstrap` command, you may need to add the `--skip-frontend` flag to avoid re-creating the default `public` frontend's Ziti identity and router policy. + +## Run zrok Controller + +The `zrok` bootstrap process wants us to create a "public frontend" for our service. `zrok` uses public frontends to allow users to specify where they would like public traffic to ingress from. + +The `zrok admin create frontend` command requires a running `zrok` controller, so let's start that up first: + +```bash +$ zrok controller etc/ctrl.yml +[ 0.003] INFO main.(*controllerCommand).run: { + ... +} +[ 0.016] INFO zrok/controller.inspectZiti: inspecting ziti controller configuration +[ 0.048] INFO zrok/controller.findZrokProxyConfigType: found 'zrok.proxy.v1' config type with id '33CyjNbIepkXHN5VzGDA8L' +[ 0.048] INFO zrok/controller/store.Open: database connected +[ 0.048] INFO zrok/controller/store.(*Store).migrate: applied 0 migrations +[ 0.049] INFO zrok/controller.(*metricsAgent).run: starting +[ 0.064] INFO zrok/rest_server_zrok.setupGlobalMiddleware: configuring +[ 0.064] INFO zrok/ui.StaticBuilder: building +[ 0.065] INFO zrok/rest_server_zrok.(*Server).Logf: Serving zrok at http://[::]:18080 +[ 0.085] INFO zrok/controller.(*metricsAgent).listen: started +``` + +## Create zrok Frontend + +With our `ZROK_ADMIN_TOKEN` and `ZROK_API_ENDPOINT` environment variables set, we can create our public frontend like this: + +```bash +$ zrok admin create frontend sqJRAINSiB public http://{token}.zrok.quigley.com:8080 +[ 0.037] INFO main.(*adminCreateFrontendCommand).run: created global public frontend 'WEirJNHVlcW9' +``` + +The id of the frontend was emitted earlier in by the `zrok` controller when we ran the bootstrap command. If you don't have that log message the you can find the id again with the `ziti` CLI like this: + +```bash +# log in as admin (example) +ziti edge login localhost:1280 -u admin -p XO0xHp75uuyeireO2xmmVlK91T7B9fpD + +# list Ziti identities created by the quickstart and bootstrap +ziti edge list identities +``` + +The id is shown for the frontend identity named "public." + +Nice work! The `zrok` controller is fully configured now that you have created the `zrok` frontend. + +## Configure the Public Frontend + +Create an http frontend configuration file in `etc/http-frontend.yml`. + +```yaml +v: 3 +host_match: zrok.quigley.com +address: 0.0.0.0:8080 +``` + +This frontend config file has a `host_match` pattern that represents the DNS zone you're using with this instance of `zrok`. Incoming HTTP requests with a matching `Host` header will be handled by this frontend. You may also specify the interface address where the frontend will listen for public access requests. + +The frontend does not provide server TLS, but you may front the server with a reverse proxy. The reverse proxy must forward the `Host` header supplied by the viewer. This example will expose the non-TLS listener for the frontend. + +You can also specify an `oauth` configuration in this file, full details of are found in [OAuth Public Frontend Configuration](/guides/self-hosting/oauth/configuring-oauth.md#configuring-your-public-frontend). + +## Start Public Frontend + +In another terminal window, run: + +```bash +$ zrok access public etc/http-frontend.yml +[ 0.002] INFO main.(*accessPublicCommand).run: { + ... +} +[ 0.002] INFO zrok/endpoints/public_frontend.newMetricsAgent: loaded 'public' identity +``` + +The `zrok` frontend uses the `public` identity created during the bootstrap process to securely access zrok backends. to provide public access for the `zrok` deployment. It is expected that the configured listener for this frontend corresponds to the DNS template specified when creating the public frontend record above. + +## Create a User Account + +With our `ZROK_ADMIN_TOKEN` and `ZROK_API_ENDPOINT` environment variables set, we can create our first user account. + +```bash +zrok admin create account +``` + +The output is the account token you will use to enable each device's zrok environment. + +```buttonless title="Example output" +SuGzRPjVDIcF +``` + +## Invite Additional Users + +Offer this onboarding method to your users if you have configured an email-sending service in your `zrok` controller configuration. + +```bash +$ zrok invite +New Email: user@domain.com +Confirm Email: user@domain.com +invitation sent to 'user@domain.com'! +``` + +If you look at the console output from your `zrok` controller, you'll see a message like this: + +``` +[ 238.168] INFO zrok/controller.(*inviteHandler).Handle: account request for 'user@domain.com' has registration token 'U2Ewt1UCn3ql' +``` + +You can access your `zrok` controller's registration UI by pointing a web browser at: + +``` +http://localhost:18080/register/U2Ewt1UCn3ql +``` + +The UI will ask you to set a password for your new account. Go ahead and do that. + +After doing that, I see the following output in my controller console: + +``` +[ 516.778] INFO zrok/controller.(*registerHandler).Handle: created account 'user@domain.com' with token 'SuGzRPjVDIcF' +``` + +Keep track of the token listed above (`SuGzRPjVDIcF`). We'll use this to enable our shell for this `zrok` deployment. + +## Enable Your Environment + +On another device that can reach your Linux server by FQDN, configure the API endpoint and enable the environment with the account token you received when you created the first user account. + +```bash +export ZROK_API_ENDPOINT=https://zrok.quigley.com +# or +zrok config set apiEndpoint https://zrok.quigley.com +``` + +```bash +zrok enable SuGzRPjVDIcF +``` + +```buttonless title="Example output" +zrok environment '2AS1WZ3Sz' enabled for 'SuGzRPjVDIcF' +``` + +```bash +zrok status --secrets +``` + +```buttonless title="Example output" +Config: + + CONFIG VALUE SOURCE + apiEndpoint https://zrok.quigley.com env + +Environment: + + PROPERTY VALUE + Secret Token SuGzRPjVDIcF + Ziti Identity 2AS1WZ3Sz +``` + +Congratulations. You have a working `zrok` environment! diff --git a/website/versioned_docs/version-0.4/guides/self-hosting/linux/nginx.mdx b/website/versioned_docs/version-0.4/guides/self-hosting/linux/nginx.mdx new file mode 100644 index 00000000..427521ea --- /dev/null +++ b/website/versioned_docs/version-0.4/guides/self-hosting/linux/nginx.mdx @@ -0,0 +1,107 @@ +--- +sidebar_position: 50 +sidebar_label: NGINX TLS +--- + +# NGINX Reverse Proxy for zrok + +## Walkthrough Video + + + +## Before You Begin + +I'll assume you have a running `zrok` controller and frontend and wish to front both with NGINX providing server TLS. Go back to [Self-Hosting Guide](/guides/self-hosting/linux/index.mdx) if you still need to spin those up. + +## Choose a Reverse Proxy Address + +I'll use `https://api.zrok.quigley.com:443` in this example, and assume you already set up wildcard DNS like `*.zrok.quigley.com`. This lets us elect `api.zrok.quigley.com` as the controller DNS name, and forward any other incoming requests to the zrok public frontend. + +## Obtain a Wildcard Server Certificate + +You must complete a DNS challenge to obtain a wildcard certificate from Let's Encrypt. I'll assume you know how to create the necessary TXT record in the DNS zone you're using with zrok. + +1. Install certbot: https://eff-certbot.readthedocs.io/en/stable/install.html +2. Run certbot with the manual plugin: https://certbot.eff.org/docs/using.html#manual + + ```bash + # install cert for *.zrok.quigley.com in /etc/letsencrypt + sudo certbot certonly --manual + ```` + +## [Install NGINX](https://www.nginx.com/resources/wiki/start/topics/tutorials/install/) + +## Configure NGINX + +``` +server { + listen 443 ssl; + server_name api.zrok.quigley.com; + ssl_certificate /etc/letsencrypt/live/zrok.quigley.com/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/zrok.quigley.com/privkey.pem; + ssl_protocols TLSv1 TLSv1.1 TLSv1.2; + ssl_ciphers HIGH:!aNULL:!MD5; + + location / { + proxy_pass http://127.0.0.1:18080; + error_log /var/log/nginx/zrok-controller.log; + } + +} + +map $http_upgrade $connection_upgrade { + default keep-alive; + 'websocket' upgrade; + '' close; +} + +server { + listen 443 ssl; + server_name *.zrok.quigley.com; + ssl_certificate /etc/letsencrypt/live/zrok.quigley.com/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/zrok.quigley.com/privkey.pem; + ssl_protocols TLSv1 TLSv1.1 TLSv1.2; + ssl_ciphers HIGH:!aNULL:!MD5; + + location / { + proxy_pass http://127.0.0.1:8080; + proxy_set_header Host $host; + error_log /var/log/nginx/zrok-frontend.log; + proxy_busy_buffers_size 512k; + proxy_buffers 4 512k; + proxy_buffer_size 256k; + + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + } +} +``` + +## Restart NGINX + +Load the new configuration by restarting NGINX. Check the logs to make sure it's happy. + +> Started A high performance web server and a reverse proxy server. + +## Check the Firewall + +If you followed the non-TLS quickstart then you may have opened 8080,108080/tcp in your firewall. You can go ahead and replace those exceptions with 443/tcp because only NGINX needs to be reachable for zrok to function. + +## Update the zrok Frontend + +List available frontends to obtain the token identifier of the frontend named "public". You may need to set `ZROK_ADMIN_TOKEN` or `ZROK_API_ENDPOINT` before running `zrok admin`. + +```bash +$ zrok admin list frontends + + TOKEN ZID PUBLIC NAME URL TEMPLATE CREATED AT UPDATED AT + 2NiDTRYUww18 7DsLh9DXG public http://{token}.zrok.quigley.com:8080 2023-01-19 05:29:20.793 +0000 UTC 2023-01-19 06:17:25 +0000 UTC +``` + +Update the URL template to use NGINX. + +```bash +$ zrok admin update frontend 2NiDTRYUww18 --url-template https://{token}.zrok.quigley.com:443 +[ 0.028] INFO main.(*adminUpdateFrontendCommand).run: updated global frontend '2NiDTRYUww18' +``` diff --git a/website/versioned_docs/version-0.4/guides/self-hosting/metrics-and-limits/_category_.json b/website/versioned_docs/version-0.4/guides/self-hosting/metrics-and-limits/_category_.json new file mode 100644 index 00000000..9d8ba2e1 --- /dev/null +++ b/website/versioned_docs/version-0.4/guides/self-hosting/metrics-and-limits/_category_.json @@ -0,0 +1,7 @@ +{ + "label": "Metrics and Limits", + "position": 60, + "link": { + "type": "generated-index" + } +} diff --git a/website/versioned_docs/version-0.4/guides/self-hosting/metrics-and-limits/configuring-limits.md b/website/versioned_docs/version-0.4/guides/self-hosting/metrics-and-limits/configuring-limits.md new file mode 100644 index 00000000..3c3af05c --- /dev/null +++ b/website/versioned_docs/version-0.4/guides/self-hosting/metrics-and-limits/configuring-limits.md @@ -0,0 +1,210 @@ +--- +sidebar_position: 40 +--- + +# Configuring Limits + +:::note +This guide is current as of zrok version `v0.4.31`. +::: + +:::warning +If you have not yet configured [metrics](configuring-metrics.md), please visit the [metrics guide](configuring-metrics.md) first before working through the limits configuration. +::: + +## Understanding the zrok Limits Agent + +The limits agent is a component of the zrok controller. It can be enabled and configured through the zrok controller configuration. + +The limits agent is responsible for controlling the number of resources in use (environments, shares, etc.) and also for ensuring that accounts are held below the configured data transfer bandwidth thresholds. The limits agent exists to manage resource consumption for larger, multi-user zrok installations. + +### Types of Limits + +Limits can be specified that control the number of environments, shares, reserved shares, unique names, and frontends per-share that can be created by an account. Limits that control the allowed number of resources are called _resource count limits_. + +Limits can be specified to control the amount of data that can be transferred within a time period. Limits that control the amount of data that can be transferred are called _bandwidth limits_. + +zrok limits can be specified _globally_, applying to all users in a service instance. Limit _classes_ can be created to provide additional levels of resource allocation. Limit classes can then be _applied_ to multiple accounts, to alter their limit allocation beyond what's configured in the global configuration. + +## The Global Configuration + +The reference configuration for the zrok controller (found at [`etc/ctrl.yaml`](https://github.com/openziti/zrok/blob/main/etc/ctrl.yml) in the [repository](https://github.com/openziti/zrok)) contains the global limits configuration, which looks like this: + +```yaml +# Service instance limits global configuration. +# +# See `docs/guides/metrics-and-limits/configuring-limits.md` for details. +# +limits: + environments: -1 + shares: -1 + reserved_shares: -1 + unique_names: -1 + share_frontends: -1 + bandwidth: + period: 5m + warning: + rx: -1 + tx: -1 + total: 7242880 + limit: + rx: -1 + tx: -1 + total: 10485760 + enforcing: false + cycle: 5m +``` + +:::note +A value of `-1` appearing in the limits configuration mean the value is _unlimited_. +::: + +The `enforcing` boolean specifies whether or not limits are enabled in the service instance. By default, limits is disabled. No matter what else is configured in this stanza, if `enforcing` is set to `false`, there will be no limits placed on any account in the service instance. + +The `cycle` value controls how frequently the limits agent will evaluate enforced limits. When a user exceeds a limit and has their shares disabled, the limits agent will evaluate their bandwidth usage on this interval looking to "relax" the limit once their usage falls below the threshold. + +### Global Resouce Count Limits + +The `environments`, `shares`, `reserved_shares`, `unique_names`, and `share_frontends` specify the resource count limits, globally for the service instance. + +These resource counts will be applied to all users in the service instance by default. + +### Global Bandwidth Limits + +The `bandwidth` section defines the global bandwidth limits for all users in the service instance. + +There are two levels of bandwidth limits that can be specified in the global configuration. The first limit defines a _warning_ threshold where the user will receive an email that they are using increased data transfer amounts and will ultimately be subject to a limit. If you do not want this warning email to be sent, then configure all of the values to `-1` (unlimited). + +The second limit defines the the actual _limit_ threshold, where the limits agent will disabled traffic for the account's shares. + +Bandwidth limits can be specified in terms of `tx` (or _transmitted_ data), `rx` (or _received_ data), and the `total` bytes that are sent in either direction. If you only want to set the `total` transferred limit, you can set `rx` and `tx` to `-1` (for _unlimited_). You can configure any combination of these these values at either the limit or warning levels. + +The `period` specifies the time window for the bandwidth limit. See the documentation for [`time.Duration.ParseDuration`](https://pkg.go.dev/time#ParseDuration) for details about the format used for these durations. If the `period` is set to 5 minutes, then the limits agent will monitor the transmitted and receivde traffic for the account for the last 5 minutes, and if the amount of data is greater than either the `warning` or the `limit` threshold, action will be taken. + +In the global configuration example above users are allowed to transfer a total of `10485760` bytes in a `5m` period, and they will receive a warning email after they transfer more than `7242880` bytes in a `5m` period. + +## Limit Classes + +The zrok limits agent includes a concept called _limit classes_. Limit classes can be used to define resource count and bandwidth limits that can be selectively applied to individual accounts in a service instance. + +Limit classes are created by creating a record in the `limit_classes` table in the zrok controller database. The table has this schema: + +```sql +CREATE TABLE public.limit_classes ( + id integer NOT NULL, + label VARCHAR(32), + backend_mode public.backend_mode, + environments integer DEFAULT '-1'::integer NOT NULL, + shares integer DEFAULT '-1'::integer NOT NULL, + reserved_shares integer DEFAULT '-1'::integer NOT NULL, + unique_names integer DEFAULT '-1'::integer NOT NULL, + share_frontends integer DEFAULT '-1'::integer NOT NULL, + period_minutes integer DEFAULT 1440 NOT NULL, + rx_bytes bigint DEFAULT '-1'::integer NOT NULL, + tx_bytes bigint DEFAULT '-1'::integer NOT NULL, + total_bytes bigint DEFAULT '-1'::integer NOT NULL, + limit_action public.limit_action DEFAULT 'limit'::public.limit_action NOT NULL, + created_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL, + updated_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted boolean DEFAULT false NOT NULL +); + +``` + +This schema supports constructing the 3 different types of limits classes that the system supports. + +After defining a limit class in the database, it can be applied to specific user accounts (overriding the relevant parts of the global configuration) by inserting a row into the `applied_limit_classes` table: + +```sql +CREATE TABLE public.applied_limit_classes ( + id integer NOT NULL, + account_id integer NOT NULL, + limit_class_id integer NOT NULL, + created_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL, + updated_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP NOT NULL, + deleted boolean DEFAULT false NOT NULL +); +``` + +Create a row in this table linking the `account_id` to the `limit_class_id` to apply the limit class to a specific user account. + +### Unscoped Resource Count Classes + +To support overriding the resource count limits defined in the global limits configuration, a site administrator can create a limit class by inserting a row into the `limit_classes` table structured like this: + +```sql +insert into limit_classes (environments, shares, reserved_shares, unique_names, share_frontends) values (1, 1, 1, 1, 1); +``` + +This creates a limit class that sets the `environments`, `shares`, `reserved_shares`, and `unique_names` all to `1`. + +When this limit class is applied to a user account those values would override the default resource count values configured globally. + +Applying an unscoped resource count class _does not_ affect the bandwidth limits (either globally configured, or via a limit class). + +### Unscoped Bandwidth Classes + +To support overriding the bandwidth limits defined in the global configuration, a site administrator can create a limit class by inserting a row into the `limit_classes` table structured like this: + +```sql +insert into limit_classes (period_minutes, total_bytes, limit_action) values (2, 204800, 'limit'); +``` + +This inserts a limit class that allows for a total bandwidth transfer of `204800` bytes every `2` minutes. + +When this limit class is applied to a user account, those values would override the default bandwidth values configured globally. + +Applying an unscoped bandwidth class _does not_ affect the resource count limits (either globally configured, or via a limit class). + +### Scoped Classes + +A scoped limit class specifies _both_ the resource counts (`shares`, `reserved_shares`, and `unique_names`, but *NOT* `environments`) for a *specific* backend mode. Insert a row like this: + +```sql +insert into limit_classes (backend_mode, shares, reserved_shares, unique_names, period_minutes, total_bytes, limit_action) values ('web', 2, 1, 1, 2, 4096000, 'limit'); +``` + +Scoped limits are designed to _increase_ the limits for a specific backend mode beyond what the global configuration and the unscoped classes provide. The general approach is to use the global configuration and the unscoped classes to provide the general account limits, and then the scoped classes can be used to further increase (or potentially _decrease_) the limits for a specific backend mode. + +If a scoped limit class exists for a specific backend mode, then the limits agent will use that limit in making a decision about limiting the resource count or bandwidth. All other types of shares will fall back to the unscoped classes or the global configuration. + +## Limit Actions + +When an account exceeds a bandwidth limit, the limits agent will seek to limit the affected shares (based on the combination of global configuration, unscoped limit classes, and scoped limit classes). It applies the limit by removing the underlying OpenZiti dial policies for any frontends that are trying to access the share. + +This means that public frontends will simply return a `404` as if the share is no longer there. Private frontends will also return `404` errors. When the limit is relaxed, the dial policies are put back in place and the share will continue operating normally. + +## Unlimited Accounts + +The `accounts` table in the database includes a `limitless` column. When this column is set to `true` the account is not subject to any of the limits in the system. + +## Experimental Limits Locking + +zrok versions prior to `v0.4.31` had a potential race condition when enforcing resource count limits. This usually only manifested in cases where shares or environments were being allocated programmatically (and fast enough to win the limits race). + +This occurs due to a lack of transactional database locking around the limited structures. `v0.4.31` includes a pessimistic locking facility that can be enabled _only_ on the PostgreSQL store implemention. + +If you're running PostgreSQL for your service instance and you want to enable the new experimental locking facility that eliminates the potential resource count race condition, add the `enable_locking: true` flag to your `store` definition: + +```yaml +store: + enable_locking: true +``` + +## Caveats + +There are a number of caveats that are important to understand when using the limits agent with more complicated limits scenarios: + +### Aggregate Bandwidth + +The zrok limits agent is a work in progress. The system currently does not track bandwidth individually for each backend mode type, which means all bandwidth values are aggregated between all of the share types that an account might be using. This will likely change in an upcoming release. + +### Administration Through SQL + +There are currently no administrative API endpoints (or corresponding CLI tools) to support creating and applying limit classes in the current release. The limits agent infrastructure was designed to support software integrations that directly manipulate the underlying database structures. + +A future release may provide API and CLI tooling to support the human administration of the limits agent. + +### Performance + +Be sure to minimize the number of different periods used for specifying bandwidth limits. Specifying limits in multiple different periods can cause a multiplicity of queries to be executed against the metrics store (InfluxDB). Standardizing on a period like `24h` or `6h` and using that consistently is the best way to to manage the performance of the metrics store. \ No newline at end of file diff --git a/website/versioned_docs/version-0.4/guides/self-hosting/metrics-and-limits/configuring-metrics.md b/website/versioned_docs/version-0.4/guides/self-hosting/metrics-and-limits/configuring-metrics.md new file mode 100644 index 00000000..5d7f8fa1 --- /dev/null +++ b/website/versioned_docs/version-0.4/guides/self-hosting/metrics-and-limits/configuring-metrics.md @@ -0,0 +1,120 @@ +--- +sidebar_position: 20 +--- + +# Configuring Metrics + +A fully configured, production-scale `zrok` service instance looks like this: + +![zrok Metrics Architecture](images/metrics-architecture.png) + +`zrok` metrics builds on top of the `fabric.usage` event type from OpenZiti. The OpenZiti controller has a number of way to emit events. The `zrok` controller has several ways to consume `fabric.usage` events. Smaller installations could be configured in these ways: + +![zrok simplified metrics architecture](images/metrics-architecture-simple.png) + +Environments that horizontally scale the `zrok` control plane with multiple controllers should use an AMQP-based queue to "fan out" the metrics workload across the entire control plane. Simpler installations that use a single `zrok` controller can collect `fabric.usage` events from the OpenZiti controller by "tailing" the events log file, or collecting them from the OpenZiti controller's websocket implementation. + +## Configuring the OpenZiti Controller + +> This requires a version of OpenZiti with a `fabric` dependency of `v0.22.52` or newer, which is satisfed by the `v0.27.6` release of OpenZiti Controller. + +Emitting `fabric.usage` events to a file is currently the most reliable mechanism to capture usage events into `zrok`. We're going to configure the OpenZiti controller to append `fabric.usage` events to a file, by adding this stanza to the OpenZiti controller configuration: + +```yaml +events: + jsonLogger: + subscriptions: + - type: fabric.usage + version: 3 + handler: + type: file + format: json + path: /tmp/fabric-usage.json +``` + +You'll want to adjust the `events/jsonLogger/handler/path` to wherever you would like to send these events for ingestion into `zrok`. There are additional OpenZiti options that control file rotation. Be sure to consult the OpenZiti docs to tune these settings to be appropriate for your environment. + +By default, the OpenZiti events infrastructure reports and batches events in 1 minute buckets. 1 minute is too large of an interval to provide a snappy `zrok` metrics experience. So, let's increase the frequency to every 5 seconds. Add this to the `network` stanza of your OpenZiti controller's configuration: + +```yaml +network: + intervalAgeThreshold: 5s + metricsReportInterval: 5s +``` + +And you'll want to add this stanza to the tail-end of the router configuration for every router on your OpenZiti network: + +```yaml +metrics: + reportInterval: 5s + intervalAgeThreshold: 5s +``` + +Be sure to restart all of the components of your OpenZiti network after making these configuration changes. + +## Configuring the zrok Metrics Bridge + +`zrok` currently uses a "metrics bridge" component (running as a separate process) to consume the `fabric.usage` events from the OpenZiti controller, and publish them onto an AMQP queue. Add a stanza like the following to your `zrok` controller configuration: + +```yaml +bridge: + source: + type: fileSource + path: /tmp/fabric-usage.json + sink: + type: amqpSink + url: amqp://guest:guest@localhost:5672 + queue_name: events +``` + +This configuration consumes the `fabric.usage` events from the file we previously specified in our OpenZiti controller configuration, and publishes them onto an AMQP queue. + +### RabbitMQ + +For this example, we're going to use RabbitMQ as our AMQP implementation. The stock, default RabbitMQ configuration, launched as a `docker` container will work just fine: + +``` +$ docker run -it --rm --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3.11-management +``` + +Once RabbitMQ is running, you can start the `zrok` metrics bridge by pointing it at your `zrok` controller configuration, like this: + +``` +$ zrok ctrl metrics bridge +``` + +## Configuring zrok Metrics + +Configure the `metrics` section of your `zrok` controller. Here is an example: + +```yaml +metrics: + agent: + source: + type: amqpSource + url: amqp://guest:guest@localhost:5672 + queue_name: events + influx: + url: "http://127.0.0.1:8086" + bucket: zrok # the bucket and org must be + org: zrok # created in advance in InfluxDB + token: "" +``` + +This configures the `zrok` controller to consume usage events from the AMQP queue, and configures the InfluxDB metrics store. The InfluxDB organization and bucket must be created in advance. The `zrok` controller will not create these for you. + +## Testing Metrics + +With all of the components configured and running, either use `zrok test loop` or manually create share(s) to generate traffic on the `zrok` instance. If everything is working correctly, you should see log messages from the controller like the following, which indicate that that the controller is processing OpenZiti usage events, and generating `zrok` metrics: + +``` +[5339.658] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 736z80mr4syu, circuit: Ad1V-6y48 backend {rx: 4.5 kB, tx: 4.6 kB} frontend {rx: 4.6 kB, tx: 4.5 kB} +[5349.652] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 736z80mr4syu, circuit: Ad1V-6y48 backend {rx: 2.5 kB, tx: 2.6 kB} frontend {rx: 2.6 kB, tx: 2.5 kB} +[5354.657] INFO zrok/controller/metrics.(*influxWriter).Handle: share: 5a4u7lqxb7pa, circuit: iG1--6H4S backend {rx: 13.2 kB, tx: 13.3 kB} frontend {rx: 13.3 kB, tx: 13.2 kB} +``` + +The `zrok` web console should also be showing activity for your share(s) like the following: + +![zrok web console activity](images/zrok-console-activity.png) + +With metrics configured, you might be interested in [configuring limits](configuring-limits.md). \ No newline at end of file diff --git a/website/versioned_docs/version-0.4/guides/self-hosting/metrics-and-limits/images/metrics-architecture-simple.drawio b/website/versioned_docs/version-0.4/guides/self-hosting/metrics-and-limits/images/metrics-architecture-simple.drawio new file mode 100644 index 00000000..2661aed5 --- /dev/null +++ b/website/versioned_docs/version-0.4/guides/self-hosting/metrics-and-limits/images/metrics-architecture-simple.drawio @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/website/versioned_docs/version-0.4/guides/self-hosting/metrics-and-limits/images/metrics-architecture-simple.png b/website/versioned_docs/version-0.4/guides/self-hosting/metrics-and-limits/images/metrics-architecture-simple.png new file mode 100644 index 00000000..ca9fdf41 Binary files /dev/null and b/website/versioned_docs/version-0.4/guides/self-hosting/metrics-and-limits/images/metrics-architecture-simple.png differ diff --git a/website/versioned_docs/version-0.4/guides/self-hosting/metrics-and-limits/images/metrics-architecture.drawio b/website/versioned_docs/version-0.4/guides/self-hosting/metrics-and-limits/images/metrics-architecture.drawio new file mode 100644 index 00000000..13a39db8 --- /dev/null +++ b/website/versioned_docs/version-0.4/guides/self-hosting/metrics-and-limits/images/metrics-architecture.drawio @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/website/versioned_docs/version-0.4/guides/self-hosting/metrics-and-limits/images/metrics-architecture.png b/website/versioned_docs/version-0.4/guides/self-hosting/metrics-and-limits/images/metrics-architecture.png new file mode 100644 index 00000000..063c33a7 Binary files /dev/null and b/website/versioned_docs/version-0.4/guides/self-hosting/metrics-and-limits/images/metrics-architecture.png differ diff --git a/website/versioned_docs/version-0.4/guides/self-hosting/metrics-and-limits/images/zrok-console-activity.png b/website/versioned_docs/version-0.4/guides/self-hosting/metrics-and-limits/images/zrok-console-activity.png new file mode 100755 index 00000000..376811a2 Binary files /dev/null and b/website/versioned_docs/version-0.4/guides/self-hosting/metrics-and-limits/images/zrok-console-activity.png differ diff --git a/website/versioned_docs/version-0.4/guides/self-hosting/oauth/_category_.json b/website/versioned_docs/version-0.4/guides/self-hosting/oauth/_category_.json new file mode 100644 index 00000000..10219e16 --- /dev/null +++ b/website/versioned_docs/version-0.4/guides/self-hosting/oauth/_category_.json @@ -0,0 +1,7 @@ +{ + "label": "OAuth", + "position": 70, + "link": { + "type": "generated-index" + } +} diff --git a/website/versioned_docs/version-0.4/guides/self-hosting/oauth/configuring-oauth.md b/website/versioned_docs/version-0.4/guides/self-hosting/oauth/configuring-oauth.md new file mode 100644 index 00000000..f51283ac --- /dev/null +++ b/website/versioned_docs/version-0.4/guides/self-hosting/oauth/configuring-oauth.md @@ -0,0 +1,156 @@ +# OAuth Public Frontend Configuration + +As of `v0.4.7`, `zrok` includes OAuth integration for both Google and GitHub for `zrok access public` public frontends. + +This integration allows you to create public shares and request that the public frontend authenticate your users against either the Google or GitHub OAuth endpoints (using the user's Google or GitHub accounts). Additionally, you can restrict the email address domain associated with the count to a list of domains that you provide when you create the share. + +This is a first step towards a more comprehensive portfolio of user authentication strategies in future `zrok` releases. + +## Planning for the OAuth Frontend + +The current implementation of the OAuth public frontend uses a HTTP listener to handle redirects from OAuth providers. You'll need to configure a DNS name and a port for this listener that is accessible by your end users. We'll refer to this listener as the "OAuth frontend" in this guide. + +We'll use the public DNS address of the OAuth frontend when creating the Google and GitHub OAuth clients below. This address is typically configured into these clients as the "redirect URL" where these clients will send the authenticated users after authentication. + +The `zrok` OAuth frontend will capture the successful authentication and forward the user back to their original destination. + +## Configuring a Google OAuth Client ID + +### OAuth Content Screen + +Before you can configure an OAuth Client ID in Google Cloud, you have to configure the "OAuth content screen". + +In the Google Cloud console, navigate to: `APIs & Services > Credentials > OAuth content screen` + +![](images/google_oauth_content_screen_2.png) + +Here you can give your `zrok` public frontend an identity and branding to match your deployment. + +![](images/google_oauth_content_screen_3.png) + +Describe what domains are authorized to access your public frontend and establish contact information. + +![](images/google_oauth_content_screen_4.png) + +Add a non-sensitive scope for `../auth/userinfo.email`. This is important as it allows the `zrok` OAuth frontend to receive the email address of the authenticated user. + +![](images/google_oauth_content_screen_5.png) + +![](images/google_oauth_content_screen_6.png) + +Now your OAuth content screen is configured. + +### Create the OAuth 2.0 Client ID + +Next we create the OAuth Client ID for your public frontend. + +In the Google Cloud Console, navigate to: `APIs & Services > Credentials > + Create Credentials` + +![](images/google_create_credentials_1.png) + +Select `OAuth client ID` from the `+ Create Credentials` dropdown. + +![](images/google_create_credentials_2.png) + +Application type is `Web Application`. + +![](images/google_create_credentials_3.png) + +The most important bit here is the "Authorized redirect URIs". You're going to want to put a URL here that matches the `zrok` OAuth frontend address that you configured at the start of this guide, but at the end of the URL you're going to append `/google/oauth` to the URL. + +![](images/google_create_credentials_4.png) + +Save the client ID and the client secret. You'll configure these into your `frontend.yml`. + +With this your Google OAuth client should be configured and ready. + +## Configuring a GitHub Client ID + +Register a new OAuth application through the GitHub settings for the account that owns the application. + +Navigate to:`Settings > Developer Settings > OAuth Apps > Register a new application` + +![](images/github_create_oauth_application_1.png) + +![](images/github_create_oauth_application_2.png) + +The "Authorized callback URL" should be configured to match the OAuth frontend address you configured at the start of this guide, with `/github/oauth` appended to the end. + +![](images/github_create_oauth_application_3.png) + +Create a new client secret. + +![](images/github_create_oauth_application_4.png) + +Save the client ID and the client secret. You'll configure these into your `frontend.yml`. + +## Configuring your Public Frontend + +The public frontend configuration includes a new `oauth` section: + +```yaml +oauth: + bind_address: 0.0.0.0:8181 + redirect_url: https://oauth.zrok.io + cookie_domain: zrok.io + hash_key: "the quick brown fox jumped over the lazy dog" + providers: + - name: google + client_id: "" + client_secret: "" + - name: github + client_id: "" + client_secret: "" + +``` + +The `bind_address` parameter determines where the OAuth frontend will bind. Should be in `ip:port` format. + +The `redirect_url` parameter determines the base URL where OAuth frontend requests will be redirected. + +`cookie_domain` is the domain where authentication cookies should be stored. + +`hash_key` is a unique string for your installation that is used to secure the authentication payloads for your public frontend. + +`providers` is a list of configured providers for this public frontend. The current implementation supports `google` and `github` as options. + +Both the `google` and `github` providers accept a `client_id` and `client_secret` parameter. These values are provided when you configure the OAuth clients at Google or GitHub. + +## Enabling OAuth on a Public Share + +With your public frontend configured to support OAuth, you can test this by creating a public share. There are new command line options to support this: + +```text +$ zrok share public --help +Share a target resource publicly + +Usage: + zrok share public [flags] + +Flags: + -b, --backend-mode string The backend mode {proxy, web, caddy, drive} (default "proxy") + --basic-auth stringArray Basic authentication users (,...) + --frontends stringArray Selected frontends to use for the share (default [public]) + --headless Disable TUI and run headless + -h, --help help for public + --insecure Enable insecure TLS certificate validation for + --oauth-check-interval duration Maximum lifetime for OAuth authentication; reauthenticate after expiry (default 3h0m0s) + --oauth-email-address-patterns stringArray Allow only these email domain globs to authenticate via OAuth + --oauth-provider string Enable OAuth provider [google, github] + +Global Flags: + -p, --panic Panic instead of showing pretty errors + -v, --verbose Enable verbose logging +``` + +The `--oauth-provider` flag enables OAuth for the share using the specified provider. + +The `--oauth-email-address-patterns` flag accepts a single glob pattern that matches an authenticated email address that is allowed to access the share. Use this flag multiple times to allow different patterns. + +The `--oauth-check-interval` flag specifies how frequently the authentication must be checked. + +An example public share: + +```text +zrok share public --backend-mode web --oauth-provider github --oauth-email-address-patterns '*@zrok.io' ~/public +``` diff --git a/website/versioned_docs/version-0.4/guides/self-hosting/oauth/images/github_create_oauth_application_1.png b/website/versioned_docs/version-0.4/guides/self-hosting/oauth/images/github_create_oauth_application_1.png new file mode 100755 index 00000000..3db1a56b Binary files /dev/null and b/website/versioned_docs/version-0.4/guides/self-hosting/oauth/images/github_create_oauth_application_1.png differ diff --git a/website/versioned_docs/version-0.4/guides/self-hosting/oauth/images/github_create_oauth_application_2.png b/website/versioned_docs/version-0.4/guides/self-hosting/oauth/images/github_create_oauth_application_2.png new file mode 100755 index 00000000..21301615 Binary files /dev/null and b/website/versioned_docs/version-0.4/guides/self-hosting/oauth/images/github_create_oauth_application_2.png differ diff --git a/website/versioned_docs/version-0.4/guides/self-hosting/oauth/images/github_create_oauth_application_3.png b/website/versioned_docs/version-0.4/guides/self-hosting/oauth/images/github_create_oauth_application_3.png new file mode 100755 index 00000000..ec9066d0 Binary files /dev/null and b/website/versioned_docs/version-0.4/guides/self-hosting/oauth/images/github_create_oauth_application_3.png differ diff --git a/website/versioned_docs/version-0.4/guides/self-hosting/oauth/images/github_create_oauth_application_4.png b/website/versioned_docs/version-0.4/guides/self-hosting/oauth/images/github_create_oauth_application_4.png new file mode 100755 index 00000000..9a423125 Binary files /dev/null and b/website/versioned_docs/version-0.4/guides/self-hosting/oauth/images/github_create_oauth_application_4.png differ diff --git a/website/versioned_docs/version-0.4/guides/self-hosting/oauth/images/github_create_oauth_application_5.png b/website/versioned_docs/version-0.4/guides/self-hosting/oauth/images/github_create_oauth_application_5.png new file mode 100755 index 00000000..29f20011 Binary files /dev/null and b/website/versioned_docs/version-0.4/guides/self-hosting/oauth/images/github_create_oauth_application_5.png differ diff --git a/website/versioned_docs/version-0.4/guides/self-hosting/oauth/images/google_create_credentials_1.png b/website/versioned_docs/version-0.4/guides/self-hosting/oauth/images/google_create_credentials_1.png new file mode 100755 index 00000000..29acfc01 Binary files /dev/null and b/website/versioned_docs/version-0.4/guides/self-hosting/oauth/images/google_create_credentials_1.png differ diff --git a/website/versioned_docs/version-0.4/guides/self-hosting/oauth/images/google_create_credentials_2.png b/website/versioned_docs/version-0.4/guides/self-hosting/oauth/images/google_create_credentials_2.png new file mode 100755 index 00000000..5f2eec04 Binary files /dev/null and b/website/versioned_docs/version-0.4/guides/self-hosting/oauth/images/google_create_credentials_2.png differ diff --git a/website/versioned_docs/version-0.4/guides/self-hosting/oauth/images/google_create_credentials_3.png b/website/versioned_docs/version-0.4/guides/self-hosting/oauth/images/google_create_credentials_3.png new file mode 100755 index 00000000..c6de679c Binary files /dev/null and b/website/versioned_docs/version-0.4/guides/self-hosting/oauth/images/google_create_credentials_3.png differ diff --git a/website/versioned_docs/version-0.4/guides/self-hosting/oauth/images/google_create_credentials_4.png b/website/versioned_docs/version-0.4/guides/self-hosting/oauth/images/google_create_credentials_4.png new file mode 100755 index 00000000..b946be96 Binary files /dev/null and b/website/versioned_docs/version-0.4/guides/self-hosting/oauth/images/google_create_credentials_4.png differ diff --git a/website/versioned_docs/version-0.4/guides/self-hosting/oauth/images/google_oauth_content_screen_1.png b/website/versioned_docs/version-0.4/guides/self-hosting/oauth/images/google_oauth_content_screen_1.png new file mode 100755 index 00000000..b0fb0101 Binary files /dev/null and b/website/versioned_docs/version-0.4/guides/self-hosting/oauth/images/google_oauth_content_screen_1.png differ diff --git a/website/versioned_docs/version-0.4/guides/self-hosting/oauth/images/google_oauth_content_screen_2.png b/website/versioned_docs/version-0.4/guides/self-hosting/oauth/images/google_oauth_content_screen_2.png new file mode 100755 index 00000000..0608b599 Binary files /dev/null and b/website/versioned_docs/version-0.4/guides/self-hosting/oauth/images/google_oauth_content_screen_2.png differ diff --git a/website/versioned_docs/version-0.4/guides/self-hosting/oauth/images/google_oauth_content_screen_3.png b/website/versioned_docs/version-0.4/guides/self-hosting/oauth/images/google_oauth_content_screen_3.png new file mode 100755 index 00000000..cac72036 Binary files /dev/null and b/website/versioned_docs/version-0.4/guides/self-hosting/oauth/images/google_oauth_content_screen_3.png differ diff --git a/website/versioned_docs/version-0.4/guides/self-hosting/oauth/images/google_oauth_content_screen_4.png b/website/versioned_docs/version-0.4/guides/self-hosting/oauth/images/google_oauth_content_screen_4.png new file mode 100755 index 00000000..3299d21a Binary files /dev/null and b/website/versioned_docs/version-0.4/guides/self-hosting/oauth/images/google_oauth_content_screen_4.png differ diff --git a/website/versioned_docs/version-0.4/guides/self-hosting/oauth/images/google_oauth_content_screen_5.png b/website/versioned_docs/version-0.4/guides/self-hosting/oauth/images/google_oauth_content_screen_5.png new file mode 100755 index 00000000..f2975d8c Binary files /dev/null and b/website/versioned_docs/version-0.4/guides/self-hosting/oauth/images/google_oauth_content_screen_5.png differ diff --git a/website/versioned_docs/version-0.4/guides/self-hosting/oauth/images/google_oauth_content_screen_6.png b/website/versioned_docs/version-0.4/guides/self-hosting/oauth/images/google_oauth_content_screen_6.png new file mode 100755 index 00000000..8b993442 Binary files /dev/null and b/website/versioned_docs/version-0.4/guides/self-hosting/oauth/images/google_oauth_content_screen_6.png differ diff --git a/website/versioned_docs/version-0.4/guides/self-hosting/organizations.md b/website/versioned_docs/version-0.4/guides/self-hosting/organizations.md new file mode 100644 index 00000000..f67b215a --- /dev/null +++ b/website/versioned_docs/version-0.4/guides/self-hosting/organizations.md @@ -0,0 +1,145 @@ +--- +sidebar_position: 21 +sidebar_label: Organizations +--- + +# Organizations + +zrok (starting with `v0.4.45`) includes support for "organizations". Organizations are groups of related accounts that are typically centrally managed in some capacity. A zrok account can be a member of multiple organizations. Organization membership can also include an "admin" permission. As of `v0.4.45` organization admins are able to retrieve an "overview" (`zrok overview`) from any other account in the organization, allowing the admin to see the details of the environments, shares, and accesses created within that account. + +Future zrok releases will include additional organization features, including `--closed` permission sharing functions. + +## Configuring an Organization + +The API endpoints used to manage organizations and their members require a site-level `ZROK_ADMIN_TOKEN` to access. See the [self-hosting guide](linux/index.mdx#configure-the-controller) for details on configuring admin tokens. + +### Create an Organization + +The `zrok admin create organization` command is used to create organizations: + +``` +$ zrok admin create organization --help +Create a new organization + +Usage: + zrok admin create organization [flags] + +Aliases: + organization, org + +Flags: + -d, --description string Organization description + -h, --help help for organization + +Global Flags: + -p, --panic Panic instead of showing pretty errors + -v, --verbose Enable verbose logging +``` + +Use the `-d` flag to add a description that shows up in end-user membership listings. + +We'll create an example organization: + +``` +$ zrok admin create organization -d "documentation" +[ 0.006] INFO main.(*adminCreateOrganizationCommand).run: created new organization with token 'gK1XRvthq7ci' +``` + +### List Organizations + +We use the `zrok admin list organizations` command to list our organizations: + +``` +$ zrok admin list organizations + + ORGANIZATION TOKEN DESCRIPTION + gK1XRvthq7ci documentation +``` + +### Add a Member to an Organization + +We use the `zrok admin create org-member` command to add members to organizations: + +``` +$ zrok admin create org-member +Error: accepts 2 arg(s), received 0 +Usage: + zrok admin create org-member [flags] + +Aliases: + org-member, member + +Flags: + --admin Make the new account an admin of the organization + -h, --help help for org-member + +Global Flags: + -p, --panic Panic instead of showing pretty errors + -v, --verbose Enable verbose logging +``` + +Like this: + +``` +$ zrok admin create org-member gK1XRvthq7ci michael.quigley@netfoundry.io +[ 0.006] INFO main.(*adminCreateOrgMemberCommand).run: added 'michael.quigley@netfoundry.io' to organization 'gK1XRvthq7ci +``` + +The `--admin` flag can be added to the `zrok admin create org-member` command to mark the member as an administrator of the organization. + +### List Members of an Organization + +``` +$ zrok admin list org-members gK1XRvthq7ci + + ACCOUNT EMAIL ADMIN? + michael.quigley@netfoundry.io false +``` + +### Removing Organizations and Members + +The `zrok admin delete org-member` and `zrok admin delete organization` commands are available to clean up organizations and their membership lists. + +## End-user Organization Administrator Commands + +When a zrok account is added to an organization as an administrator it allows them to use the `zrok organization admin` commands, which include: + +``` +$ zrok organization admin +Organization admin commands + +Usage: + zrok organization admin [command] + +Available Commands: + list List the members of an organization + overview Retrieve account overview for organization member account + +Flags: + -h, --help help for admin + +Global Flags: + -p, --panic Panic instead of showing pretty errors + -v, --verbose Enable verbose logging + +Use "zrok organization admin [command] --help" for more information about a command. +``` + +The `zrok organization admin list` command is used to list the members of an organization. + +The `zrok organization admin overview` command is used to retrieve an overview of an organization member account. This is functionally equivalent to what the `zrok overview` command does, but it allows an organization admin to retrieve the overview for another zrok account. + +## End-user Organization Commands + +All zrok accounts can use the `zrok organization memberships` command to list the organizations they're a member of: + +``` +$ zrok organization memberships + + ORGANIZATION TOKEN DESCRIPTION ADMIN? + gK1XRvthq7ci documentation false + +``` + + + diff --git a/website/versioned_docs/version-0.4/guides/self-hosting/personalized-frontend.md b/website/versioned_docs/version-0.4/guides/self-hosting/personalized-frontend.md new file mode 100644 index 00000000..7dc20a2a --- /dev/null +++ b/website/versioned_docs/version-0.4/guides/self-hosting/personalized-frontend.md @@ -0,0 +1,73 @@ +--- +title: Personalized Frontend +sidebar_label: Personalized Frontend +sidebar_position: 22 +--- + +This guide describes an approach that enables a zrok user to use a hosted, shared instance (zrok.io) and configure their own personalized frontend, which enables custom DNS and TLS for their shares. + +In order to accomplish this, the user will need to provide their own minimal VPS instance, or container hosting. The size and capacity of these resources will be entirely dependent on the workload that they will be used to service. But generally, for most modest workloads, the most inexpensive VPS option will suffice. + +This approach gives you complete control over the way that your shares are exposed publicly. This approach works for HTTPS shares, and also for TCP and UDP ports, allowing you to put all of these things onto the public internet, while maintaining strong security for your protected resources. + +This guide isn't a detailed _how to_ with specific steps to follow. This is more of a description of the overall concept. You'll want to figure out your own specific steps to implement this style of deployment in your own environment. + +## Overview + +Let's imagine a hypothetical scenario where you've got 3 different resources shared using zrok. We'll refer to these as `A`, `B`, and `C`. Both `A` and `B` are shares using the `proxy` backend mode, which are used to share private HTTPS resources. Share `C` uses the `tcpTunnel` backend to expose a listening port from a private server (like a game server, or a message queue). + +We're using the shared zrok instance at zrok.io to provide our secure sharing infrastructure. + +Our deployment will end up looking like this: + +![personalized-frontend-1](../../images/personalized-frontend-1.png) + +We're using `zrok reserve` to create the `A`, `B`, and `C` shares as reserved shares (using the `--unique-name` option to give them specific names). These shares could be located together in a single environment on a single host, or can be located at completely different spots on the planet on completely different hosts. You could want to use significantly more shares than 3, or less. The secure sharing fabric allows seamless secure connectivity for these shared resources. This implementation will scale up or down as needed (use multiple hosts behind a load balancer for really big workloads). + +Because we're using `private` zrok shares, they'll need to be accessed using a corresponding `zrok access` private command. The `zrok access private` command binds a "network listener" where the share can be accessed on an address and port on the host where the command is executed. You can use `zrok access private` to bind a network listener for a share in as many places as you want (up to the limit configuration of the service). + +:::note +When you use `zrok share public`, you are allowing your shared resources to be accessed using the shared, public frontend provided by the service instance (zrok.io). `zrok share private` (or `zrok reserve`/`zrok share reserved`) creates the same kind of share, but does not provision the shared public frontend, and you'll need to use `zrok access private` in order to _bind_ that share to a network address where it can be accessed. +::: + +Imagine that we own the domain `example.com`. In our example, we want to expose our HTTPS shares `A` and `B` as `a.example.com` and `b.example.com`. And maybe our `C` share represents a gaming server that we want to expose as `gaming.example.com:25565`. + +We can accomplish this easily with cheap VPS instance. You could also do it with containers through a container hosting service. The VPS will need an IP address exposed to the internet. You'll also need to be able to create DNS entries for the `example.com` domain. + +To accomplish this, we're going to run 3 separate `zrok access private` commands on our VPS (see the [frontdoor guide](../../frontdoor/), or [zrok-private-access Docker Compose guide](../../docker-share/docker_private_share_guide/#access-the-private-share) for details on an approach for setting this up). One command each for shares `A`, `B`, and `C`. The `zrok access private` command works like this: + +``` +$ zrok access private +Error: accepts 1 arg(s), received 0 +Usage: + zrok access private [flags] + +Flags: + -b, --bind string The address to bind the private frontend (default "127.0.0.1:9191") + --headless Disable TUI and run headless + -h, --help help for private + +Global Flags: + -p, --panic Panic instead of showing pretty errors + -v, --verbose Enable verbose logging +``` + +Notice the `--bind` flag. That flag is used to bind a network listener to a specific IP address and port on the host we're accessing the shares from. In this case, imagine our VPS node has a public IP address of `1.2.3.4` and a loopback (`127.0.0.1`). + +To expose our HTTPS shares, we're going to use a reverse proxy like nginx. The reverse proxy will be exposed to the internet, terminating TLS and reverse proxying `a.example.com` and `b.example.com` to the network listeners for shares `A` and `B`. + +So, we'll configure our VPS to persistently launch a `zrok access private` for both of these shares. We'll use the `--bind` flag to bind `A` to `127.0.0.1:9191` and `B` to `127.0.0.1:9192`. + +We'll then configure nginx to have a virtual host for `a.example.com`, proxying that to `127.0.0.1:9191` and `b.example.com`, proxying that to `127.0.0.1:9192`. + +Exposing our TCP port for `gaming.example.com` is simply a matter of running a third `zrok access private` with a `--bind` flag configured to point to `1.2.3.4:25565`. + +Once you've created the appropriate DNS entries for `a.example.com`, `b.example.com`, and `gaming.example.com` and worked through the TLS configuration (letsencrypt is your friend here), you'll have a fully functional personalized frontend for your zrok shares that you control. + +Your protected resources remain disconnected from the internet and are only reachable through your personalized endpoint. + +## Privacy + +When you use a public frontend (with a simple `zrok share public`) at a hosted zrok instance (like zrok.io), the operators of that service have some amount of visibility into what traffic you're sending to your shares. The load balancers in front of the public frontend maintain logs describing all of the URLs that were accessed, as well as other information (headers, etc.) that contain information about the resource you're sharing. + +If you create private shares using `zrok share private` and then run your own `zrok access private` from some other location, the operators of the zrok service instance only know that some amount of data moved between the environment running the `zrok share private` and the `zrok access private`. There is no other information available. diff --git a/website/versioned_docs/version-0.4/guides/self-hosting/self-service-invite.mdx b/website/versioned_docs/version-0.4/guides/self-hosting/self-service-invite.mdx new file mode 100644 index 00000000..42c23dfd --- /dev/null +++ b/website/versioned_docs/version-0.4/guides/self-hosting/self-service-invite.mdx @@ -0,0 +1,54 @@ +--- +title: Invitations +--- + +This is how to set up self-service invitations for your users to get an account on your self-hosted zrok instance. + +## Overview + +- You can create user accounts directly with the `zrok admin create account` CLI or API instead of inviting them. +- You can welcome users to invite themselves via email. +- To enable self-service invitations you must also configure the controller to send email. +- You can require an invitation token if you want to restrict self-service. + +## The Self-Service User Experience + +This is what your users will do. + +```bash +zrok invite +``` + +```buttonless title="Output" +enter and confirm your email address... + +> user@domain.com +> user@domain.com + +[ Submit ] + +invitation sent to 'user@domain.com'! +``` + +## How it Works + +The `zrok invite` command presents a small form that allows you to enter (and then confirm) your email address. Tabbing to the `[ Submit ]` button will start the invitation process. + +Next, check the email where you sent the invite. You should receive a message asking you to click a link to create your `zrok` account. When you click that link, you will be brought to a web page that will allow you to set a password for your new account. + +![Enter a Password](/zrok_verify.png) + +Enter a password and its confirmation, and click the `Register Account` button. You'll see the following: + +![Successful Registration](/zrok_registration_success.png) + +For now, we'll ignore the "enable your shell for zrok" section. Just click the `zrok web portal` link: + +![Web Login](/zrok_web_login.png) + +After clicking the `Log In` button, you'll be brought into the `zrok` _web console_: + +![Web Console; Empty](/zrok_web_console_empty.png) + +Congratulations! Your `zrok` account is ready to go! + diff --git a/website/versioned_docs/version-0.4/guides/vpn/vpn-share.png b/website/versioned_docs/version-0.4/guides/vpn/vpn-share.png new file mode 100644 index 00000000..35bdefb7 Binary files /dev/null and b/website/versioned_docs/version-0.4/guides/vpn/vpn-share.png differ diff --git a/website/versioned_docs/version-0.4/guides/vpn/vpn.md b/website/versioned_docs/version-0.4/guides/vpn/vpn.md new file mode 100644 index 00000000..3d0755ab --- /dev/null +++ b/website/versioned_docs/version-0.4/guides/vpn/vpn.md @@ -0,0 +1,131 @@ +--- +sidebar_label: VPN +--- + +# zrok VPN Guide + +zrok VPN backend allows for simple host-to-host VPN setup. + +## Operating System Requirements + +zrok VPN requires elevated privileges to manage network devices. + +### Windows + +On Windows, you must run zrok VPN commands as an administrator and install Wintun by placing `wintun.dll` ([download link](https://www.wintun.net/)) in the same directory as the `zrok.exe` executable. + +### Linux + +On Linux, the simplest way to grant the necessary privileges is to run zrok VPN commands as root. You can enable a separate environment for root by also running `zrok enable` as the root user, or you can prefix the commands like `sudo -E` to allow zrok running as root to use the zrok environment owned by the current user. The minimum privilege is runing zrok VPN commands and the `ip` command with the `NET_ADMIN` kernel capability. The `zrok-share.service` unit has a commented example to grant `NET_ADMIN` as an Ambient Capability. + +### macOS + +On macOS, you must run zrok VPN commands as root. You can prefix the zrok command with `sudo -E` to allow zrok running as root to use the zrok environment owned by the current user. + +## Start the VPN Server + +VPN is shared through the `vpn` backend of `zrok` command. + +```bash +eugene@hermes $ sudo -E zrok share private --headless --backend-mode vpn +[ 0.542] INFO sdk-golang/ziti.(*listenerManager).createSessionWithBackoff: {session token=[589d443c-f59d-4fc8-8c48-76609b7fb402]} new service session +[ 0.705] INFO main.(*sharePrivateCommand).run: allow other to access your share with the following command: +zrok access private 3rq7torslq3n +[ 0.705] INFO zrok/endpoints/vpn.(*Backend).Run: started +``` + +![VPN share](./vpn-share.png) + +`sudo` or equivalent invocation is required because VPN mode needs to create a virtual network device (`tun`) +`-E` option allows `zrok` to find your zrok configuration files (in your `$HOME/.zrok`) + +By default `vpn` backend uses subnet `10.122.0.0/16` and assigns `10.122.0.1` to the host that stared VPN share. + +Example output from `ifconfig`: + +```text +tun0: flags=4305 mtu 16384 + inet 10.122.0.1 netmask 255.255.0.0 destination 10.122.0.1 + inet6 fe80::705f:24e4:dcfc:a6b2 prefixlen 64 scopeid 0x20 + inet6 fd00:7a72:6f6b::1 prefixlen 64 scopeid 0x0 + unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 500 (UNSPEC) + RX packets 0 bytes 0 (0.0 B) + RX errors 0 dropped 0 overruns 0 frame 0 + TX packets 27 bytes 3236 (3.2 KB) + TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 +``` + +Default IP/subnet setting can be overridden by adding `` parameter: + +```bash +sudo -E zrok share private --headless --backend-mode vpn 192.168.42.12/24 +``` + +## Reserve a VPN Share Token + +As with all backend modes, you can reserve a share token for a VPN share. + +```bash +eugene@hermes $ zrok reserve private --backend-mode vpn +[ 0.297] INFO main.(*reserveCommand).run: your reserved share token is 'k77y2cl7jmjl' + +eugene@hermes $ sudo -E zrok share reserved k77y2cl7jmjl --headless +[ 0.211] INFO main.(*shareReservedCommand).run: sharing target: '10.122.0.1/16' +[ 0.211] INFO main.(*shareReservedCommand).run: using existing backend target: 10.122.0.1/16 +[ 0.463] INFO sdk-golang/ziti.(*listenerManager).createSessionWithBackoff: {session token=[22c5708d-e2f2-41aa-a507-454055f8bfcc]} new service session +[ 0.641] INFO main.(*shareReservedCommand).run: use this command to access your zrok share: 'zrok access private k77y2cl7jmjl' +[ +``` + +## Access the VPN Share + +```bash +eugene@calculon % sudo -E zrok access private --headless k77y2cl7jmjl +[ 0.201] INFO main.(*accessPrivateCommand).run: allocated frontend '50B5hloP1s1X' +[ 0.662] INFO main.(*accessPrivateCommand).run: access the zrok share at the following endpoint: VPN: +[ 0.662] INFO main.(*accessPrivateCommand).run: 10.122.0.1 -> CONNECTED Welcome to zrok VPN +[ 0.662] INFO zrok/endpoints/vpn.(*Frontend).Run: connected:Welcome to zrok VPN +``` + +zrok creates a virtual network device, i.e., a "tun" interface, when you run `zrok access`. + +Example output from `ifconfig` run on a VPN client device: + +```bash +utun5: flags=8051 mtu 1500 + inet 10.122.0.3 --> 10.122.0.1 netmask 0xff000000 + inet6 fe80::ce08:faff:fe8a:7b25%utun5 prefixlen 64 scopeid 0x14 + nd6 options=201 +``` + +At this point a VPN tunnel is active between your server and client. +In the example above server is `hermes(10.122.0.1)` and client is `calculon(10.122.0.3)`. +All devices in the VPN can access one another by IP address. + +```bash +eugene@calculon ~ % ssh eugene@10.122.0.1 +Welcome to Ubuntu 23.10 (GNU/Linux 6.5.0-27-generic x86_64) + + * Documentation: https://help.ubuntu.com + * Management: https://landscape.canonical.com + * Support: https://ubuntu.com/pro + +0 updates can be applied immediately. + +Last login: Tue Apr 16 09:27:13 2024 from 127.0.0.1 + +eugene@hermes:~$ who am i +eugene pts/8 2024-04-16 10:04 (10.122.0.3) + +eugene@hermes:~$ +``` + +You can also make a reverse(server-to-client) connection: + +```bash +eugene@hermes:~$ ssh 10.122.0.3 +Last login: Tue Apr 16 09:57:28 2024 + +eugene@calculon ~ % who am i +eugene ttys008 Apr 16 10:06 (10.122.0.1) +``` diff --git a/website/versioned_docs/version-0.4/images/personalized-frontend-1.png b/website/versioned_docs/version-0.4/images/personalized-frontend-1.png new file mode 100644 index 00000000..781ffdf5 Binary files /dev/null and b/website/versioned_docs/version-0.4/images/personalized-frontend-1.png differ diff --git a/website/versioned_docs/version-0.4/images/zrok.png b/website/versioned_docs/version-0.4/images/zrok.png new file mode 100644 index 00000000..2ce4fb79 Binary files /dev/null and b/website/versioned_docs/version-0.4/images/zrok.png differ diff --git a/website/versioned_docs/version-0.4/images/zrok_cover.png b/website/versioned_docs/version-0.4/images/zrok_cover.png new file mode 100644 index 00000000..aaccf251 Binary files /dev/null and b/website/versioned_docs/version-0.4/images/zrok_cover.png differ diff --git a/website/versioned_docs/version-0.4/images/zrok_deployment.drawio b/website/versioned_docs/version-0.4/images/zrok_deployment.drawio new file mode 100644 index 00000000..37b880cd --- /dev/null +++ b/website/versioned_docs/version-0.4/images/zrok_deployment.drawio @@ -0,0 +1 @@ +5Vvfc5s4EP5rPHP3UI+QxK/HJE7TzPWu7qUzae+lQ0CxmWDkEzix89efMMIGSbYJBuxe8hK04AW+/bS72hUDdDVb3jBvPv2TBiQaQBAsB2g0gNDADuL/MslKSKBl5pIJCwMh2wruwlcihEBIF2FAksqFKaVRGs6rQp/GMfHTisxjjL5UL3ukUfWuc29CFMGd70Wq9D4M0mkudQHYyj+RcDIVd7aKEzOvuFYIkqkX0JeSCF0P0BWjNM2PZssrEmXgFbDkv/u44+zmuRiJ0zo/+OPiPv2KJu6/P9l9FPvkQzj6+gE6uZpnL1qIFxZPm64KBBhdxAHJtBgDdPkyDVNyN/f87OwLNzqXTdNZJE4/hlF0RSPK1r9Fj45PfJ/LAy+ZbnQkKaNPpHTZg2NiE/Az6kuJ93wmLCXLkki85A2hM5KyFb9EnDUFvzaEw0MhednaD9rCKtOS7QwshJ7gzGSjfIsrPxDQvgVmq1uYR+a1M8IyzG2ACSU0AVawRFCHpWN0hKXRJZYBefQWUdoOeLjAQICHkaOAZxga8MyueIi7pSExApPYB2e7a9nIs9rB2HAkgpq66Y4dDcpOZ7NdQfmVIzCA1ppYD4wfTbIjz/dJkmQILB6i0D/OFC1gCYGEpa3D0gAaLLHZEZaoJpY8ujJycgRNfH4ImgqCo1XszTK+gb8Jf7eE4wbGjC5XCn78tdMqSNXJHNOYSG5AiLwonMR86HMwCZdfZiCGPK26ECdmYRBkt9FaZWs30EFQQ7KVtCmCYWmshLryGYZipS9zEv8TpqHK9b9I+kLZk2ItfhueFZN8NswzoR/RRdAL81GBzF4/bLi6VAF1RX33cLgjcXCRrRLWYHlJEvpVaKpM5Piw1ffy4Ec2GPIsSYxHy/LZ0UqMdiKcemxC0sMhmwSVZYpqhxLK5p6UgpHIS8Pn6uJGB7y4w5iG/Ik3ZnZ3RttCR0IXzCfiZ+XliKTJljRhRVMOjaJpzYTNix8x40Bf7LDfKTu4o23KDsOUVcF+yaH6447I8V64IefpbnNuyGmq1bvrUDP8euxI+IOljUgzBHaVN/gAb9ajMWEhf9ksAcuFyzD9Lu6UHZcoyEdbTdngIAFze+2BCdYkqnFWREUSvVBzL4asg6q6Zqq6fuqaqW9zbwUjwdAFToWVyEJ7eZkNZH4352pdp4rOiqumFCYRaMxV00VDVFVWVNr64qq6UlW4eiaFPduqIIWL7ORkhT1Drezp6yRXlE8/GkWE/Zb8frbwVteSGGpWkv3Ca/cf8Lerhh9FxK7lR6FZdqN7Xejuyuyuwu4RDhbX9LDwrDwsNEyJi409LJSzAbv3bKBGt69tGpsVGvMwXz8j6JLI2vS4B3afV66LARyC0h88RNDaXHerLpwL+uZ60+LfEVyHDV22/Yu77PNKinHGtS5IjbMa5U7F0IVDu1+OQ7WEOWbhs5cSNfH79O3bWJVex8F883St9BI6ywptQ+owGKauw6DbjNBdp7dpmfCtTkaZ9jkDd5Z04P6aTslnGUgqVtuH3Fa7kRPVTQvBWTkZS6p1I6N5J0RqR8Le65lQXd5s/Ai4jp9DRuMZ0XiJ/2d/2JIqgLa656nf5jBUc5mx2DICbjP8YvJebGNIUcDttXUfWbfLyy+33jJe/gTOExm93txotvt8DCOSKAYpAmlA/cV6Nh2MpQ85lJ8fqo16BS0NprvDKIZDyd8AV4NhUVms+E6rIwhPXaU+2L/XR1m7TudEClitRcndXDxZTDSlRZ9rNo6JQFKFFVXtxUQtkh1vldy3Y/eo+S11BDDQZclQuw8HduUh1cL+L55eHGWhDc6bFal2IdNrDDtBfZsvxKXKIDrkhPe1tN9URWnmmbXIWapn3l34O1lPW8qakCsRqX5HW1IkfzLRsVfuv4Bd5WizPGF/mqAt6V1YJ6IpPilPnSq9bLmjV7tUJ21H3eQTPfFUXbB9pjz6nK4s10Lckkr6WL9ruqv62z5W1/7S4pgEro3IL22CwxipALb0cQAfbr8tzGm9/UITXf8H \ No newline at end of file diff --git a/website/versioned_docs/version-0.4/images/zrok_deployment.png b/website/versioned_docs/version-0.4/images/zrok_deployment.png new file mode 100644 index 00000000..e74fa670 Binary files /dev/null and b/website/versioned_docs/version-0.4/images/zrok_deployment.png differ diff --git a/website/versioned_docs/version-0.4/images/zrok_enable_modal.png b/website/versioned_docs/version-0.4/images/zrok_enable_modal.png new file mode 100644 index 00000000..62db6b37 Binary files /dev/null and b/website/versioned_docs/version-0.4/images/zrok_enable_modal.png differ diff --git a/website/versioned_docs/version-0.4/images/zrok_frontends_v0.3.drawio b/website/versioned_docs/version-0.4/images/zrok_frontends_v0.3.drawio new file mode 100644 index 00000000..956fa670 --- /dev/null +++ b/website/versioned_docs/version-0.4/images/zrok_frontends_v0.3.drawio @@ -0,0 +1 @@ +7VzbcqM4EP0av2zVuAziYj+OPZnsZpJUKp6tnezLlGJkWxuMGCHf8vUjQDIXERtY3xKTSqWkRmpQ91EfqQVpgcFsdU2hP70jDnJbesdZtcCXlq53DZv/DQXrWGDrIBZMKHZikZYIhvgVCWFHSOfYQUGmISPEZdjPCkfE89CIZWSQUrLMNhsTN3tXH06QIhiOoKtK/8EOm4phmZ1E/ifCk6m4s9kRF2ZQthWCYAodskyJwFULDCghLC7NVgPkhqaTZon7fX3j6ua5KPJYmQ7dxafBL+t28C14CP6F8+EC9//7JLQsoDsX4/2jjb32KyUvbUzEg7O1NAYlc89BoUKtBfrLKWZo6MNReHXJvc9lUzZzxWX1AeXdEGVolRKJB75GZIYYXfMm4qreFV3W0uxxdZl4QpNAmaa8YAgZFM6fbDQnBuIFYaMK9jIUez1QvIAMceFXSjzkOWdnNGCf2mqmYjXFSNxwn8PZymsjFwYBHnFjBAxSpopT5kps2+E1tMLsR1hum6L2lLryZZWurGXF4yNMdQqrT0J7VEm6RTXZ701HBWROR2g3hvjYJohtaWfF7ZCTCVCq21NuNQu8KmUUuZDhRTasFbla3OGBYD6yDapM/Q1USRXxuEWvdBzKKQLAbvf0zuYnq1a37bZlZDXHllI0R1Dc2KE+Oi0FnVfeAvPJPEPihmmg8jDuh8UpWsEJ8TgSfEQxfwZEE+mDFOm7Z/wYr5DkvbAexEV9K8gqRAPbyhpYL4gG+hbc7D0adFV7+1M0QxTyrpbLb99/prw0CUsfyRWG0TszV/TeAZ0ZpnFmdCZvdng+q8lNdXiwPp/1SvJZ96z4zOplJyMAObiU5TM7P6u7OUUHpi9N341GGSkZfA5FMRBFoAudzzdPDGIviptaVHdd6Ac4ah23mGLXuYVrMmdSj6ztY5KbesaG0oTpKd61jhgYNVDRqI/hnO5PCcWvoS1dYba8oYMlnrnQ41tG6OREfeLIuciIL0ouGjNRfCaMkZmoUGGDTqGzHEr873I6diJic90BcUnoX4+H9ZAqQzxGZjP7/JcbchCGC5OPbMDrWlLnv2FzygbECxiFOPIyggFboqDY/9uBuhsVu/yum4fyu7rBQ8kK5CdW6VCigA+fYeg+ohGD3iSaZam4XkSTImMBE78RbpqxG7HDFDsO8opdVw0ekaMRvVqg2N/h40AXT7yQg5AXLZZKuxDUcqHWreZCoS2xZXV10OUD8/hKph8yanCQwKtuazUdGB8DIfsHxCrnvZRHrb3io4y2/cLj1+2Pl8HAGvbv9dc+8B+x+XonU2sNYRyDMNZZNx+DPwqdrq7FPDhDHzUkbMP9pVFEoS3UVaQ/f3b5pq8BxIVRRGGA00skEt7b1g3Yp967bYbQ7N32RsUbpJ7x3k26udm7bZ8WFYm5ogt3EXMJdceIvCozX9zerXqo33gv5VG7IEVbHx9ltB0DHmoaqKGQ41HICXZzxY+sZng+8nZu+1RoaIMbQ31X4P7v29sGEA1tRKaxd9NG6mBYeK7E8W8rdfjbadubw+Ad579aK3X6uzkL3vf57+a1zF0HwAI4Z3IArNvZjaup1TwABnpWkWEd9wBYV1+o2b5YOccsgqVljXgGaQT15ZhmDfh/14Dd0rg42aIPqEm5Jo1QMC2a9SDHippq7PUs+2MgZP+AuLT1IFAzkg2FHI9CziWNANRk48WlETZToaENbgw1vXhxaYQKgLg42qj2vVTdNEK9LIJ9qDRC2dfI5XrjTNIIZi+XRqj7Hrll5NIIh3uP/AWD67/mne+fZ97wxllcXz/cPBV8CnoI0Okny11tezdlJ+i0s8KcIT8ylsmSfMapLOYMM6conwPbH+ZuPPJtDG4nAYDDn/d3/fHouVcRc+/pw9AcUuqFRKsKOk8FRmBkPzAE3Rxjls6j5hTpeUW1wciryXf2cfPkfxWAq98= \ No newline at end of file diff --git a/website/versioned_docs/version-0.4/images/zrok_frontends_v0.3.png b/website/versioned_docs/version-0.4/images/zrok_frontends_v0.3.png new file mode 100644 index 00000000..7573e489 Binary files /dev/null and b/website/versioned_docs/version-0.4/images/zrok_frontends_v0.3.png differ diff --git a/website/versioned_docs/version-0.4/images/zrok_interstitial_rendezvous.png b/website/versioned_docs/version-0.4/images/zrok_interstitial_rendezvous.png new file mode 100644 index 00000000..4830af0d Binary files /dev/null and b/website/versioned_docs/version-0.4/images/zrok_interstitial_rendezvous.png differ diff --git a/website/versioned_docs/version-0.4/images/zrok_not_found.png b/website/versioned_docs/version-0.4/images/zrok_not_found.png new file mode 100644 index 00000000..97fb26ef Binary files /dev/null and b/website/versioned_docs/version-0.4/images/zrok_not_found.png differ diff --git a/website/versioned_docs/version-0.4/images/zrok_private_share.png b/website/versioned_docs/version-0.4/images/zrok_private_share.png new file mode 100644 index 00000000..f366f780 Binary files /dev/null and b/website/versioned_docs/version-0.4/images/zrok_private_share.png differ diff --git a/website/versioned_docs/version-0.4/images/zrok_public_share.png b/website/versioned_docs/version-0.4/images/zrok_public_share.png new file mode 100644 index 00000000..962eef82 Binary files /dev/null and b/website/versioned_docs/version-0.4/images/zrok_public_share.png differ diff --git a/website/versioned_docs/version-0.4/images/zrok_registration_success.png b/website/versioned_docs/version-0.4/images/zrok_registration_success.png new file mode 100644 index 00000000..e111221d Binary files /dev/null and b/website/versioned_docs/version-0.4/images/zrok_registration_success.png differ diff --git a/website/versioned_docs/version-0.4/images/zrok_reserved_not_found.png b/website/versioned_docs/version-0.4/images/zrok_reserved_not_found.png new file mode 100644 index 00000000..04b192b7 Binary files /dev/null and b/website/versioned_docs/version-0.4/images/zrok_reserved_not_found.png differ diff --git a/website/versioned_docs/version-0.4/images/zrok_share_public.png b/website/versioned_docs/version-0.4/images/zrok_share_public.png new file mode 100644 index 00000000..7dfd741e Binary files /dev/null and b/website/versioned_docs/version-0.4/images/zrok_share_public.png differ diff --git a/website/versioned_docs/version-0.4/images/zrok_share_public_drive.png b/website/versioned_docs/version-0.4/images/zrok_share_public_drive.png new file mode 100644 index 00000000..5cab70af Binary files /dev/null and b/website/versioned_docs/version-0.4/images/zrok_share_public_drive.png differ diff --git a/website/versioned_docs/version-0.4/images/zrok_share_public_drive_explorer.png b/website/versioned_docs/version-0.4/images/zrok_share_public_drive_explorer.png new file mode 100644 index 00000000..ff12e8d0 Binary files /dev/null and b/website/versioned_docs/version-0.4/images/zrok_share_public_drive_explorer.png differ diff --git a/website/versioned_docs/version-0.4/images/zrok_share_reserved.png b/website/versioned_docs/version-0.4/images/zrok_share_reserved.png new file mode 100644 index 00000000..c6ea1f95 Binary files /dev/null and b/website/versioned_docs/version-0.4/images/zrok_share_reserved.png differ diff --git a/website/versioned_docs/version-0.4/images/zrok_share_web_files.png b/website/versioned_docs/version-0.4/images/zrok_share_web_files.png new file mode 100644 index 00000000..5d558fbf Binary files /dev/null and b/website/versioned_docs/version-0.4/images/zrok_share_web_files.png differ diff --git a/website/versioned_docs/version-0.4/images/zrok_share_web_website.png b/website/versioned_docs/version-0.4/images/zrok_share_web_website.png new file mode 100644 index 00000000..9facc7e4 Binary files /dev/null and b/website/versioned_docs/version-0.4/images/zrok_share_web_website.png differ diff --git a/website/versioned_docs/version-0.4/images/zrok_v0.1_overview.png b/website/versioned_docs/version-0.4/images/zrok_v0.1_overview.png new file mode 100644 index 00000000..52355973 Binary files /dev/null and b/website/versioned_docs/version-0.4/images/zrok_v0.1_overview.png differ diff --git a/website/versioned_docs/version-0.4/images/zrok_v0.2_overview.png b/website/versioned_docs/version-0.4/images/zrok_v0.2_overview.png new file mode 100644 index 00000000..bb987453 Binary files /dev/null and b/website/versioned_docs/version-0.4/images/zrok_v0.2_overview.png differ diff --git a/website/versioned_docs/version-0.4/images/zrok_verify.png b/website/versioned_docs/version-0.4/images/zrok_verify.png new file mode 100644 index 00000000..cddd0efe Binary files /dev/null and b/website/versioned_docs/version-0.4/images/zrok_verify.png differ diff --git a/website/versioned_docs/version-0.4/images/zrok_web_console.png b/website/versioned_docs/version-0.4/images/zrok_web_console.png new file mode 100644 index 00000000..b26db4cc Binary files /dev/null and b/website/versioned_docs/version-0.4/images/zrok_web_console.png differ diff --git a/website/versioned_docs/version-0.4/images/zrok_web_console_empty.png b/website/versioned_docs/version-0.4/images/zrok_web_console_empty.png new file mode 100644 index 00000000..6b1fdaa2 Binary files /dev/null and b/website/versioned_docs/version-0.4/images/zrok_web_console_empty.png differ diff --git a/website/versioned_docs/version-0.4/images/zrok_web_console_environment_spark.png b/website/versioned_docs/version-0.4/images/zrok_web_console_environment_spark.png new file mode 100644 index 00000000..715b7e5c Binary files /dev/null and b/website/versioned_docs/version-0.4/images/zrok_web_console_environment_spark.png differ diff --git a/website/versioned_docs/version-0.4/images/zrok_web_console_explorer_share.png b/website/versioned_docs/version-0.4/images/zrok_web_console_explorer_share.png new file mode 100644 index 00000000..fc61a295 Binary files /dev/null and b/website/versioned_docs/version-0.4/images/zrok_web_console_explorer_share.png differ diff --git a/website/versioned_docs/version-0.4/images/zrok_web_console_share_detail.png b/website/versioned_docs/version-0.4/images/zrok_web_console_share_detail.png new file mode 100644 index 00000000..415b0321 Binary files /dev/null and b/website/versioned_docs/version-0.4/images/zrok_web_console_share_detail.png differ diff --git a/website/versioned_docs/version-0.4/images/zrok_web_console_share_frontend.png b/website/versioned_docs/version-0.4/images/zrok_web_console_share_frontend.png new file mode 100644 index 00000000..61a7c8d2 Binary files /dev/null and b/website/versioned_docs/version-0.4/images/zrok_web_console_share_frontend.png differ diff --git a/website/versioned_docs/version-0.4/images/zrok_web_login.png b/website/versioned_docs/version-0.4/images/zrok_web_login.png new file mode 100644 index 00000000..9f684bf6 Binary files /dev/null and b/website/versioned_docs/version-0.4/images/zrok_web_login.png differ diff --git a/website/versioned_docs/version-0.4/images/zrok_web_ui_empty_environment_detail.png b/website/versioned_docs/version-0.4/images/zrok_web_ui_empty_environment_detail.png new file mode 100644 index 00000000..b1b1a05b Binary files /dev/null and b/website/versioned_docs/version-0.4/images/zrok_web_ui_empty_environment_detail.png differ diff --git a/website/versioned_docs/version-0.4/images/zrok_web_ui_empty_shares.png b/website/versioned_docs/version-0.4/images/zrok_web_ui_empty_shares.png new file mode 100644 index 00000000..2838f351 Binary files /dev/null and b/website/versioned_docs/version-0.4/images/zrok_web_ui_empty_shares.png differ diff --git a/website/versioned_docs/version-0.4/images/zrok_web_ui_new_environment.png b/website/versioned_docs/version-0.4/images/zrok_web_ui_new_environment.png new file mode 100644 index 00000000..14a161d0 Binary files /dev/null and b/website/versioned_docs/version-0.4/images/zrok_web_ui_new_environment.png differ diff --git a/website/versioned_docs/version-0.4/images/zrok_zoom_to_fit.png b/website/versioned_docs/version-0.4/images/zrok_zoom_to_fit.png new file mode 100644 index 00000000..431980f9 Binary files /dev/null and b/website/versioned_docs/version-0.4/images/zrok_zoom_to_fit.png differ diff --git a/website/versioned_docs/version-0.4/myzrok/_category_.json b/website/versioned_docs/version-0.4/myzrok/_category_.json new file mode 100644 index 00000000..13e637eb --- /dev/null +++ b/website/versioned_docs/version-0.4/myzrok/_category_.json @@ -0,0 +1,7 @@ +{ + "label": "myzrok", + "position": 50, + "link": { + "type": "generated-index" + } +} diff --git a/website/versioned_docs/version-0.4/myzrok/custom-domains/_category_.json b/website/versioned_docs/version-0.4/myzrok/custom-domains/_category_.json new file mode 100644 index 00000000..ea8a8f1c --- /dev/null +++ b/website/versioned_docs/version-0.4/myzrok/custom-domains/_category_.json @@ -0,0 +1,8 @@ +{ + "label": "Custom Domains", + "position": 120, + "link": { + "type": "doc", + "id": "myzrok/custom-domains/index" + } +} diff --git a/website/versioned_docs/version-0.4/myzrok/custom-domains/images/myzrok_add_a_record.png b/website/versioned_docs/version-0.4/myzrok/custom-domains/images/myzrok_add_a_record.png new file mode 100644 index 00000000..751fe3b1 Binary files /dev/null and b/website/versioned_docs/version-0.4/myzrok/custom-domains/images/myzrok_add_a_record.png differ diff --git a/website/versioned_docs/version-0.4/myzrok/custom-domains/images/myzrok_add_cname.png b/website/versioned_docs/version-0.4/myzrok/custom-domains/images/myzrok_add_cname.png new file mode 100644 index 00000000..d079c2a1 Binary files /dev/null and b/website/versioned_docs/version-0.4/myzrok/custom-domains/images/myzrok_add_cname.png differ diff --git a/website/versioned_docs/version-0.4/myzrok/custom-domains/images/myzrok_add_domain.png b/website/versioned_docs/version-0.4/myzrok/custom-domains/images/myzrok_add_domain.png new file mode 100644 index 00000000..ab06b844 Binary files /dev/null and b/website/versioned_docs/version-0.4/myzrok/custom-domains/images/myzrok_add_domain.png differ diff --git a/website/versioned_docs/version-0.4/myzrok/custom-domains/images/myzrok_domains_page.png b/website/versioned_docs/version-0.4/myzrok/custom-domains/images/myzrok_domains_page.png new file mode 100644 index 00000000..170e6a8e Binary files /dev/null and b/website/versioned_docs/version-0.4/myzrok/custom-domains/images/myzrok_domains_page.png differ diff --git a/website/versioned_docs/version-0.4/myzrok/custom-domains/images/myzrok_finalize.png b/website/versioned_docs/version-0.4/myzrok/custom-domains/images/myzrok_finalize.png new file mode 100644 index 00000000..09008be5 Binary files /dev/null and b/website/versioned_docs/version-0.4/myzrok/custom-domains/images/myzrok_finalize.png differ diff --git a/website/versioned_docs/version-0.4/myzrok/custom-domains/images/myzrok_verify_dns.png b/website/versioned_docs/version-0.4/myzrok/custom-domains/images/myzrok_verify_dns.png new file mode 100644 index 00000000..bb689c9d Binary files /dev/null and b/website/versioned_docs/version-0.4/myzrok/custom-domains/images/myzrok_verify_dns.png differ diff --git a/website/versioned_docs/version-0.4/myzrok/custom-domains/images/zrok_status.png b/website/versioned_docs/version-0.4/myzrok/custom-domains/images/zrok_status.png new file mode 100644 index 00000000..d562d5dc Binary files /dev/null and b/website/versioned_docs/version-0.4/myzrok/custom-domains/images/zrok_status.png differ diff --git a/website/versioned_docs/version-0.4/myzrok/custom-domains/index.mdx b/website/versioned_docs/version-0.4/myzrok/custom-domains/index.mdx new file mode 100644 index 00000000..e6057e32 --- /dev/null +++ b/website/versioned_docs/version-0.4/myzrok/custom-domains/index.mdx @@ -0,0 +1,110 @@ +--- +title: Custom Domains +--- + +## Overview +[myzrok.io](https://myzrok.io) is a hosted zrok-as-a-service offering that provides a way for you bring a custom DNS name for zrok shares. +For example, let's say you own the domain `foo.example.io`, you can leverage zrok custom domains to +create ephemeral shares such as: `https://vw8jbg4ijz5g.foo.example.io` +or [reserved shares](/concepts/sharing-reserved.md) such as `https://myshare.foo.example.io`. + +Custom domains require a Pro subscription with [myzrok.io](https://myzrok.io). +If you don't already have an account, you can sign up for one [here](https://myzrok.io). + +[myzrok.io](https://myzrok.io) provides a guided setup with just a few easy steps! + +1. Bring your own custom domain name +2. Create DNS records for certificate validation and traffic routing +3. Wait for zrok to validate your records and finalize configuration +4. Start sharing! + +Detailed setup instructions are documented below. + +### Prerequisites +:::note +In order to create a custom domain in zrok, **you must already own the domain you want to use.** +::: + +During the setup process you will need to create DNS records to validate ownership and to allow a certificate to be issued +on behalf of your domain. Once you have your domain registered, you can begin the process of setting up your custom +domain with zrok. + +### Create Your Custom Domain + +Log into the myzrok console and access the domains page by clicking on the globe icon in the left navigation menu. + +![myzrok_domains_page](images/myzrok_domains_page.png) + + +Click the CREATE button on the top right of the page to get started. +When you click the create button you’ll be presented with a form to allow you to enable your custom domain. +Enter your domain into the form field and click CREATE. This will begin the process for setting up your custom domain. +A new managed TLS certificate will be created to host traffic on your domain's behalf. + +![myzrok_add_domain](images/myzrok_add_domain.png) + +This may take a few minutes. +You may close the form at this time and come back when your domain is *pending validation.* +Once your certificate is ready, you’ll be presented with instructions on how to set up your DNS records. + +### Creating DNS Records + +zrok will host and manage a TLS certificate for the custom domain on your behalf. +This process requires a DNS validation record to be created in order to prove ownership of the domain. +Follow the prompts in the UI to create a CNAME DNS record with the name and value specified in the UI. + +![myzrok_add_cname](images/myzrok_add_cname.png) + +Next, create an A record to direct all DNS requests for your domain to a set of static IPs that are hosted by zrok. + +![myzrok_add_a_record](images/myzrok_add_a_record.png) + +After you’ve created your records, you can verify that they are configured properly using the instructions provided in the form. + +![myzrok_verify_dns](images/myzrok_verify_dns.png) + +If the `nslookup` command returns the IP addresses supplied for the A-record entry, then DNS for your domain is resolving properly. + +``` +nslookup test.foo.example.io +Server: 192.168.86.194 +Address: 192.168.86.194#53 + +Non-authoritative answer: +Name: test.foo.example.io +Address: 99.83.220.186 +Name: test.foo.example.io +Address: 52.223.6.108 +``` + +Once you have created your DNS records, it will take zrok a few minutes to validate that they exist. +You can safely close the form until your certificate has been issued. + +### Finalizing Your Custom Domain + +After your records have been validated and your certificate has been issued, click the FINALIZE button within 72 hours to complete your custom domain setup. + +![myzrok_finalize](images/myzrok_finalize.png) + +From here, myzrok.io will complete the last few steps of creating your custom domain. +This should only take a minute, but if you need to close the form you can find the instructions on how to share your frontend when you return. + +### Start Sharing! +Once the Finalize stage has completed, you can start sharing with your custom DNS. + +In order to create shares that utilize your custom DNS, you will need to specify the `--frontend` flag when creating a share, +or update your environment configuration to use this new frontend by default. + +``` +zrok share public --frontend foo-example--goPIhgtJtz +``` + +You can set the custom frontend as the environment default by running: + +``` +zrok config set defaultFrontend foo-example--goPIhgtJtz +``` + +To validate which frontend is being used, use the `zrok status` command, which will identify the default frontend being used: + +![zrok_status](images/zrok_status.png) diff --git a/website/versioned_sidebars/version-0.4-sidebars.json b/website/versioned_sidebars/version-0.4-sidebars.json new file mode 100644 index 00000000..caea0c03 --- /dev/null +++ b/website/versioned_sidebars/version-0.4-sidebars.json @@ -0,0 +1,8 @@ +{ + "tutorialSidebar": [ + { + "type": "autogenerated", + "dirName": "." + } + ] +} diff --git a/website/versions.json b/website/versions.json new file mode 100644 index 00000000..c8ed9f9a --- /dev/null +++ b/website/versions.json @@ -0,0 +1,3 @@ +[ + "0.4" +]