diff --git a/.devcontainer/base/Dockerfile b/.devcontainer/base/Dockerfile new file mode 100644 index 0000000000..119594bc6f --- /dev/null +++ b/.devcontainer/base/Dockerfile @@ -0,0 +1,16 @@ +FROM mcr.microsoft.com/devcontainers/typescript-node:20-bookworm + +ENV SHELL=/bin/bash \ + DEBIAN_FRONTEND=noninteractive \ + LANG=C.UTF-8 \ + LC_ALL=C.UTF-8 \ + CI=1 \ + PNPM_HOME=/home/node/.local/share/pnpm \ + PATH=/home/node/.local/share/pnpm:$PATH + + +RUN apt-get update && \ + apt-get --no-install-recommends install -y \ + libgtk2.0-0 libgtk-3-0 libgbm-dev libnotify-dev libnss3 libxss1 libasound2 libxtst6 xauth xvfb && \ + apt-get clean && \ + corepack enable && COREPACK_ENABLE_DOWNLOAD_PROMPT=0 corepack prepare pnpm@9.1.2 --activate diff --git a/.devcontainer/base/devcontainer.json b/.devcontainer/base/devcontainer.json new file mode 100644 index 0000000000..187e012e67 --- /dev/null +++ b/.devcontainer/base/devcontainer.json @@ -0,0 +1,28 @@ +{ + "$schema": "https://raw.githubusercontent.com/devcontainers/spec/refs/heads/main/schemas/devContainer.schema.json", + "name": "devcontainer", + "dockerComposeFile": "docker-compose.yml", + "service": "devcontainer", + "workspaceFolder": "/workspaces", + "features": { + "ghcr.io/devcontainers/features/go:1": { + "version": "1.24" + }, + "ghcr.io/guiyomh/features/golangci-lint:0": {}, + "ghcr.io/jungaretti/features/make:1": {} + }, + "forwardPorts": [ + 3000, + 3001, + 4200, + 8080 + ], + "onCreateCommand": "pnpm install -g sass@1.64.1", + "customizations": { + "jetbrains": { + "settings": { + "com.intellij:app:HttpConfigurable.use_proxy_pac": true + } + } + } +} diff --git a/.devcontainer/base/docker-compose.yml b/.devcontainer/base/docker-compose.yml new file mode 100644 index 0000000000..d1b26f1a7b --- /dev/null +++ b/.devcontainer/base/docker-compose.yml @@ -0,0 +1,225 @@ +services: + + devcontainer: + container_name: devcontainer + build: + context: . + volumes: + - ../../:/workspaces:cached + - /tmp/.X11-unix:/tmp/.X11-unix:cached + - home-dir:/home/node:delegated + command: sleep infinity + working_dir: /workspaces + environment: + ZITADEL_DATABASE_POSTGRES_HOST: db + ZITADEL_EXTERNALSECURE: false + + db: + container_name: db + image: postgres:17.0-alpine3.19 + restart: unless-stopped + volumes: + - postgres-data:/var/lib/postgresql/data + environment: + PGUSER: postgres + POSTGRES_PASSWORD: postgres + healthcheck: + test: [ "CMD-SHELL", "pg_isready" ] + interval: "10s" + timeout: "30s" + retries: 5 + start_period: "20s" + ports: + - "5432:5432" + + mock-zitadel: + container_name: mock-zitadel + build: + context: ../../apps/login/integration/core-mock + ports: + - 22220:22220 + - 22222:22222 + + login-integration: + container_name: login-integration + build: + context: ../.. + dockerfile: build/login/Dockerfile + image: "${LOGIN_TAG:-zitadel-login:local}" + env_file: ../../apps/login/.env.test + network_mode: service:devcontainer + environment: + NODE_ENV: test + PORT: 3001 + depends_on: + mock-zitadel: + condition: service_started + + zitadel: + image: "${ZITADEL_TAG:-ghcr.io/zitadel/zitadel:v4.0.0-rc.2}" + container_name: zitadel + command: 'start-from-init --masterkey "MasterkeyNeedsToHave32Characters" --config /zitadel.yaml --steps /zitadel.yaml' + volumes: + - ../../apps/login/acceptance/pat:/pat:delegated + - ../../apps/login/acceptance/zitadel.yaml:/zitadel.yaml:cached + network_mode: service:devcontainer + healthcheck: + test: + - CMD + - /app/zitadel + - ready + - --config + - /zitadel.yaml + depends_on: + db: + condition: "service_healthy" + + configure-login: + container_name: configure-login + restart: no + build: + context: ../../apps/login/acceptance/setup + dockerfile: ../go-command.Dockerfile + entrypoint: "./setup.sh" + network_mode: service:devcontainer + environment: + PAT_FILE: /pat/zitadel-admin-sa.pat + ZITADEL_API_URL: http://localhost:8080 + WRITE_ENVIRONMENT_FILE: /login-env/.env.test.local + SINK_EMAIL_INTERNAL_URL: http://sink:3333/email + SINK_SMS_INTERNAL_URL: http://sink:3333/sms + SINK_NOTIFICATION_URL: http://sink:3333/notification + LOGIN_BASE_URL: http://localhost:3000/ui/v2/login/ + ZITADEL_API_DOMAIN: localhost + ZITADEL_ADMIN_USER: zitadel-admin@zitadel.localhost + volumes: + - ../../apps/login/acceptance/pat:/pat:cached # Read the PAT file from zitadels setup + - ../../apps/login:/login-env:delegated # Write the environment variables file for the login + depends_on: + zitadel: + condition: "service_healthy" + + login-acceptance: + container_name: login + image: "${LOGIN_TAG:-ghcr.io/zitadel/zitadel-login:v4.0.0-rc.2}" + network_mode: service:devcontainer + volumes: + - ../../apps/login/.env.test.local:/env-files/.env:cached + depends_on: + configure-login: + condition: service_completed_successfully + + mock-notifications: + container_name: mock-notifications + build: + context: ../../apps/login/acceptance/sink + dockerfile: ../go-command.Dockerfile + args: + - LOGIN_TEST_ACCEPTANCE_GOLANG_TAG=${LOGIN_TEST_ACCEPTANCE_GOLANG_TAG:-golang:1.24-alpine} + environment: + PORT: '3333' + command: + - -port + - '3333' + - -email + - '/email' + - -sms + - '/sms' + - -notification + - '/notification' + ports: + - "3333:3333" + depends_on: + configure-login: + condition: "service_completed_successfully" + + mock-oidcrp: + container_name: mock-oidcrp + build: + context: ../../apps/login/acceptance/oidcrp + dockerfile: ../go-command.Dockerfile + args: + - LOGIN_TEST_ACCEPTANCE_GOLANG_TAG=${LOGIN_TEST_ACCEPTANCE_GOLANG_TAG:-golang:1.24-alpine} + network_mode: service:devcontainer + environment: + API_URL: 'http://localhost:8080' + API_DOMAIN: 'localhost' + PAT_FILE: '/pat/zitadel-admin-sa.pat' + LOGIN_URL: 'http://localhost:3000/ui/v2/login' + ISSUER: 'http://localhost:8000' + HOST: 'localhost' + PORT: '8000' + SCOPES: 'openid profile email' + volumes: + - ../../apps/login/acceptance/pat:/pat:cached + depends_on: + configure-login: + condition: "service_completed_successfully" + + # mock-oidcop: + # container_name: mock-oidcop + # build: + # context: ../../apps/login/acceptance/idp/oidc + # dockerfile: ../../go-command.Dockerfile + # args: + # - LOGIN_TEST_ACCEPTANCE_GOLANG_TAG=${LOGIN_TEST_ACCEPTANCE_GOLANG_TAG:-golang:1.24-alpine} + # network_mode: service:devcontainer + # environment: + # API_URL: 'http://localhost:8080' + # API_DOMAIN: 'localhost' + # PAT_FILE: '/pat/zitadel-admin-sa.pat' + # SCHEMA: 'http' + # HOST: 'localhost' + # PORT: "8004" + # volumes: + # - "../apps/login/packages/acceptance/pat:/pat:cached" + # depends_on: + # configure-login: + # condition: "service_completed_successfully" + + mock-samlsp: + container_name: mock-samlsp + build: + context: ../../apps/login/acceptance/samlsp + dockerfile: ../go-command.Dockerfile + args: + - LOGIN_TEST_ACCEPTANCE_GOLANG_TAG=${LOGIN_TEST_ACCEPTANCE_GOLANG_TAG:-golang:1.24-alpine} + network_mode: service:devcontainer + environment: + API_URL: 'http://localhost:8080' + API_DOMAIN: 'localhost' + PAT_FILE: '/pat/zitadel-admin-sa.pat' + LOGIN_URL: 'http://localhost:3000/ui/v2/login' + IDP_URL: 'http://localhost:8080/saml/v2/metadata' + HOST: 'http://localhost:8001' + PORT: '8001' + volumes: + - "../apps/login/packages/acceptance/pat:/pat:cached" + depends_on: + configure-login: + condition: "service_completed_successfully" + +# mock-samlidp: +# container_name: mock-samlidp +# build: +# context: ../../apps/login/acceptance/idp/saml +# dockerfile: ../../go-command.Dockerfile +# args: +# - LOGIN_TEST_ACCEPTANCE_GOLANG_TAG=${LOGIN_TEST_ACCEPTANCE_GOLANG_TAG:-golang:1.24-alpine} +# network_mode: service:devcontainer +# environment: +# API_URL: 'http://localhost:8080' +# API_DOMAIN: 'localhost' +# PAT_FILE: '/pat/zitadel-admin-sa.pat' +# SCHEMA: 'http' +# HOST: 'localhost' +# PORT: "8003" +# volumes: +# - "../apps/login/packages/acceptance/pat:/pat" +# depends_on: +# configure-login: +# condition: "service_completed_successfully" + +volumes: + postgres-data: + home-dir: diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json deleted file mode 100644 index 5d49f92cf4..0000000000 --- a/.devcontainer/devcontainer.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "zitadel", - "dockerComposeFile": "docker-compose.yml", - "service": "devcontainer", - "workspaceFolder": "/workspaces/${localWorkspaceFolderBasename}", - "features": { - "ghcr.io/devcontainers/features/go:1": { - "version": "1.22" - }, - "ghcr.io/devcontainers/features/node:1": {}, - "ghcr.io/guiyomh/features/golangci-lint:0": {}, - "ghcr.io/devcontainers/features/docker-outside-of-docker:1": {}, - "ghcr.io/devcontainers/features/github-cli:1": {}, - "ghcr.io/jungaretti/features/make:1": {} - }, - "forwardPorts": [ - 3000, - 4200, - 8080 - ], - "onCreateCommand": "npm install -g sass@1.64.1" -} diff --git a/.devcontainer/docker-compose.yml b/.devcontainer/docker-compose.yml deleted file mode 100644 index cece28632b..0000000000 --- a/.devcontainer/docker-compose.yml +++ /dev/null @@ -1,31 +0,0 @@ -version: '3.8' -services: - devcontainer: - image: mcr.microsoft.com/devcontainers/base:ubuntu - volumes: - - ../..:/workspaces:cached - - /var/run/docker.sock:/var/run/docker.sock - network_mode: service:db - command: sleep infinity - environment: - ZITADEL_DATABASE_POSTGRES_HOST: db - ZITADEL_DATABASE_POSTGRES_PORT: 5432 - ZITADEL_DATABASE_POSTGRES_DATABASE: zitadel - ZITADEL_DATABASE_POSTGRES_USER_USERNAME: zitadel - ZITADEL_DATABASE_POSTGRES_USER_PASSWORD: zitadel - ZITADEL_DATABASE_POSTGRES_USER_SSL_MODE: disable - ZITADEL_DATABASE_POSTGRES_ADMIN_USERNAME: postgres - ZITADEL_DATABASE_POSTGRES_ADMIN_PASSWORD: postgres - ZITADEL_DATABASE_POSTGRES_ADMIN_SSL_MODE: disable - ZITADEL_EXTERNALSECURE: false - db: - image: postgres:latest - restart: unless-stopped - volumes: - - postgres-data:/var/lib/postgresql/data - environment: - PGUSER: postgres - POSTGRES_PASSWORD: postgres - -volumes: - postgres-data: diff --git a/.devcontainer/login-integration-debug/devcontainer.json b/.devcontainer/login-integration-debug/devcontainer.json new file mode 100644 index 0000000000..525b04788e --- /dev/null +++ b/.devcontainer/login-integration-debug/devcontainer.json @@ -0,0 +1,21 @@ +{ + "$schema": "https://raw.githubusercontent.com/devcontainers/spec/refs/heads/main/schemas/devContainer.schema.json", + "name": "login-integration-debug", + "dockerComposeFile": [ + "../base/docker-compose.yml", + "docker-compose.yml" + ], + "service": "login-integration-debug", + "runServices": ["login-integration-debug"], + "workspaceFolder": "/workspaces", + "forwardPorts": [3001], + "onCreateCommand": "pnpm install --recursive", + "postAttachCommand": "pnpm turbo daemon clean; pnpm turbo @zitadel/login#dev test:integration:login:debug", + "customizations": { + "jetbrains": { + "settings": { + "com.intellij:app:HttpConfigurable.use_proxy_pac": true + } + } + } +} diff --git a/.devcontainer/login-integration-debug/docker-compose.yml b/.devcontainer/login-integration-debug/docker-compose.yml new file mode 100644 index 0000000000..11ce02ee7d --- /dev/null +++ b/.devcontainer/login-integration-debug/docker-compose.yml @@ -0,0 +1,9 @@ +services: + login-integration-debug: + extends: + file: ../base/docker-compose.yml + service: devcontainer + container_name: login-integration-debug + depends_on: + mock-zitadel: + condition: service_started diff --git a/.devcontainer/login-integration/devcontainer.json b/.devcontainer/login-integration/devcontainer.json new file mode 100644 index 0000000000..1b7e02df43 --- /dev/null +++ b/.devcontainer/login-integration/devcontainer.json @@ -0,0 +1,19 @@ +{ + "$schema": "https://raw.githubusercontent.com/devcontainers/spec/refs/heads/main/schemas/devContainer.schema.json", + "name": "login-integration", + "dockerComposeFile": [ + "../base/docker-compose.yml" + ], + "service": "devcontainer", + "runServices": ["login-integration"], + "workspaceFolder": "/workspaces", + "forwardPorts": [3001], + "onCreateCommand": "pnpm install --frozen-lockfile --recursive && cd apps/login/packages/integration && pnpm cypress install && pnpm test:integration:login", + "customizations": { + "jetbrains": { + "settings": { + "com.intellij:app:HttpConfigurable.use_proxy_pac": true + } + } + } +} diff --git a/.devcontainer/turbo-lint-unit-debug/devcontainer.json b/.devcontainer/turbo-lint-unit-debug/devcontainer.json new file mode 100644 index 0000000000..19446687a1 --- /dev/null +++ b/.devcontainer/turbo-lint-unit-debug/devcontainer.json @@ -0,0 +1,21 @@ +{ + "$schema": "https://raw.githubusercontent.com/devcontainers/spec/refs/heads/main/schemas/devContainer.schema.json", + "name": "turbo-lint-unit-debug", + "dockerComposeFile": [ + "../base/docker-compose.yml", + "docker-compose.yml" + ], + "service": "turbo-lint-unit-debug", + "runServices": ["turbo-lint-unit-debug"], + "workspaceFolder": "/workspaces", + "forwardPorts": [3001], + "onCreateCommand": "pnpm install --recursive", + "postAttachCommand": "pnpm turbo daemon clean; pnpm turbo watch lint test:unit", + "customizations": { + "jetbrains": { + "settings": { + "com.intellij:app:HttpConfigurable.use_proxy_pac": true + } + } + } +} diff --git a/.devcontainer/turbo-lint-unit-debug/docker-compose.yml b/.devcontainer/turbo-lint-unit-debug/docker-compose.yml new file mode 100644 index 0000000000..a19a0211e5 --- /dev/null +++ b/.devcontainer/turbo-lint-unit-debug/docker-compose.yml @@ -0,0 +1,6 @@ +services: + turbo-lint-unit-debug: + extends: + file: ../base/docker-compose.yml + service: devcontainer + container_name: turbo-lint-unit-debug diff --git a/.devcontainer/turbo-lint-unit/devcontainer.json b/.devcontainer/turbo-lint-unit/devcontainer.json new file mode 100644 index 0000000000..f3c4f64355 --- /dev/null +++ b/.devcontainer/turbo-lint-unit/devcontainer.json @@ -0,0 +1,18 @@ +{ + "$schema": "https://raw.githubusercontent.com/devcontainers/spec/refs/heads/main/schemas/devContainer.schema.json", + "name": "turbo-lint-unit", + "dockerComposeFile": [ + "../base/docker-compose.yml" + ], + "service": "devcontainer", + "runServices": ["devcontainer"], + "workspaceFolder": "/workspaces", + "postStartCommand": "pnpm install --frozen-lockfile --recursive && pnpm turbo lint test:unit", + "customizations": { + "jetbrains": { + "settings": { + "com.intellij:app:HttpConfigurable.use_proxy_pac": true + } + } + } +} diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index fe88f7cea9..abeaa32085 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -86,18 +86,6 @@ jobs: core_cache_key: ${{ needs.core.outputs.cache_key }} core_cache_path: ${{ needs.core.outputs.cache_path }} - login-quality: - needs: [compile] - uses: ./.github/workflows/login-quality.yml - permissions: - actions: write - id-token: write - with: - ignore-run-cache: ${{ github.event_name == 'workflow_dispatch' || fromJSON(github.run_attempt) > 1 }} - node_version: "20" - secrets: - DEPOT_TOKEN: ${{ secrets.DEPOT_TOKEN }} - container: needs: [compile] uses: ./.github/workflows/container.yml @@ -110,7 +98,6 @@ jobs: login-container: uses: ./.github/workflows/login-container.yml - if: ${{ github.event_name == 'workflow_dispatch' }} permissions: packages: write id-token: write @@ -139,7 +126,6 @@ jobs: lint, container, login-container, - login-quality, e2e, ] if: ${{ github.event_name == 'workflow_dispatch' }} diff --git a/.github/workflows/console.yml b/.github/workflows/console.yml index a6fb0e2d54..04bdcb2227 100644 --- a/.github/workflows/console.yml +++ b/.github/workflows/console.yml @@ -50,7 +50,7 @@ jobs: cache-dependency-path: pnpm-lock.yaml - if: ${{ steps.cache.outputs.cache-hit != 'true' }} name: Install dependencies - run: pnpm install + run: pnpm install --frozen-lockfile - if: ${{ steps.cache.outputs.cache-hit != 'true' }} name: Build console with Turbo run: pnpm turbo build --filter=./console diff --git a/.github/workflows/container.yml b/.github/workflows/container.yml index 33ffd4f6af..f762124e00 100644 --- a/.github/workflows/container.yml +++ b/.github/workflows/container.yml @@ -79,7 +79,7 @@ jobs: context: . cache-from: type=gha cache-to: type=gha,mode=max - file: build/Dockerfile + file: build/zitadel/Dockerfile target: artifact platforms: linux/${{ matrix.arch }} push: true @@ -94,7 +94,7 @@ jobs: context: . cache-from: type=gha cache-to: type=gha,mode=max - file: build/Dockerfile + file: build/zitadel/Dockerfile target: final platforms: linux/${{ matrix.arch }} push: true diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 6251076fd2..ef289463e0 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -46,22 +46,19 @@ jobs: with: against: "https://github.com/${{ github.repository }}.git#branch=${{ github.base_ref }}" - console: + turbo-lint-unit: if: ${{ github.event_name == 'pull_request' }} - name: console - runs-on: ubuntu-latest + name: turbo-lint-unit + runs-on: depot-ubuntu-22.04-8 steps: - name: Checkout uses: actions/checkout@v4 - - uses: pnpm/action-setup@v4 - - uses: actions/setup-node@v4 + - name: Run lint and unit tests in dev container + uses: devcontainers/ci@v0.3 with: - node-version: ${{ inputs.node_version }} - cache: "pnpm" - cache-dependency-path: pnpm-lock.yaml - - run: pnpm install --filter=console - - name: lint - run: make console_lint + push: never + configFile: .devcontainer/turbo-lint-unit/devcontainer.json + runCmd: echo "Successfully ran lint and unit tests in dev container postStartCommand" core: name: core diff --git a/.github/workflows/login-container.yml b/.github/workflows/login-container.yml index 958e0a8f5b..6910bca074 100644 --- a/.github/workflows/login-container.yml +++ b/.github/workflows/login-container.yml @@ -62,10 +62,9 @@ jobs: provenance: true sbom: true targets: login-standalone - set: login-*.context=./login/ project: w47wkxzdtw files: | - ./login/docker-bake.hcl - ./login/docker-bake-release.hcl + ./apps/login/docker-bake.hcl + ./apps/login/docker-bake-release.hcl ./docker-bake.hcl cwd://${{ steps.login-meta.outputs.bake-file }} diff --git a/.github/workflows/login-quality.yml b/.github/workflows/login-quality.yml deleted file mode 100644 index 194ed73c42..0000000000 --- a/.github/workflows/login-quality.yml +++ /dev/null @@ -1,69 +0,0 @@ -name: Login Quality - -on: - workflow_call: - inputs: - ignore-run-cache: - description: "Ignore run caches" - type: boolean - required: true - node_version: - required: true - type: string - secrets: - DEPOT_TOKEN: - required: true - -jobs: - quality: - name: Ensure Quality - runs-on: depot-ubuntu-22.04-8 - timeout-minutes: 30 - permissions: - actions: write - env: - CACHE_DIR: /tmp/login-run-caches - steps: - - uses: actions/checkout@v4 - - uses: depot/setup-action@v1 - - name: Restore Run Caches - uses: actions/cache/restore@v4 - id: run-caches-restore - with: - path: ${{ env.CACHE_DIR }} - key: ${{ runner.os }}-login-run-caches-${{github.ref_name}}-${{ github.sha }}-${{github.run_attempt}} - restore-keys: | - ${{ runner.os }}-login-run-caches-${{github.ref_name}}-${{ github.sha }}- - ${{ runner.os }}-login-run-caches-${{github.ref_name}}- - ${{ runner.os }}-login-run-caches- - - uses: actions/download-artifact@v4 - with: - path: .artifacts - name: zitadel-linux-amd64 - - name: Unpack executable - run: | - tar -xvf .artifacts/zitadel-linux-amd64.tar.gz - mv zitadel-linux-amd64/zitadel ./zitadel - - uses: pnpm/action-setup@v4 - - uses: actions/setup-node@v4 - with: - node-version: ${{ inputs.node_version }} - cache: "pnpm" - cache-dependency-path: pnpm-lock.yaml - - name: Install dependencies - run: pnpm install - - name: Run login quality checks with Turbo - run: pnpm turbo test:unit --filter=@zitadel/login - env: - DEPOT_TOKEN: ${{ secrets.DEPOT_TOKEN }} - LOGIN_BAKE_CLI: depot bake - DEPOT_PROJECT_ID: w47wkxzdtw - IGNORE_RUN_CACHE: ${{ github.event.inputs.ignore-run-cache }} - NODE_VERSION: ${{ inputs.node_version }} - - - name: Save Run Caches - uses: actions/cache/save@v4 - with: - path: ${{ env.CACHE_DIR }} - key: ${{ steps.run-caches-restore.outputs.cache-primary-key }} - if: always() diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index e23c8869c5..bfbc3d6934 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -165,7 +165,7 @@ jobs: run: | gh workflow -R zitadel/zitadel-charts run bump.yml - typescript-packages: + npm-packages: runs-on: ubuntu-latest needs: version if: ${{ github.ref_name == 'next' }} @@ -184,7 +184,7 @@ jobs: - name: Install dependencies working-directory: login - run: pnpm install + run: pnpm install --frozen-lockfile - name: Create Release Pull Request uses: changesets/action@v1 @@ -192,9 +192,10 @@ jobs: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: version: ${{ needs.version.outputs.version }} - cwd: login + cwd: packages + createGithubReleases: false - typescript-repo: + login-repo: runs-on: ubuntu-latest needs: version if: ${{ github.ref_name == 'next' }} diff --git a/.gitignore b/.gitignore index dd694bdeb5..4c3c877a18 100644 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,7 @@ # Test binary, build with `go test -c` *.test +!/**/.env.test # Coverage coverage.txt @@ -68,6 +69,7 @@ docs/docs/apis/proto /internal/api/ui/login/static/resources/themes/zitadel/css/zitadel.css /internal/api/ui/login/static/resources/themes/zitadel/css/zitadel.css.map zitadel-*-* +!apps/**/zitadel-*-* # local build/local/*.env @@ -92,3 +94,6 @@ load-test/output/* # Turbo .turbo/ **/.turbo/ + +# PNPM +.pnpm-store \ No newline at end of file diff --git a/login/.nvmrc b/.nvmrc similarity index 100% rename from login/.nvmrc rename to .nvmrc diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index bfea059cee..4c1ae53072 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,4 +1,5 @@ -# Contributing to ZITADEL +# Contributing to Zitadel + ## Introduction @@ -12,84 +13,28 @@ If you want to give an answer or be part of discussions please be kind. Treat ot ## What can I contribute? -For people who are new to ZITADEL: We flag issues which are a good starting point to start contributing. You find them [here](https://github.com/zitadel/zitadel/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) +For people who are new to Zitadel: We flag issues which are a good starting point to start contributing. +You find them [here](https://github.com/zitadel/zitadel/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) +We add the label "good first issue" for problems we think are a good starting point to contribute to Zitadel. -Make ZITADEL more popular and give it a ⭐ +- [Issues for first time contributors](https://github.com/zitadel/zitadel/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) +- [All issues](https://github.com/zitadel/zitadel/issues) -Help shaping the future of ZITADEL: +Help shaping the future of Zitadel: - Join our [chat](https://zitadel.com/chat) and discuss with us or others. - Ask or answer questions in the [issues section](https://github.com/zitadel/zitadel/issues) - Share your thoughts and ideas in the [discussions section](https://github.com/zitadel/zitadel/discussions) -[Contribute](#how-to-contribute) - -- [Contribute code](#contribute) -- If you found a mistake on our [docs page](https://zitadel.com/docs) or something is missing please read [the docs section](#contribute-docs) -- [Translate](#contribute-internationalization) and improve texts +Make Zitadel more popular and give it a ⭐ Follow [@zitadel](https://twitter.com/zitadel) on twitter -## Quick Start for Contributors +[Contribute](#how-to-contribute) -ZITADEL uses **pnpm** as package manager and **Turbo** for build orchestration across the monorepo. Here are the most common commands you'll need: - -### Prerequisites - -- [Node version v20.x](https://nodejs.org/en/download/) -- [pnpm version 9.x](https://pnpm.io/installation) -- [Docker](https://docs.docker.com/engine/install/) for running databases and services - -### Common Development Commands - -```bash -# Install all dependencies across the monorepo -pnpm install - -# Start the backend database and ZITADEL server -docker compose --file ./e2e/docker-compose.yaml up --detach zitadel - -# Develop the Console (Angular app) -pnpm turbo dev --filter=console - -# Develop the Login UI (Next.js app) -pnpm turbo dev --filter=@zitadel/login - -# Develop the Documentation (Docusaurus) -pnpm turbo dev --filter=zitadel-docs - -# Build everything -pnpm turbo build - -# Lint and fix code across all packages -pnpm turbo lint - -# Run tests -pnpm turbo test - -# Clean up -docker compose --file ./e2e/docker-compose.yaml down -``` - -### Monorepo Structure - -The repository is organized as follows: - -| Package | Description | Technology | Development Command | -| ----------------- | --------------------------- | ------------------- | --------------------------------------------- | -| `console` | Management UI (post-login) | Angular, TypeScript | `pnpm turbo dev --filter=console` | -| `@zitadel/login` | Authentication UI | Next.js, React | `pnpm turbo dev --filter=@zitadel/login` | -| `zitadel-docs` | Documentation site | Docusaurus | `pnpm turbo dev --filter=zitadel-docs` | -| `@zitadel/client` | TypeScript client library | TypeScript | `pnpm turbo build --filter=@zitadel/client` | -| `@zitadel/proto` | Protocol buffer definitions | Protobuf | `pnpm turbo generate --filter=@zitadel/proto` | - -### Development Workflow - -1. **Start the backend**: `docker compose --file ./e2e/docker-compose.yaml up --detach zitadel` -2. **Choose your focus**: Run one of the development commands above -3. **Make changes**: Edit code with live reload feedback -4. **Test your changes**: Use the appropriate test commands -5. **Cleanup**: `docker compose --file ./e2e/docker-compose.yaml down` +- [Contribute code](#contribute) +- If you found a mistake on our [docs page](https://zitadel.com/docs) or something is missing please read [the docs section](contribute-docs) +- [Translate](#contribute-internationalization) and improve texts ## How to contribute @@ -101,6 +46,21 @@ If you are unfamiliar with git have a look at Github's documentation on [creatin Please draft the pull request as soon as possible. Go through the following checklist before you submit the final pull request: +### Components + +The code consists of the following parts: + +| name | description | language | where to find | Development Guide | +| --------------- | -------------------------------------------------- | --------------------------------------------------------------------------------------------------------- | --------------------------------------------------- | -------------------------------------------------- | +| backend | Service that serves the grpc(-web) and RESTful API | [go](https://go.dev) | [API implementation](./internal/api/grpc) | [Contribute to Backend](contribute-backend) | +| API definitions | Specifications of the API | [Protobuf](https://developers.google.com/protocol-buffers) | [./proto/zitadel](./proto/zitadel) | [Contribute to Backend](contribute-backend) | +| console | Frontend the user interacts with after log in | [Angular](https://angular.io), [Typescript](https://www.typescriptlang.org) | [./console](./console) | [Contribute to Frontend](contribute-frontend) | +| login | Modern authentication UI built with Next.js | [Next.js](https://nextjs.org), [React](https://reactjs.org), [TypeScript](https://www.typescriptlang.org) | [./login](./login) | [Contribute to Frontend](contribute-frontend) | +| docs | Project documentation made with docusaurus | [Docusaurus](https://docusaurus.io/) | [./docs](./docs) | [Contribute to Frontend](contribute-frontend) | +| translations | Internationalization files for default languages | YAML | [./console](./console) and [./internal](./internal) | [Contribute Translations](contribute-translations) | + +Please follow the guides to validate and test the code before you contribute. + ### Submit a pull request (PR) 1. [Fork](https://docs.github.com/en/get-started/quickstart/fork-a-repo) the [zitadel/zitadel](https://github.com/zitadel/zitadel) repository on GitHub @@ -165,27 +125,6 @@ Please make sure you cover your changes with tests before marking a Pull Request - [ ] Integration tests ensure that certain commands emit expected events that trigger notifications. - [ ] Integration tests ensure that certain events trigger expected notifications. -## Contribute - -The code consists of the following parts: - -| name | description | language | where to find | -| --------------- | -------------------------------------------------- | --------------------------------------------------------------------------------------------------------- | ----------------------------------------- | -| backend | Service that serves the grpc(-web) and RESTful API | [go](https://go.dev) | [API implementation](./internal/api/grpc) | -| console | Frontend the user interacts with after log in | [Angular](https://angular.io), [Typescript](https://www.typescriptlang.org) | [./console](./console) | -| login | Modern authentication UI built with Next.js | [Next.js](https://nextjs.org), [React](https://reactjs.org), [TypeScript](https://www.typescriptlang.org) | [./login](./login) | -| API definitions | Specifications of the API | [Protobuf](https://developers.google.com/protocol-buffers) | [./proto/zitadel](./proto/zitadel) | -| docs | Project documentation made with docusaurus | [Docusaurus](https://docusaurus.io/) | [./docs](./docs) | - -**Important**: This repository uses **pnpm** as package manager and **Turbo** for build orchestration. All frontend packages (console, login, docs) are managed as a monorepo with shared dependencies and optimized builds. - -Please validate and test the code before you contribute. - -We add the label "good first issue" for problems we think are a good starting point to contribute to ZITADEL. - -- [Issues for first time contributors](https://github.com/zitadel/zitadel/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) -- [All issues](https://github.com/zitadel/zitadel/issues) - ### General Guidelines #### Gender Neutrality and Inclusive Language @@ -206,34 +145,62 @@ Choose alternative words depending on the context. ### API -ZITADEL follows an API first approach. This means all features can not only be accessed via the UI but also via the API. +Zitadel follows an API first approach. This means all features can not only be accessed via the UI but also via the API. The API is designed to be used by different clients, such as web applications, mobile applications, and other services. Therefore, the API is designed to be easy to use, consistent, and reliable. Please check out the dedicated [API guidelines](./API_DESIGN.md) page when contributing to the API. -### Developing ZITADEL with Dev Containers -Follow the instructions provided by your code editor/IDE to initiate the development container. This typically involves opening the "Command Palette" or similar functionality and searching for commands related to "Dev Containers" or "Remote Containers". The quick start guide for VS Code can found [here](https://code.visualstudio.com/docs/devcontainers/containers#_quick-start-open-an-existing-folder-in-a-container) +#### Developing Zitadel with Dev Containers -When you are connected to the container run the following commands to start ZITADEL. +You can use dev containers if you'd like to make sure you have the same development environment like the corresponding GitHub PR checks use. +The following dev containers are available: + +- **.devcontainer/base/devcontainer.json**: Contains everything you need to run whatever you want. +- **.devcontainer/turbo-lint-unit/devcontainer.json**: Runs a dev container that executes frontent linting and unit tests and then exits. This is useful to reproduce the corresponding GitHub PR check. +- **.devcontainer/turbo-lint-unit-debug/devcontainer.json**: Runs a dev container that executes frontent linting and unit tests in watch mode. You can fix the errors right away and have immediate feedback. +- **.devcontainer/login-integration/devcontainer.json**: Runs a dev container that executes login integration tests and then exits. This is useful to reproduce the corresponding GitHub PR check. +- **.devcontainer/login-integration-debug/devcontainer.json**: Runs a dev container that spins up the login in a hot-reloading dev server and executes login integration tests interactively. You can fix the errors right away and have immediate feedback. + +You can also run the GitHub PR checks locally in dev containers without having to connect to a dev container. + + +The following pnpm commands use the [devcontainer CLI](https://github.com/devcontainers/cli/) and exit when the checks are done. +The minimal system requirements are having Docker and the devcontainers CLI installed. +If you don't have the node_modules installed already, you need to install the devcontainers CLI manually. Run `npm i -g @devcontainers/cli`. Alternatively, the [official Microsoft VS Code extension for Dev Containers](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers) offers a command `Dev Containers: Install devcontainer CLI` + + +```bash +npm run devcontainer:lint-unit +npm run devcontainer:integration:login +``` + +If you don't have NPM installed, copy and execute the scripts from the package.json directly. + +To connect to a dev container to have full IDE support, follow the instructions provided by your code editor/IDE to initiate the dev container. +This typically involves opening the "Command Palette" or similar functionality and searching for commands related to "Dev Containers" or "Remote Containers". +The quick start guide for VS Code can found [here](https://code.visualstudio.com/docs/devcontainers/containers#_quick-start-open-an-existing-folder-in-a-container) + +For example, to build and run the Zitadel binary in a dev container, connect your IDE to the dev container described in .devcontainer/base/devcontainer.json. +Run the following commands inside the container to start Zitadel. ```bash make compile && ./zitadel start-from-init --masterkey MasterkeyNeedsToHave32Characters --tlsMode disabled ``` -ZITADEL serves traffic as soon as you can see the following log line: +Zitadel serves traffic as soon as you can see the following log line: `INFO[0001] server is listening on [::]:8080` -### Backend/login +## Contribute Backend Code -By executing the commands from this section, you run everything you need to develop the ZITADEL backend locally. +By executing the commands from this section, you run everything you need to develop the Zitadel backend locally. Using [Docker Compose](https://docs.docker.com/compose/), you run a [PostgreSQL](https://www.postgresql.org/download/) on your local machine. -With [make](https://www.gnu.org/software/make/), you build a debuggable ZITADEL binary and run it using [delve](https://github.com/go-delve/delve). +With [make](https://www.gnu.org/software/make/), you build a debuggable Zitadel binary and run it using [delve](https://github.com/go-delve/delve). Then, you test your changes via the console your binary is serving at http://localhost:8080 and by verifying the database. Once you are happy with your changes, you run end-to-end tests and tear everything down. -ZITADEL uses [golangci-lint](https://golangci-lint.run) for code quality checks. Please use [this configuration](.golangci.yaml) when running `golangci-lint`. We recommend to set golangci-lint as linter in your IDE. +Zitadel uses [golangci-lint](https://golangci-lint.run) for code quality checks. Please use [this configuration](.golangci.yaml) when running `golangci-lint`. We recommend to set golangci-lint as linter in your IDE. The commands in this section are tested against the following software versions: @@ -262,10 +229,10 @@ make compile > Build the binary: `make compile` You can now run and debug the binary in .artifacts/zitadel/zitadel using your favourite IDE, for example GoLand. -You can test if ZITADEL does what you expect by using the UI at http://localhost:8080/ui/console. +You can test if Zitadel does what you expect by using the UI at http://localhost:8080/ui/console. Also, you can verify the data by running `psql "host=localhost dbname=zitadel sslmode=disable"` and running SQL queries. -#### Run Local Unit Tests +### Run Local Unit Tests To test the code without dependencies, run the unit tests: @@ -273,11 +240,11 @@ To test the code without dependencies, run the unit tests: make core_unit_test ``` -#### Run Local Integration Tests +### Run Local Integration Tests -Integration tests are run as gRPC clients against a running ZITADEL server binary. +Integration tests are run as gRPC clients against a running Zitadel server binary. The server binary is typically [build with coverage enabled](https://go.dev/doc/build-cover). -It is also possible to run a ZITADEL sever in a debugger and run the integrations tests like that. In order to run the server, a database is required. +It is also possible to run a Zitadel sever in a debugger and run the integrations tests like that. In order to run the server, a database is required. In order to prepare the local system, the following will bring up the database, builds a coverage binary, initializes the database and starts the sever. @@ -300,7 +267,7 @@ To run all available integration tests: make core_integration_test_packages ``` -When you change any ZITADEL server code, be sure to rebuild and restart the server before the next test run. +When you change any Zitadel server code, be sure to rebuild and restart the server before the next test run. ```bash make core_integration_server_stop core_integration_server_start @@ -314,17 +281,17 @@ make core_integration_server_stop core_integration_db_down The test binary has the race detector enabled. `core_core_integration_server_stop` checks for any race logs reported by Go and will print them along a `66` exit code when found. Note that the actual race condition may have happened anywhere during the server lifetime, including start, stop or serving gRPC requests during tests. -#### Run Local End-to-End Tests +### Run Local End-to-End Tests To test the whole system, including the console UI and the login UI, run the E2E tests. ```bash # Build the production docker image -export ZITADEL_IMAGE=zitadel:local GOOS=linux +export Zitadel_IMAGE=zitadel:local GOOS=linux make docker_image # If you made changes in the e2e directory, make sure you reformat the files -pnpm turbo lint --filter=e2e +pnpm turbo lint:fix --filter=e2e # Run the tests docker compose --file ./e2e/docker-compose.yaml run --service-ports e2e @@ -337,7 +304,7 @@ When you are happy with your changes, you can cleanup your environment. docker compose --file ./e2e/docker-compose.yaml down ``` -#### Run Local End-to-End Tests Against Your Dev Server Console +### Run Local End-to-End Tests Against Your Dev Server Console If you also make [changes to the console](#console), you can run the test suite against your locally built backend code and frontend server. @@ -346,10 +313,10 @@ If you also make [changes to the console](#console), you can run the test suite pnpm install # Run the tests interactively -cd ./e2e && pnpm run open:golangangular +pnpm run open:golangangular # Run the tests non-interactively -cd ./e2e && pnpm run e2e:golangangular +pnpm run e2e:golangangular ``` When you are happy with your changes, you can cleanup your environment. @@ -359,23 +326,38 @@ When you are happy with your changes, you can cleanup your environment. docker compose --file ./e2e/docker-compose.yaml down ``` -### Console +## Contribute Frontend Code -By executing the commands from this section, you run everything you need to develop the console locally. -Using [Docker Compose](https://docs.docker.com/compose/), you run [PostgreSQL](https://www.postgresql.org/download/) and the [latest release of ZITADEL](https://github.com/zitadel/zitadel/releases/latest) on your local machine. -You use the ZITADEL container as backend for your console. -The console is run in your [Node](https://nodejs.org/en/about/) environment using [a local development server for Angular](https://angular.io/cli/serve#ng-serve), so you have fast feedback about your changes. +This repository uses **pnpm** as package manager and **Turbo** for build orchestration. +All frontend packages are managed as a monorepo with shared dependencies and optimized builds: -We use **pnpm** as package manager and **Turbo** for build orchestration. Use angular-eslint/Prettier for linting/formatting, so please run `pnpm turbo lint --filter=console` before committing. (VSCode users, check out [this ESLint extension](https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint) and [this Prettier extension](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode) to fix lint and formatting issues in development) +- [apps/login](contribute-login) (depends on packages/zitadel-client and packages/zitadel-proto) +- apps/login/integration +- apps/login/acceptance +- [console](contribute-console) (depends on packages/zitadel-client) +- packages/zitadel-client +- packages/zitadel-proto +- [docs](contribute-docs) -Once you are happy with your changes, you run end-to-end tests and tear everything down. +### Frontend Development Requirements + +The frontend components are run in a [Node](https://nodejs.org/en/about/) environment and are managed using the pnpm package manager and the Turborepo orchestrator. + +> [!INFO] +> Some [dev containers are available](dev-containers) for remote development with docker and pipeline debugging in isolated environments. +> If you don't want to use one of the dev containers, you can develop the frontend components directly on your local machine. +> To do so, proceed with installing the necessary dependencies. + +We use **pnpm** as package manager and **Turbo** for build orchestration. Use angular-eslint/Prettier for linting/formatting. +VSCode users, check out [this ESLint extension](https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint) and [this Prettier extension](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode) to fix lint and formatting issues during development. The commands in this section are tested against the following software versions: - [Docker version 20.10.17](https://docs.docker.com/engine/install/) - [Node version v20.x](https://nodejs.org/en/download/) - [pnpm version 9.x](https://pnpm.io/installation) -- [Cypress runtime dependencies](https://docs.cypress.io/guides/continuous-integration/introduction#Dependencies) + +To run tests with Cypress, ensure you have installed the required [Cypress runtime dependencies](https://docs.cypress.io/guides/continuous-integration/introduction#Dependencies)
Note for WSL2 on Windows 10 @@ -387,131 +369,19 @@ The commands in this section are tested against the following software versions: 4. When starting XLaunch, make sure to disable access control
-Run the database and the latest backend locally. +### Contribute to Login -```bash -# Start from the root of the repository -# You just need the db and the zitadel services to develop the console against. -docker compose --file ./e2e/docker-compose.yaml up --detach zitadel -``` +The Login UI is a Next.js application that provides the user interface for authentication flows. +It's located in the `apps/login` directory and uses pnpm and Turbo for development. -When the backend is ready, you have the latest zitadel exposed at http://localhost:8080. -You can now run a local development server with live code reloading at http://localhost:4200. -To allow console access via http://localhost:4200, you have to configure the ZITADEL backend. - -1. Navigate to . -2. When prompted, login with _zitadel-admin@zitadel.localhost_ and _Password1!_ -3. Select the _ZITADEL_ project. -4. Select the _Console_ application. -5. Select _Redirect Settings_ -6. Add _http://localhost:4200/auth/callback_ to the _Redirect URIs_ -7. Add _http://localhost:4200/signedout_ to the _Post Logout URIs_ -8. Select the _Save_ button - -You can run the local console development server now. - -```bash -# Install dependencies (from repository root) -pnpm install - -# Option 1: Run console development server with Turbo (recommended) -pnpm turbo dev --filter=console - -# Option 2: Run console development server directly -cd ./console && pnpm start - -# Option 3: Build and serve console (production build) -pnpm turbo build --filter=console -cd ./console && pnpm serve - -# If you don't want to develop against http://localhost:8080, you can use another environment -ENVIRONMENT_JSON_URL=https://my-cloud-instance-abcdef.zitadel.cloud/ui/console/assets/environment.json pnpm turbo dev --filter=console -``` - -Navigate to http://localhost:4200/. -Make some changes to the source code and see how the browser is automatically updated. - -#### Console Development Scripts - -Here are the most useful scripts for console development: - -```bash -# Generate protobuf files (happens automatically with Turbo dependencies) -pnpm turbo generate --filter=console - -# Run development server with live reload -pnpm turbo dev --filter=console - -# Build for production -pnpm turbo build --filter=console - -# Lint and fix code -pnpm turbo lint --filter=console - -# Run unit tests -pnpm turbo test --filter=console - -# Run all console-related tasks -pnpm turbo dev lint test --filter=console -``` - -After making changes to the code, you should run the end-to-end-tests. -Open another shell. - -```bash -# Reformat your console code using Turbo -pnpm turbo lint --filter=console - -# Change to the e2e directory -cd ./e2e - -# If you made changes in the e2e directory, make sure you reformat the files here too -pnpm run lint:fix - -# Install pnpm dependencies -pnpm install - -# Run all e2e tests -pnpm run e2e:angular -- --headed -``` - -You can also open the test suite interactively for fast feedback on specific tests. - -```bash -# Run tests interactively -pnpm run open:angular -``` - -If you also make [changes to the backend code](#backend--login), you can run the test against your locally built backend code and frontend server - -```bash -pnpm run open:golangangular -pnpm run e2e:golangangular -``` - -When you are happy with your changes, you can format your code and cleanup your environment - -```bash -# Stop and remove the docker containers for zitadel and the database -docker compose --file ./e2e/docker-compose.yaml down -``` - -### Login UI - -The Login UI is a Next.js application that provides the user interface for authentication flows. It's located in the `./login` directory and uses pnpm and Turbo for development. - -#### Prerequisites - -- [Node version v20.x](https://nodejs.org/en/download/) -- [pnpm version 9.x](https://pnpm.io/installation) -- [Docker](https://docs.docker.com/engine/install/) for running the backend +To start developing the login, make sure your system has the [required system dependencies](frontend-dev-requirements) installed. #### Development Setup ```bash # Start from the root of the repository -# Start the database and ZITADEL backend -docker compose --file ./e2e/docker-compose.yaml up --detach zitadel +# Start the database and Zitadel backend +docker compose --file ./apps/login/acceptance/docker-compose.yaml up --detach zitadel # Install dependencies pnpm install @@ -519,52 +389,19 @@ pnpm install # Option 1: Run login development server with Turbo (recommended) pnpm turbo dev --filter=@zitadel/login -# Option 2: Run login development server directly -cd ./login && pnpm dev - -# Option 3: Build and serve login (production build) +# Option 2: Build and serve login (production build) pnpm turbo build --filter=@zitadel/login cd ./login && pnpm start ``` -The login UI will be available at http://localhost:3000. - -#### Login Development Scripts - -Here are the most useful scripts for login development: - -```bash -# Generate protobuf files (happens automatically with Turbo dependencies) -pnpm turbo generate --filter=@zitadel/login - -# Run development server with live reload -pnpm turbo dev --filter=@zitadel/login - -# Build for production -pnpm turbo build --filter=@zitadel/login - -# Lint and fix code -pnpm turbo lint --filter=@zitadel/login - -# Run unit tests -pnpm turbo test:unit --filter=@zitadel/login - -# Run integration tests -pnpm turbo test:integration --filter=@zitadel/login - -# Run acceptance tests -pnpm turbo test:acceptance --filter=@zitadel/login - -# Run all login-related tasks -pnpm turbo dev lint test:unit --filter=@zitadel/login -``` +The login UI is available at http://localhost:3000. #### Login Architecture The login application consists of multiple packages: - `@zitadel/login` - Main Next.js application -- `@zitadel/client` - TypeScript client library for ZITADEL APIs +- `@zitadel/client` - TypeScript client library for Zitadel APIs - `@zitadel/proto` - Protocol buffer definitions and generated code The build process uses Turbo to orchestrate dependencies: @@ -573,34 +410,98 @@ The build process uses Turbo to orchestrate dependencies: 2. Client library build (`@zitadel/client#build`) 3. Login application build (`@zitadel/login#build`) -#### Testing the Login UI +#### Pass Quality Checks + +Reproduce the pipelines linting and testing for the login. ```bash -# Run unit tests -pnpm turbo test:unit --filter=@zitadel/login - -# Run integration tests (requires running backend) -pnpm turbo test:integration --filter=@zitadel/login - -# Run acceptance tests -pnpm turbo test:acceptance --filter=@zitadel/login - -# Run all tests -pnpm turbo test:unit test:integration test:acceptance --filter=@zitadel/login +pnpm turbo quality --filter=./apps/login/* --filter=./packages/* ``` -When you are happy with your changes, cleanup your environment: +Fix the [quality checks](troubleshoot-frontend), add new checks that cover your changes and mark your pull request as ready for review when the pipeline checks pass. + +### Contribute to Console + +To start developing the console, make sure your system has the [required system dependencies](frontend-dev-requirements) installed. +Then, you need to decide which Zitadel instance you would like to target. +- The easiest starting point is to [configure your environment](console-dev-existing-zitadel) to use a [Zitadel cloud](https://zitadel.com) instance. +- Alternatively, you can [start a local Zitadel instance from scratch and develop against it](console-dev-local-zitadel). + +#### Develop against an already running Zitadel instance + +By default, `pnpm dev --filter=console` targets a Zitadel API running at http://localhost:8080. +To change this, export the link to your environment.json in your environment variables. ```bash -# Stop and remove the docker containers -docker compose --file ./e2e/docker-compose.yaml down +export ENVIRONMENT_JSON_URL=https://my-cloud-instance-abcdef.us1.zitadel.cloud/ui/console/assets/environment.json ``` -## Contribute docs +Proceed [with configuring your console redirect URIs](console-redirect). + +#### Develop against a local Zitadel instance from scratch + +By executing the commands from this section, you run everything you need to develop the console locally. +Using [Docker Compose](https://docs.docker.com/compose/), you run [PostgreSQL](https://www.postgresql.org/download/) and the [latest release of Zitadel](https://github.com/zitadel/zitadel/releases/latest) on your local machine. +You use the Zitadel container as backend for your console. + +Run the database and the latest backend locally. + +```bash +# Start from the root of the repository +# You just need the db and the zitadel services to develop the console against. +docker compose --file ./e2e/docker-compose.yaml up --detach zitadel +``` + +When Zitadel accepts traffic, navigate to http://localhost:8080/ui/console/projects?login_hint=zitadel-admin@zitadel.localhost and log in with _Password1!_. + +Proceed [with configuring your console redirect URIs](console-redirect). + +#### Configure Console redirect URI + +To allow console access via http://localhost:4200, you have to configure the Zitadel backend. + +1. Navigate to /ui/console/projects in your target Zitadel instance. +3. Select the _Zitadel_ project. +4. Select the _Console_ application. +5. Select _Redirect Settings_ +6. Add _http://localhost:4200/auth/callback_ to the _Redirect URIs_ +7. Add _http://localhost:4200/signedout_ to the _Post Logout URIs_ +8. Select the _Save_ button + +#### Develop + +Run the local console development server. + +```bash +# Install dependencies (from repository root) +pnpm install + +# Option 1: Run console development server with live reloading and dependency rebuilds +pnpm turbo dev --filter=console + +# Option 2: Build and serve console (production build) +pnpm turbo build --filter=console +pnpm turbo serve --filter=console +``` + +Navigate to http://localhost:4200/. +Make some changes to the source code and see how the browser is automatically updated. + +#### Pass Quality Checks + +Reproduce the pipelines linting and testing for the console. + +```bash +pnpm turbo quality --filter=console --filter=e2e +``` + +Fix the [quality checks](troubleshoot-frontend), add new checks that cover your changes and mark your pull request as ready for review when the pipeline checks pass. + +### Contribute to Docs Project documentation is made with Docusaurus and is located under [./docs](./docs). The documentation uses **pnpm** and **Turbo** for development and build processes. -### Local Development +#### Local Development ```bash # Install dependencies (from repository root) @@ -609,35 +510,11 @@ pnpm install # Option 1: Run docs development server with Turbo (recommended) pnpm turbo dev --filter=zitadel-docs -# Option 2: Run docs development server directly -cd ./docs && pnpm start - -# Option 3: Build and serve docs (production build) +# Option 2: Build and serve docs (production build) pnpm turbo build --filter=zitadel-docs cd ./docs && pnpm serve ``` -#### Docs Development Scripts - -Here are the most useful scripts for docs development: - -```bash -# Generate API documentation and configuration docs -pnpm turbo generate --filter=zitadel-docs - -# Run development server with live reload -pnpm turbo dev --filter=zitadel-docs - -# Build for production -pnpm turbo build --filter=zitadel-docs - -# Lint and fix code -pnpm turbo lint --filter=zitadel-docs - -# Run all docs-related tasks -pnpm turbo dev lint build --filter=zitadel-docs -``` - The docs build process automatically: 1. Downloads required protoc plugins @@ -646,11 +523,11 @@ The docs build process automatically: 4. Copies configuration files 5. Builds the Docusaurus site -### Local testing +#### Local testing The documentation server will be available at http://localhost:3000 with live reload for fast development feedback. -### Style guide +#### Style guide - **Code with variables**: Make sure that code snippets can be used by setting environment variables, instead of manually replacing a placeholder. - **Embedded files**: When embedding mdx files, make sure the template ist prefixed by "\_" (lowdash). The content will be rendered inside the parent page, but is not accessible individually (eg, by search). @@ -666,14 +543,54 @@ The style guide covers a lot of material, so their [highlights](https://develope - Use active voice: make clear who's performing the action. - Use descriptive link text. -### Docs pull request +#### Docs pull request When making a pull request use `docs(): ` as title for the semantic release. Scope can be left empty (omit the brackets) or refer to the top navigation sections. -## Contribute internationalization +#### Pass Quality Checks -ZITADEL loads translations from four files: +Reproduce the pipelines linting checks for the docs. + +```bash +pnpm turbo quality --filter=docs +``` + +Fix the [quality checks](troubleshoot-frontend), add new checks that cover your changes and mark your pull request as ready for review when the pipeline checks pass. + +### Troubleshoot Frontend Quality Checks + +To debug and fix failing tasks, execute them individually using the `--filter` flag. + +We recommend to use [one of the dev containers](dev-containers) to reproduce pipeline issues. + +```bash +# to reproduce linting error in the console: +pnpm lint --filter=console +# To fix them: +pnpm lint:fix --filter=console +``` + +More tasks that are runnable on-demand. +Some tasks have variants like `pnpm test:e2e:angulargolang`, +others support arguments and flags like `pnpm test:integration run --spec apps/login/integration/integration/login.cy.ts`. +For the turbo commands, check your options with `pnpm turbo --help` + +| Command | Description | Example | +| ------------------------- | -------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `pnpm turbo run generate` | Generate stubs from Proto files | Generate API docs: `pnpm turbo run generate --filter zitadel-docs` | +| `pnpm turbo build` | Build runnable JavaScript code | Regenerate the proto stubs and build the @zitadel/client package: `pnpm turbo build --filter @zitadel/client` | +| `pnpm turbo quality` | Reproduce the pipeline quality checks | Run login-related quality checks `pnpm turbo quality --filter './apps/login/*' --filter './packages/*'` | +| `pnpm turbo lint` | Check linting issues | Check login-related linting issues for differences with main `pnpm turbo lint --filter=[main...HEAD] --filter .'/apps/login/**/*' --filter './packages/*'` | +| `pnpm turbo lint:fix` | Fix linting issues | Fix console-relevant linting issues `pnpm turbo lint:fix --filter console --filter './packages/*' --filter zitadel-e2e` | +| `pnpm turbo test:unit` | Run unit tests. Rerun on file changes | Run unit tests in all packages in and watch for file changes `pnpm turbo watch test:unit` | +| `pnpm turbo test:e2e` | Run the Cypress CLI for console e2e tests | Test interactively against the console in a local dev server and Zitadel in a container: `pnpm turbo test:e2e:angular open` | +| `pnpm turbo down` | Remove containers and volumes | Shut down containers from the integration test setup `pnpm turbo down` | +| `pnpm turbo clean` | Remove downloaded dependencies and other generated files | Remove generated docs `pnpm turbo clean --filter zitadel-docs` | + +## Contribute Translations + +Zitadel loads translations from four files: - [Console texts](./console/src/assets/i18n) - [Login interface](./internal/api/ui/login/static/i18n) @@ -691,7 +608,7 @@ You also have to add some changes to the following files: - [Customized Text Docs](./docs/docs/guides/manage/customize/texts.md) - [Add language option](./internal/api/ui/login/static/templates/external_not_found_option.html) -## Want to start ZITADEL? +## Want to start Zitadel? You can find an installation guide for all the different environments here: [https://zitadel.com/docs/self-hosting/deploy/overview](https://zitadel.com/docs/self-hosting/deploy/overview) @@ -702,14 +619,14 @@ You can find an installation guide for all the different environments here: ## Product management -The ZITADEL Team works with an agile product management methodology. +The Zitadel Team works with an agile product management methodology. You can find all the issues prioritized and ordered in the [product board](https://github.com/orgs/zitadel/projects/2/views/1). ### Sprint We want to deliver a new release every second week. So we plan everything in two-week sprints. Each Tuesday we estimate new issues and on Wednesday the last sprint will be reviewed and the next one will be planned. -After a sprint ends a new version of ZITADEL will be released, and publish to [ZITADEL Cloud](https://zitadel.cloud) the following Monday. +After a sprint ends a new version of Zitadel will be released, and publish to [Zitadel Cloud](https://zitadel.cloud) the following Monday. If there are some critical or urgent issues we will have a look at it earlier, than the two weeks. To show the community the needed information, each issue gets attributes and labels. @@ -729,15 +646,16 @@ The state should reflect the progress of the issue and what is going on right no - **🔖 Ready**: The issue is ready to take into a sprint. Difference to "prioritized..." is that the complexity is defined by the team. - **📋 Sprint backlog**: The issue is scheduled for the current sprint. - **🏗 In progress**: Someone is working on this issue right now. The issue will get an assignee as soon as it is in progress. +- **❌ Blocked**: The issue is blocked until another issue is resolved/done. - **👀 In review**: The issue is in review. Please add someone to review your issue or let us know that it is ready to review with a comment on your pull request. - **✅ Done**: The issue is implemented and merged to main. #### Priority -Priority shows you the priority the ZITADEL team has given this issue. In general the higher the demand from customers and community for the feature, the higher the priority. +Priority shows you the priority the Zitadel team has given this issue. In general the higher the demand from customers and community for the feature, the higher the priority. - **🌋 Critical**: This is a security issue or something that has to be fixed urgently, because the software is not usable or highly vulnerable. -- **🏔 High**: These are the issues the ZITADEL team is currently focusing on and will be implemented as soon as possible. +- **🏔 High**: These are the issues the Zitadel team is currently focusing on and will be implemented as soon as possible. - **🏕 Medium**: After all the high issues are done these will be next. - **🏝 Low**: This is low in priority and will probably not be implemented in the next time or just if someone has some time in between. @@ -752,18 +670,18 @@ Everything that is higher than 8 should be split in smaller parts. There are a few general labels that don't belong to a specific category. -- **good first issue**: This label shows contributors, that it is an easy entry point to start developing on ZITADEL. -- **help wanted**: The author is seeking help on this topic, this may be from an internal ZITADEL team member or external contributors. +- **good first issue**: This label shows contributors, that it is an easy entry point to start developing on Zitadel. +- **help wanted**: The author is seeking help on this topic, this may be from an internal Zitadel team member or external contributors. #### Category -The category shows which part of ZITADEL is affected. +The category shows which part of Zitadel is affected. - **category: backend**: The backend includes the APIs, event store, command and query side. This is developed in golang. - **category: ci**: ci is all about continues integration and pipelines. -- **category: design**: All about the ux/ui of ZITADEL +- **category: design**: All about the ux/ui of Zitadel - **category: docs**: Adjustments or new documentations, this can be found in the docs folder. -- **category: frontend**: The frontend concerns on the one hand the ZITADEL management console (Angular) and on the other hand the login (gohtml) +- **category: frontend**: The frontend concerns on the one hand the Zitadel management console (Angular) and on the other hand the login (gohtml) - **category: infra**: Infrastructure does include many different parts. E.g Terraform-provider, docker, metrics, etc. - **category: translation**: Everything concerning translations or new languages diff --git a/LICENSING.md b/LICENSING.md index 259a0d5070..ca4717afa5 100644 --- a/LICENSING.md +++ b/LICENSING.md @@ -23,6 +23,7 @@ The following files and directories, including their subdirectories, are license ``` login/ +clients/ ``` ## Community Contributions diff --git a/Makefile b/Makefile index 0232d42528..ad561ab725 100644 --- a/Makefile +++ b/Makefile @@ -27,7 +27,7 @@ docker_image: else \ echo "Reusing precompiled zitadel binary"; \ fi - DOCKER_BUILDKIT=1 docker build -f build/Dockerfile -t $(ZITADEL_IMAGE) . + DOCKER_BUILDKIT=1 docker build -f build/zitadel/Dockerfile -t $(ZITADEL_IMAGE) . .PHONY: compile_pipeline compile_pipeline: console_move @@ -97,17 +97,11 @@ console_move: .PHONY: console_dependencies console_dependencies: - pnpm install - -.PHONY: console_client -console_client: - cd console && \ - pnpm generate + npx pnpm install --frozen-lockfile --filter=./console .PHONY: console_build -console_build: console_dependencies console_client - cd console && \ - pnpm build +console_build: console_dependencies + npx pnpm turbo build --filter=./console .PHONY: clean clean: @@ -165,7 +159,7 @@ core_integration_test: core_integration_server_start core_integration_test_packa .PHONY: console_lint console_lint: - pnpm turbo lint --filter=./console + npx pnpm turbo lint --filter=./console .PHONY: core_lint core_lint: @@ -177,15 +171,15 @@ core_lint: .PHONY: login_pull login_pull: login_ensure_remote - @echo "Pulling changes from the 'login' subtree on remote $(LOGIN_REMOTE_NAME) branch $(LOGIN_REMOTE_BRANCH)" + @echo "Pulling changes from the 'apps/login' subtree on remote $(LOGIN_REMOTE_NAME) branch $(LOGIN_REMOTE_BRANCH)" git fetch $(LOGIN_REMOTE_NAME) $(LOGIN_REMOTE_BRANCH) git merge -s ours --allow-unrelated-histories $(LOGIN_REMOTE_NAME)/$(LOGIN_REMOTE_BRANCH) -m "Synthetic merge to align histories" git push .PHONY: login_push login_push: login_ensure_remote - @echo "Pushing changes to the 'login' subtree on remote $(LOGIN_REMOTE_NAME) branch $(LOGIN_REMOTE_BRANCH)" - git subtree split --prefix=login -b login-sync-tmp + @echo "Pushing changes to the 'apps/login' subtree on remote $(LOGIN_REMOTE_NAME) branch $(LOGIN_REMOTE_BRANCH)" + git subtree split --prefix=apps/login -b login-sync-tmp git checkout login-sync-tmp git fetch $(LOGIN_REMOTE_NAME) main git merge -s ours --allow-unrelated-histories $(LOGIN_REMOTE_NAME)/main -m "Synthetic merge to align histories" @@ -200,16 +194,3 @@ login_ensure_remote: else \ echo "Remote $(LOGIN_REMOTE_NAME) already exists."; \ fi - -export LOGIN_DIR := ./login/ -export LOGIN_BAKE_CLI_ADDITIONAL_ARGS := --set login-*.context=./login/ --file ./docker-bake.hcl -export ZITADEL_TAG ?= $(ZITADEL_IMAGE) -include login/Makefile - -# Intentional override of login_test_acceptance_build -login_test_acceptance_build: docker_image - @echo "Building login test acceptance environment with the local zitadel image" - $(MAKE) login_test_acceptance_build_compose login_test_acceptance_build_bake - -login_dev: docker_image typescript_generate login_test_acceptance_build_compose login_test_acceptance_cleanup login_test_acceptance_setup_dev - @echo "Starting login test environment with the local zitadel image" diff --git a/apps/login/.dockerignore b/apps/login/.dockerignore new file mode 100644 index 0000000000..4e64fd495f --- /dev/null +++ b/apps/login/.dockerignore @@ -0,0 +1,21 @@ +* + +!constants +!scripts +!src +!public +!locales +!next.config.mjs +!next-env-vars.d.ts +!next-env.d.ts +!tailwind.config.js +!tsconfig.json +!package.json +!pnpm-lock.yaml + +**/*.md +**/*.png +**/node_modules +**/.turbo +**/*.test.ts +**/*.test.tsx \ No newline at end of file diff --git a/apps/login/.env.test b/apps/login/.env.test new file mode 100644 index 0000000000..134fdb5669 --- /dev/null +++ b/apps/login/.env.test @@ -0,0 +1,5 @@ +NEXT_PUBLIC_BASE_PATH="/ui/v2/login" +ZITADEL_API_URL=http://mock-zitadel:22222 +ZITADEL_SERVICE_USER_TOKEN="yolo" +EMAIL_VERIFICATION=true +DEBUG=true diff --git a/login/apps/login/.eslintrc.cjs b/apps/login/.eslintrc.cjs similarity index 79% rename from login/apps/login/.eslintrc.cjs rename to apps/login/.eslintrc.cjs index 76ad0c10d8..d704a7f0c3 100644 --- a/login/apps/login/.eslintrc.cjs +++ b/apps/login/.eslintrc.cjs @@ -7,7 +7,10 @@ module.exports = { "@next/next/no-img-element": "off", "react/no-unescaped-entities": "off", "no-unused-vars": "off", - "@typescript-eslint/no-unused-vars": ["error", { argsIgnorePattern: "^_" }], + "@typescript-eslint/no-unused-vars": ["error", { + argsIgnorePattern: "^_" , + varsIgnorePattern: "^_" , + }], "no-undef": "off", }, parserOptions: { diff --git a/login/.github/ISSUE_TEMPLATE/bug.yaml b/apps/login/.github/ISSUE_TEMPLATE/bug.yaml similarity index 100% rename from login/.github/ISSUE_TEMPLATE/bug.yaml rename to apps/login/.github/ISSUE_TEMPLATE/bug.yaml diff --git a/login/.github/ISSUE_TEMPLATE/config.yml b/apps/login/.github/ISSUE_TEMPLATE/config.yml similarity index 100% rename from login/.github/ISSUE_TEMPLATE/config.yml rename to apps/login/.github/ISSUE_TEMPLATE/config.yml diff --git a/login/.github/ISSUE_TEMPLATE/docs.yaml b/apps/login/.github/ISSUE_TEMPLATE/docs.yaml similarity index 100% rename from login/.github/ISSUE_TEMPLATE/docs.yaml rename to apps/login/.github/ISSUE_TEMPLATE/docs.yaml diff --git a/login/.github/ISSUE_TEMPLATE/improvement.yaml b/apps/login/.github/ISSUE_TEMPLATE/improvement.yaml similarity index 100% rename from login/.github/ISSUE_TEMPLATE/improvement.yaml rename to apps/login/.github/ISSUE_TEMPLATE/improvement.yaml diff --git a/login/.github/ISSUE_TEMPLATE/proposal.yaml b/apps/login/.github/ISSUE_TEMPLATE/proposal.yaml similarity index 100% rename from login/.github/ISSUE_TEMPLATE/proposal.yaml rename to apps/login/.github/ISSUE_TEMPLATE/proposal.yaml diff --git a/login/.github/custom-i18n.png b/apps/login/.github/custom-i18n.png similarity index 100% rename from login/.github/custom-i18n.png rename to apps/login/.github/custom-i18n.png diff --git a/login/.github/dependabot.example.yml b/apps/login/.github/dependabot.example.yml similarity index 100% rename from login/.github/dependabot.example.yml rename to apps/login/.github/dependabot.example.yml diff --git a/login/.github/pull_request_template.md b/apps/login/.github/pull_request_template.md similarity index 100% rename from login/.github/pull_request_template.md rename to apps/login/.github/pull_request_template.md diff --git a/login/.github/workflows/close_pr.yml b/apps/login/.github/workflows/close_pr.yml similarity index 100% rename from login/.github/workflows/close_pr.yml rename to apps/login/.github/workflows/close_pr.yml diff --git a/login/.github/workflows/issues.yml b/apps/login/.github/workflows/issues.yml similarity index 100% rename from login/.github/workflows/issues.yml rename to apps/login/.github/workflows/issues.yml diff --git a/login/.github/workflows/release.yml b/apps/login/.github/workflows/release.yml similarity index 100% rename from login/.github/workflows/release.yml rename to apps/login/.github/workflows/release.yml diff --git a/login/.github/workflows/test.yml b/apps/login/.github/workflows/test.yml similarity index 100% rename from login/.github/workflows/test.yml rename to apps/login/.github/workflows/test.yml diff --git a/login/.gitignore b/apps/login/.gitignore similarity index 66% rename from login/.gitignore rename to apps/login/.gitignore index 8d49ae1b37..17a18bf973 100644 --- a/login/.gitignore +++ b/apps/login/.gitignore @@ -1,3 +1,8 @@ +custom-config.js +.env*.local +standalone +tsconfig.tsbuildinfo + .DS_Store node_modules .turbo @@ -7,12 +12,5 @@ dist dist-ssr *.local .env -server/dist -public/dist .vscode -.idea -.vercel -.env*.local /blob-report/ -/out -/docker diff --git a/apps/login/.prettierignore b/apps/login/.prettierignore new file mode 100644 index 0000000000..413c4b52e0 --- /dev/null +++ b/apps/login/.prettierignore @@ -0,0 +1,5 @@ +* +!constants +!src +!locales +!scripts/healthcheck.js \ No newline at end of file diff --git a/login/.prettierrc b/apps/login/.prettierrc similarity index 100% rename from login/.prettierrc rename to apps/login/.prettierrc diff --git a/login/CODE_OF_CONDUCT.md b/apps/login/CODE_OF_CONDUCT.md similarity index 100% rename from login/CODE_OF_CONDUCT.md rename to apps/login/CODE_OF_CONDUCT.md diff --git a/login/CONTRIBUTING.md b/apps/login/CONTRIBUTING.md similarity index 100% rename from login/CONTRIBUTING.md rename to apps/login/CONTRIBUTING.md diff --git a/apps/login/Dockerfile b/apps/login/Dockerfile new file mode 100644 index 0000000000..7e3d8668d2 --- /dev/null +++ b/apps/login/Dockerfile @@ -0,0 +1,36 @@ +FROM node:20-alpine AS base + +FROM base AS build +ENV PNPM_HOME="/pnpm" +ENV PATH="$PNPM_HOME:$PATH" +RUN corepack enable && COREPACK_ENABLE_DOWNLOAD_PROMPT=0 corepack prepare pnpm@9.1.2 --activate && \ + apk update && apk add --no-cache && \ + rm -rf /var/cache/apk/* +WORKDIR /app +COPY pnpm-lock.yaml ./ +RUN --mount=type=cache,id=pnpm,target=/root/.local/share/pnpm/store pnpm fetch --frozen-lockfile +COPY package.json ./ +RUN --mount=type=cache,id=pnpm,target=/root/.local/share/pnpm/store pnpm install --frozen-lockfile --prod +COPY . . +RUN pnpm build:login:standalone + +FROM scratch AS build-out +COPY --from=build /app/.next/standalone / +COPY --from=build /app/.next/static /.next/static +COPY --from=build /app/public /public + +FROM base AS login-standalone +WORKDIR /runtime +RUN addgroup --system --gid 1001 nodejs && \ + adduser --system --uid 1001 nextjs +# If /.env-file/.env is mounted into the container, its variables are made available to the server before it starts up. +RUN mkdir -p /.env-file && touch /.env-file/.env && chown -R nextjs:nodejs /.env-file +COPY ./scripts/ ./ +COPY --chown=nextjs:nodejs --from=build-out / ./ +USER nextjs +ENV HOSTNAME="0.0.0.0" +ENV PORT=3000 +# TODO: Check healthy, not ready +HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \ +CMD ["/bin/sh", "-c", "node ./healthcheck.js http://localhost:${PORT}/ui/v2/login/healthy"] +ENTRYPOINT ["./entrypoint.sh"] diff --git a/login/LICENSE b/apps/login/LICENSE similarity index 100% rename from login/LICENSE rename to apps/login/LICENSE diff --git a/login/README.md b/apps/login/README.md similarity index 100% rename from login/README.md rename to apps/login/README.md diff --git a/login/.eslintrc.cjs b/apps/login/acceptance/.eslintrc.cjs similarity index 100% rename from login/.eslintrc.cjs rename to apps/login/acceptance/.eslintrc.cjs diff --git a/login/apps/login-test-acceptance/.gitignore b/apps/login/acceptance/.gitignore similarity index 100% rename from login/apps/login-test-acceptance/.gitignore rename to apps/login/acceptance/.gitignore diff --git a/login/apps/login-test-acceptance/go-command.Dockerfile b/apps/login/acceptance/go-command.Dockerfile similarity index 100% rename from login/apps/login-test-acceptance/go-command.Dockerfile rename to apps/login/acceptance/go-command.Dockerfile diff --git a/login/apps/login-test-acceptance/idp/oidc/go.mod b/apps/login/acceptance/idp/oidc/go.mod similarity index 100% rename from login/apps/login-test-acceptance/idp/oidc/go.mod rename to apps/login/acceptance/idp/oidc/go.mod diff --git a/login/apps/login-test-acceptance/idp/oidc/go.sum b/apps/login/acceptance/idp/oidc/go.sum similarity index 100% rename from login/apps/login-test-acceptance/idp/oidc/go.sum rename to apps/login/acceptance/idp/oidc/go.sum diff --git a/login/apps/login-test-acceptance/idp/oidc/main.go b/apps/login/acceptance/idp/oidc/main.go similarity index 100% rename from login/apps/login-test-acceptance/idp/oidc/main.go rename to apps/login/acceptance/idp/oidc/main.go diff --git a/login/apps/login-test-acceptance/idp/saml/go.mod b/apps/login/acceptance/idp/saml/go.mod similarity index 100% rename from login/apps/login-test-acceptance/idp/saml/go.mod rename to apps/login/acceptance/idp/saml/go.mod diff --git a/login/apps/login-test-acceptance/idp/saml/go.sum b/apps/login/acceptance/idp/saml/go.sum similarity index 100% rename from login/apps/login-test-acceptance/idp/saml/go.sum rename to apps/login/acceptance/idp/saml/go.sum diff --git a/login/apps/login-test-acceptance/idp/saml/main.go b/apps/login/acceptance/idp/saml/main.go similarity index 100% rename from login/apps/login-test-acceptance/idp/saml/main.go rename to apps/login/acceptance/idp/saml/main.go diff --git a/login/apps/login-test-acceptance/oidcrp/go.mod b/apps/login/acceptance/oidcrp/go.mod similarity index 100% rename from login/apps/login-test-acceptance/oidcrp/go.mod rename to apps/login/acceptance/oidcrp/go.mod diff --git a/login/apps/login-test-acceptance/oidcrp/go.sum b/apps/login/acceptance/oidcrp/go.sum similarity index 100% rename from login/apps/login-test-acceptance/oidcrp/go.sum rename to apps/login/acceptance/oidcrp/go.sum diff --git a/login/apps/login-test-acceptance/oidcrp/main.go b/apps/login/acceptance/oidcrp/main.go similarity index 100% rename from login/apps/login-test-acceptance/oidcrp/main.go rename to apps/login/acceptance/oidcrp/main.go diff --git a/login/apps/login-test-acceptance/package.json b/apps/login/acceptance/package.json similarity index 74% rename from login/apps/login-test-acceptance/package.json rename to apps/login/acceptance/package.json index 1fb83f0345..fc4a191373 100644 --- a/login/apps/login-test-acceptance/package.json +++ b/apps/login/acceptance/package.json @@ -2,8 +2,8 @@ "name": "login-test-acceptance", "private": true, "scripts": { - "test:acceptance": "dotenv -e ../login/.env.test.local pnpm exec playwright", - "test:acceptance:setup": "cd ../.. && make login_test_acceptance_setup_env && NODE_ENV=test pnpm exec turbo run test:acceptance:setup:dev", + "test:acceptance": "dotenv -e ../login/.env.test.local playwright", + "test:acceptance:setup": "cd ../.. && make login_test_acceptance_setup_env && NODE_ENV=test turbo run test:acceptance:setup:dev", "test:acceptance:setup:dev": "cd ../.. && make login_test_acceptance_setup_dev" }, "devDependencies": { @@ -12,6 +12,7 @@ "@otplib/plugin-crypto": "^12.0.0", "@otplib/plugin-thirty-two": "^12.0.0", "@playwright/test": "^1.52.0", + "dotenv-cli": "^8.0.0", "gaxios": "^7.1.0", "typescript": "^5.8.3" } diff --git a/login/apps/login-test-acceptance/test-results/.gitignore b/apps/login/acceptance/pat/.gitignore similarity index 50% rename from login/apps/login-test-acceptance/test-results/.gitignore rename to apps/login/acceptance/pat/.gitignore index 377ccd3fdf..bf27f3114d 100644 --- a/login/apps/login-test-acceptance/test-results/.gitignore +++ b/apps/login/acceptance/pat/.gitignore @@ -1,2 +1,3 @@ * +!.gitignore !.gitkeep diff --git a/console/src/assets/.gitkeep b/apps/login/acceptance/pat/.gitkeep similarity index 100% rename from console/src/assets/.gitkeep rename to apps/login/acceptance/pat/.gitkeep diff --git a/login/apps/login-test-acceptance/pat/.gitignore b/apps/login/acceptance/playwright-report/.gitignore similarity index 50% rename from login/apps/login-test-acceptance/pat/.gitignore rename to apps/login/acceptance/playwright-report/.gitignore index 377ccd3fdf..bf27f3114d 100644 --- a/login/apps/login-test-acceptance/pat/.gitignore +++ b/apps/login/acceptance/playwright-report/.gitignore @@ -1,2 +1,3 @@ * +!.gitignore !.gitkeep diff --git a/login/apps/login-test-acceptance/pat/.gitkeep b/apps/login/acceptance/playwright-report/.gitkeep similarity index 100% rename from login/apps/login-test-acceptance/pat/.gitkeep rename to apps/login/acceptance/playwright-report/.gitkeep diff --git a/login/apps/login-test-acceptance/playwright.config.ts b/apps/login/acceptance/playwright.config.ts similarity index 100% rename from login/apps/login-test-acceptance/playwright.config.ts rename to apps/login/acceptance/playwright.config.ts diff --git a/login/apps/login-test-acceptance/samlsp/go.mod b/apps/login/acceptance/samlsp/go.mod similarity index 100% rename from login/apps/login-test-acceptance/samlsp/go.mod rename to apps/login/acceptance/samlsp/go.mod diff --git a/login/apps/login-test-acceptance/samlsp/go.sum b/apps/login/acceptance/samlsp/go.sum similarity index 100% rename from login/apps/login-test-acceptance/samlsp/go.sum rename to apps/login/acceptance/samlsp/go.sum diff --git a/login/apps/login-test-acceptance/samlsp/main.go b/apps/login/acceptance/samlsp/main.go similarity index 100% rename from login/apps/login-test-acceptance/samlsp/main.go rename to apps/login/acceptance/samlsp/main.go diff --git a/login/apps/login-test-acceptance/setup/go.mod b/apps/login/acceptance/setup/go.mod similarity index 100% rename from login/apps/login-test-acceptance/setup/go.mod rename to apps/login/acceptance/setup/go.mod diff --git a/login/apps/login-test-acceptance/setup/go.sum b/apps/login/acceptance/setup/go.sum similarity index 100% rename from login/apps/login-test-acceptance/setup/go.sum rename to apps/login/acceptance/setup/go.sum diff --git a/login/apps/login-test-acceptance/setup/main.go b/apps/login/acceptance/setup/main.go similarity index 100% rename from login/apps/login-test-acceptance/setup/main.go rename to apps/login/acceptance/setup/main.go diff --git a/login/apps/login-test-acceptance/setup/setup.sh b/apps/login/acceptance/setup/setup.sh similarity index 100% rename from login/apps/login-test-acceptance/setup/setup.sh rename to apps/login/acceptance/setup/setup.sh diff --git a/login/apps/login-test-acceptance/sink/go.mod b/apps/login/acceptance/sink/go.mod similarity index 100% rename from login/apps/login-test-acceptance/sink/go.mod rename to apps/login/acceptance/sink/go.mod diff --git a/login/apps/login-test-acceptance/sink/go.sum b/apps/login/acceptance/sink/go.sum similarity index 100% rename from login/apps/login-test-acceptance/sink/go.sum rename to apps/login/acceptance/sink/go.sum diff --git a/login/apps/login-test-acceptance/sink/main.go b/apps/login/acceptance/sink/main.go similarity index 100% rename from login/apps/login-test-acceptance/sink/main.go rename to apps/login/acceptance/sink/main.go diff --git a/login/apps/login-test-acceptance/playwright-report/.gitignore b/apps/login/acceptance/test-results/.gitignore similarity index 50% rename from login/apps/login-test-acceptance/playwright-report/.gitignore rename to apps/login/acceptance/test-results/.gitignore index 377ccd3fdf..bf27f3114d 100644 --- a/login/apps/login-test-acceptance/playwright-report/.gitignore +++ b/apps/login/acceptance/test-results/.gitignore @@ -1,2 +1,3 @@ * +!.gitignore !.gitkeep diff --git a/login/apps/login-test-acceptance/playwright-report/.gitkeep b/apps/login/acceptance/test-results/.gitkeep similarity index 100% rename from login/apps/login-test-acceptance/playwright-report/.gitkeep rename to apps/login/acceptance/test-results/.gitkeep diff --git a/login/apps/login-test-acceptance/tests/admin.spec.ts b/apps/login/acceptance/tests/admin.spec.ts similarity index 100% rename from login/apps/login-test-acceptance/tests/admin.spec.ts rename to apps/login/acceptance/tests/admin.spec.ts diff --git a/login/apps/login-test-acceptance/tests/code-screen.ts b/apps/login/acceptance/tests/code-screen.ts similarity index 100% rename from login/apps/login-test-acceptance/tests/code-screen.ts rename to apps/login/acceptance/tests/code-screen.ts diff --git a/login/apps/login-test-acceptance/tests/code.ts b/apps/login/acceptance/tests/code.ts similarity index 100% rename from login/apps/login-test-acceptance/tests/code.ts rename to apps/login/acceptance/tests/code.ts diff --git a/login/apps/login-test-acceptance/tests/email-verify-screen.ts b/apps/login/acceptance/tests/email-verify-screen.ts similarity index 100% rename from login/apps/login-test-acceptance/tests/email-verify-screen.ts rename to apps/login/acceptance/tests/email-verify-screen.ts diff --git a/login/apps/login-test-acceptance/tests/email-verify.spec.ts b/apps/login/acceptance/tests/email-verify.spec.ts similarity index 100% rename from login/apps/login-test-acceptance/tests/email-verify.spec.ts rename to apps/login/acceptance/tests/email-verify.spec.ts diff --git a/login/apps/login-test-acceptance/tests/email-verify.ts b/apps/login/acceptance/tests/email-verify.ts similarity index 100% rename from login/apps/login-test-acceptance/tests/email-verify.ts rename to apps/login/acceptance/tests/email-verify.ts diff --git a/login/apps/login-test-acceptance/tests/idp-apple.spec.ts b/apps/login/acceptance/tests/idp-apple.spec.ts similarity index 100% rename from login/apps/login-test-acceptance/tests/idp-apple.spec.ts rename to apps/login/acceptance/tests/idp-apple.spec.ts diff --git a/login/apps/login-test-acceptance/tests/idp-generic-jwt.spec.ts b/apps/login/acceptance/tests/idp-generic-jwt.spec.ts similarity index 100% rename from login/apps/login-test-acceptance/tests/idp-generic-jwt.spec.ts rename to apps/login/acceptance/tests/idp-generic-jwt.spec.ts diff --git a/login/apps/login-test-acceptance/tests/idp-generic-oauth.spec.ts b/apps/login/acceptance/tests/idp-generic-oauth.spec.ts similarity index 100% rename from login/apps/login-test-acceptance/tests/idp-generic-oauth.spec.ts rename to apps/login/acceptance/tests/idp-generic-oauth.spec.ts diff --git a/login/apps/login-test-acceptance/tests/idp-generic-oidc.spec.ts b/apps/login/acceptance/tests/idp-generic-oidc.spec.ts similarity index 100% rename from login/apps/login-test-acceptance/tests/idp-generic-oidc.spec.ts rename to apps/login/acceptance/tests/idp-generic-oidc.spec.ts diff --git a/login/apps/login-test-acceptance/tests/idp-github-enterprise.spec.ts b/apps/login/acceptance/tests/idp-github-enterprise.spec.ts similarity index 100% rename from login/apps/login-test-acceptance/tests/idp-github-enterprise.spec.ts rename to apps/login/acceptance/tests/idp-github-enterprise.spec.ts diff --git a/login/apps/login-test-acceptance/tests/idp-github.spec.ts b/apps/login/acceptance/tests/idp-github.spec.ts similarity index 100% rename from login/apps/login-test-acceptance/tests/idp-github.spec.ts rename to apps/login/acceptance/tests/idp-github.spec.ts diff --git a/login/apps/login-test-acceptance/tests/idp-gitlab-self-hosted.spec.ts b/apps/login/acceptance/tests/idp-gitlab-self-hosted.spec.ts similarity index 100% rename from login/apps/login-test-acceptance/tests/idp-gitlab-self-hosted.spec.ts rename to apps/login/acceptance/tests/idp-gitlab-self-hosted.spec.ts diff --git a/login/apps/login-test-acceptance/tests/idp-gitlab.spec.ts b/apps/login/acceptance/tests/idp-gitlab.spec.ts similarity index 100% rename from login/apps/login-test-acceptance/tests/idp-gitlab.spec.ts rename to apps/login/acceptance/tests/idp-gitlab.spec.ts diff --git a/login/apps/login-test-acceptance/tests/idp-google.spec.ts b/apps/login/acceptance/tests/idp-google.spec.ts similarity index 100% rename from login/apps/login-test-acceptance/tests/idp-google.spec.ts rename to apps/login/acceptance/tests/idp-google.spec.ts diff --git a/login/apps/login-test-acceptance/tests/idp-ldap.spec.ts b/apps/login/acceptance/tests/idp-ldap.spec.ts similarity index 100% rename from login/apps/login-test-acceptance/tests/idp-ldap.spec.ts rename to apps/login/acceptance/tests/idp-ldap.spec.ts diff --git a/login/apps/login-test-acceptance/tests/idp-microsoft.spec.ts b/apps/login/acceptance/tests/idp-microsoft.spec.ts similarity index 100% rename from login/apps/login-test-acceptance/tests/idp-microsoft.spec.ts rename to apps/login/acceptance/tests/idp-microsoft.spec.ts diff --git a/login/apps/login-test-acceptance/tests/idp-saml.spec.ts b/apps/login/acceptance/tests/idp-saml.spec.ts similarity index 100% rename from login/apps/login-test-acceptance/tests/idp-saml.spec.ts rename to apps/login/acceptance/tests/idp-saml.spec.ts diff --git a/login/apps/login-test-acceptance/tests/login-configuration-possiblities.spec.ts b/apps/login/acceptance/tests/login-configuration-possiblities.spec.ts similarity index 100% rename from login/apps/login-test-acceptance/tests/login-configuration-possiblities.spec.ts rename to apps/login/acceptance/tests/login-configuration-possiblities.spec.ts diff --git a/login/apps/login-test-acceptance/tests/login.ts b/apps/login/acceptance/tests/login.ts similarity index 100% rename from login/apps/login-test-acceptance/tests/login.ts rename to apps/login/acceptance/tests/login.ts diff --git a/login/apps/login-test-acceptance/tests/loginname-screen.ts b/apps/login/acceptance/tests/loginname-screen.ts similarity index 100% rename from login/apps/login-test-acceptance/tests/loginname-screen.ts rename to apps/login/acceptance/tests/loginname-screen.ts diff --git a/login/apps/login-test-acceptance/tests/loginname.ts b/apps/login/acceptance/tests/loginname.ts similarity index 100% rename from login/apps/login-test-acceptance/tests/loginname.ts rename to apps/login/acceptance/tests/loginname.ts diff --git a/login/apps/login-test-acceptance/tests/passkey.ts b/apps/login/acceptance/tests/passkey.ts similarity index 100% rename from login/apps/login-test-acceptance/tests/passkey.ts rename to apps/login/acceptance/tests/passkey.ts diff --git a/login/apps/login-test-acceptance/tests/password-screen.ts b/apps/login/acceptance/tests/password-screen.ts similarity index 100% rename from login/apps/login-test-acceptance/tests/password-screen.ts rename to apps/login/acceptance/tests/password-screen.ts diff --git a/login/apps/login-test-acceptance/tests/password.ts b/apps/login/acceptance/tests/password.ts similarity index 100% rename from login/apps/login-test-acceptance/tests/password.ts rename to apps/login/acceptance/tests/password.ts diff --git a/login/apps/login-test-acceptance/tests/register-screen.ts b/apps/login/acceptance/tests/register-screen.ts similarity index 100% rename from login/apps/login-test-acceptance/tests/register-screen.ts rename to apps/login/acceptance/tests/register-screen.ts diff --git a/login/apps/login-test-acceptance/tests/register.spec.ts b/apps/login/acceptance/tests/register.spec.ts similarity index 100% rename from login/apps/login-test-acceptance/tests/register.spec.ts rename to apps/login/acceptance/tests/register.spec.ts diff --git a/login/apps/login-test-acceptance/tests/register.ts b/apps/login/acceptance/tests/register.ts similarity index 100% rename from login/apps/login-test-acceptance/tests/register.ts rename to apps/login/acceptance/tests/register.ts diff --git a/login/apps/login-test-acceptance/tests/select-account.ts b/apps/login/acceptance/tests/select-account.ts similarity index 100% rename from login/apps/login-test-acceptance/tests/select-account.ts rename to apps/login/acceptance/tests/select-account.ts diff --git a/login/apps/login-test-acceptance/tests/sink.ts b/apps/login/acceptance/tests/sink.ts similarity index 100% rename from login/apps/login-test-acceptance/tests/sink.ts rename to apps/login/acceptance/tests/sink.ts diff --git a/login/apps/login-test-acceptance/tests/user.ts b/apps/login/acceptance/tests/user.ts similarity index 100% rename from login/apps/login-test-acceptance/tests/user.ts rename to apps/login/acceptance/tests/user.ts diff --git a/login/apps/login-test-acceptance/tests/username-passkey.spec.ts b/apps/login/acceptance/tests/username-passkey.spec.ts similarity index 100% rename from login/apps/login-test-acceptance/tests/username-passkey.spec.ts rename to apps/login/acceptance/tests/username-passkey.spec.ts diff --git a/login/apps/login-test-acceptance/tests/username-password-change-required.spec.ts b/apps/login/acceptance/tests/username-password-change-required.spec.ts similarity index 100% rename from login/apps/login-test-acceptance/tests/username-password-change-required.spec.ts rename to apps/login/acceptance/tests/username-password-change-required.spec.ts diff --git a/login/apps/login-test-acceptance/tests/username-password-changed.spec.ts b/apps/login/acceptance/tests/username-password-changed.spec.ts similarity index 100% rename from login/apps/login-test-acceptance/tests/username-password-changed.spec.ts rename to apps/login/acceptance/tests/username-password-changed.spec.ts diff --git a/login/apps/login-test-acceptance/tests/username-password-otp_email.spec.ts b/apps/login/acceptance/tests/username-password-otp_email.spec.ts similarity index 100% rename from login/apps/login-test-acceptance/tests/username-password-otp_email.spec.ts rename to apps/login/acceptance/tests/username-password-otp_email.spec.ts diff --git a/login/apps/login-test-acceptance/tests/username-password-otp_sms.spec.ts b/apps/login/acceptance/tests/username-password-otp_sms.spec.ts similarity index 100% rename from login/apps/login-test-acceptance/tests/username-password-otp_sms.spec.ts rename to apps/login/acceptance/tests/username-password-otp_sms.spec.ts diff --git a/login/apps/login-test-acceptance/tests/username-password-set.spec.ts b/apps/login/acceptance/tests/username-password-set.spec.ts similarity index 100% rename from login/apps/login-test-acceptance/tests/username-password-set.spec.ts rename to apps/login/acceptance/tests/username-password-set.spec.ts diff --git a/login/apps/login-test-acceptance/tests/username-password-totp.spec.ts b/apps/login/acceptance/tests/username-password-totp.spec.ts similarity index 100% rename from login/apps/login-test-acceptance/tests/username-password-totp.spec.ts rename to apps/login/acceptance/tests/username-password-totp.spec.ts diff --git a/login/apps/login-test-acceptance/tests/username-password-u2f.spec.ts b/apps/login/acceptance/tests/username-password-u2f.spec.ts similarity index 100% rename from login/apps/login-test-acceptance/tests/username-password-u2f.spec.ts rename to apps/login/acceptance/tests/username-password-u2f.spec.ts diff --git a/login/apps/login-test-acceptance/tests/username-password.spec.ts b/apps/login/acceptance/tests/username-password.spec.ts similarity index 100% rename from login/apps/login-test-acceptance/tests/username-password.spec.ts rename to apps/login/acceptance/tests/username-password.spec.ts diff --git a/login/apps/login-test-acceptance/tests/welcome.ts b/apps/login/acceptance/tests/welcome.ts similarity index 100% rename from login/apps/login-test-acceptance/tests/welcome.ts rename to apps/login/acceptance/tests/welcome.ts diff --git a/login/apps/login-test-acceptance/tests/zitadel.ts b/apps/login/acceptance/tests/zitadel.ts similarity index 100% rename from login/apps/login-test-acceptance/tests/zitadel.ts rename to apps/login/acceptance/tests/zitadel.ts diff --git a/login/apps/login-test-acceptance/zitadel.yaml b/apps/login/acceptance/zitadel.yaml similarity index 80% rename from login/apps/login-test-acceptance/zitadel.yaml rename to apps/login/acceptance/zitadel.yaml index 3ddeaf67f0..986574fed2 100644 --- a/login/apps/login-test-acceptance/zitadel.yaml +++ b/apps/login/acceptance/zitadel.yaml @@ -1,6 +1,4 @@ -ExternalDomain: 127.0.0.1.sslip.io -ExternalSecure: true -ExternalPort: 443 +ExternalSecure: false TLS.Enabled: false FirstInstance: @@ -17,8 +15,12 @@ FirstInstance: Machine: Username: zitadel-admin-sa Name: Admin - Pat: - ExpirationDate: 2099-01-01T00:00:00Z + Pat.ExpirationDate: 2099-01-01T00:00:00Z + LoginClient: + Machine: + Username: login-client-sa + Name: Login Client + Pat.ExpirationDate: 2099-01-01T00:00:00Z DefaultInstance: LoginPolicy: @@ -47,37 +49,17 @@ DefaultInstance: HelpLink: "https://zitadel.com/docs" SupportEmail: "support@zitadel.com" DocsLink: "https://zitadel.com/docs" - Features: - LoginV2: - Required: true - -OIDC: - DefaultLoginURLV2: "/ui/v2/login/login?authRequest=" - -SAML: - DefaultLoginURLV2: "/ui/v2/login/login?authRequest=" Database: EventPushConnRatio: 0.2 # 4 ProjectionSpoolerConnRatio: 0.3 # 6 postgres: Host: db - Port: 5432 - Database: zitadel MaxOpenConns: 20 MaxIdleConns: 20 MaxConnLifetime: 1h MaxConnIdleTime: 5m - User: - Username: zitadel - SSL: - Mode: disable - Admin: - Username: zitadel - SSL: - Mode: disable + User.Password: zitadel -Logstore: - Access: - Stdout: - Enabled: true +Logstore.Access.Stdout.Enabled: true +Log.Formatter.Format: json \ No newline at end of file diff --git a/login/apps/login/constants/csp.js b/apps/login/constants/csp.js similarity index 100% rename from login/apps/login/constants/csp.js rename to apps/login/constants/csp.js diff --git a/login/docker-bake-release.hcl b/apps/login/docker-bake-release.hcl similarity index 100% rename from login/docker-bake-release.hcl rename to apps/login/docker-bake-release.hcl diff --git a/apps/login/docker-bake.hcl b/apps/login/docker-bake.hcl new file mode 100644 index 0000000000..e09d1176e0 --- /dev/null +++ b/apps/login/docker-bake.hcl @@ -0,0 +1,25 @@ +variable "LOGIN_TAG" { + default = "zitadel-login:local" +} + +group "default" { + targets = ["login-standalone"] +} + +# The release target is overwritten in docker-bake-release.hcl +# It makes sure the image is built for multiple platforms. +# By default the platforms property is empty, so images are only built for the current bake runtime platform. +target "release" {} + +target "docker-metadata-action" { + # In the pipeline, this target is overwritten by the docker metadata action. + tags = ["${LOGIN_TAG}"] +} + +# We run integration and acceptance tests against the next standalone server for docker. +target "login-standalone" { + inherits = [ + "docker-metadata-action", + "release", + ] +} diff --git a/apps/login/integration/.eslintrc.cjs b/apps/login/integration/.eslintrc.cjs new file mode 100644 index 0000000000..84711c5881 --- /dev/null +++ b/apps/login/integration/.eslintrc.cjs @@ -0,0 +1,10 @@ +module.exports = { + root: true, + // Use basic ESLint config since the login app has its own detailed config + extends: ["eslint:recommended"], + settings: { + next: { + rootDir: ["apps/*/"], + }, + }, +}; diff --git a/login/apps/login-test-integration/.gitignore b/apps/login/integration/.gitignore similarity index 100% rename from login/apps/login-test-integration/.gitignore rename to apps/login/integration/.gitignore diff --git a/apps/login/integration/.npmrc b/apps/login/integration/.npmrc new file mode 100644 index 0000000000..bc63bba6e3 --- /dev/null +++ b/apps/login/integration/.npmrc @@ -0,0 +1 @@ +side-effects-cache=false diff --git a/apps/login/integration/core-mock/Dockerfile b/apps/login/integration/core-mock/Dockerfile new file mode 100644 index 0000000000..447c73b534 --- /dev/null +++ b/apps/login/integration/core-mock/Dockerfile @@ -0,0 +1,15 @@ +FROM bufbuild/buf:1.54.0 AS proto-files +RUN buf export https://github.com/envoyproxy/protoc-gen-validate.git --path validate --output /proto-files && \ + buf export https://github.com/grpc-ecosystem/grpc-gateway.git --path protoc-gen-openapiv2 --output /proto-files && \ + buf export https://github.com/googleapis/googleapis.git --path protos/zitadelgoogle/api/annotations.proto --path google/api/http.proto --path google/api/field_behavior.proto --output /proto-files && \ + buf export https://github.com/zitadel/zitadel.git --path ./proto/zitadel --output /proto-files + +FROM golang:1.20.5-alpine3.18 AS mock-zitadel + +RUN go install github.com/eliobischof/grpc-mock/cmd/grpc-mock@01b09f60db1b501178af59bed03b2c22661df48c + +COPY mocked-services.cfg . +COPY initial-stubs initial-stubs +COPY --from=proto-files /proto-files/ ./ + +ENTRYPOINT [ "sh", "-c", "grpc-mock -v 1 -proto $(tr '\n' ',' < ./mocked-services.cfg) -stub-dir ./initial-stubs -mock-addr :22222" ] diff --git a/login/apps/login-test-integration/core-mock/initial-stubs/zitadel.settings.v2.SettingsService.json b/apps/login/integration/core-mock/initial-stubs/zitadel.settings.v2.SettingsService.json similarity index 89% rename from login/apps/login-test-integration/core-mock/initial-stubs/zitadel.settings.v2.SettingsService.json rename to apps/login/integration/core-mock/initial-stubs/zitadel.settings.v2.SettingsService.json index 3da4ae999f..ebfaaadb85 100644 --- a/login/apps/login-test-integration/core-mock/initial-stubs/zitadel.settings.v2.SettingsService.json +++ b/apps/login/integration/core-mock/initial-stubs/zitadel.settings.v2.SettingsService.json @@ -55,5 +55,12 @@ } } } + }, + { + "service": "zitadel.settings.v2.SettingsService", + "method": "GetHostedLoginTranslation", + "out": { + "data": {} + } } ] diff --git a/login/apps/login-test-integration/core-mock/mocked-services.cfg b/apps/login/integration/core-mock/mocked-services.cfg similarity index 100% rename from login/apps/login-test-integration/core-mock/mocked-services.cfg rename to apps/login/integration/core-mock/mocked-services.cfg diff --git a/login/apps/login-test-integration/cypress.config.ts b/apps/login/integration/cypress.config.ts similarity index 95% rename from login/apps/login-test-integration/cypress.config.ts rename to apps/login/integration/cypress.config.ts index 080cb31bc6..a115cd9d1a 100644 --- a/login/apps/login-test-integration/cypress.config.ts +++ b/apps/login/integration/cypress.config.ts @@ -4,7 +4,7 @@ export default defineConfig({ reporter: "list", e2e: { - baseUrl: process.env.LOGIN_BASE_URL || "http://localhost:3000", + baseUrl: process.env.LOGIN_BASE_URL || "http://localhost:3001/ui/v2/login", specPattern: "integration/**/*.cy.{js,jsx,ts,tsx}", supportFile: "support/e2e.{js,jsx,ts,tsx}", setupNodeEvents(on, config) { diff --git a/login/apps/login-test-integration/fixtures/example.json b/apps/login/integration/fixtures/example.json similarity index 100% rename from login/apps/login-test-integration/fixtures/example.json rename to apps/login/integration/fixtures/example.json diff --git a/login/apps/login-test-integration/integration/invite.cy.ts b/apps/login/integration/integration/invite.cy.ts similarity index 100% rename from login/apps/login-test-integration/integration/invite.cy.ts rename to apps/login/integration/integration/invite.cy.ts diff --git a/login/apps/login-test-integration/integration/login.cy.ts b/apps/login/integration/integration/login.cy.ts similarity index 100% rename from login/apps/login-test-integration/integration/login.cy.ts rename to apps/login/integration/integration/login.cy.ts diff --git a/login/apps/login-test-integration/integration/register-idp.cy.ts b/apps/login/integration/integration/register-idp.cy.ts similarity index 100% rename from login/apps/login-test-integration/integration/register-idp.cy.ts rename to apps/login/integration/integration/register-idp.cy.ts diff --git a/login/apps/login-test-integration/integration/register.cy.ts b/apps/login/integration/integration/register.cy.ts similarity index 100% rename from login/apps/login-test-integration/integration/register.cy.ts rename to apps/login/integration/integration/register.cy.ts diff --git a/login/apps/login-test-integration/integration/verify.cy.ts b/apps/login/integration/integration/verify.cy.ts similarity index 100% rename from login/apps/login-test-integration/integration/verify.cy.ts rename to apps/login/integration/integration/verify.cy.ts diff --git a/login/apps/login-test-integration/support/e2e.ts b/apps/login/integration/support/e2e.ts similarity index 83% rename from login/apps/login-test-integration/support/e2e.ts rename to apps/login/integration/support/e2e.ts index 58056c973e..1ac0eb3948 100644 --- a/login/apps/login-test-integration/support/e2e.ts +++ b/apps/login/integration/support/e2e.ts @@ -1,4 +1,4 @@ -const url = Cypress.env("CORE_MOCK_STUBS_URL") || "http://localhost:22220/v1/stubs"; +const url = Cypress.env("CORE_MOCK_STUBS_URL") || "http://mock-zitadel:22220/v1/stubs"; function removeStub(service: string, method: string) { return cy.request({ diff --git a/login/apps/login-test-integration/tsconfig.json b/apps/login/integration/tsconfig.json similarity index 100% rename from login/apps/login-test-integration/tsconfig.json rename to apps/login/integration/tsconfig.json diff --git a/login/apps/login/locales/de.json b/apps/login/locales/de.json similarity index 85% rename from login/apps/login/locales/de.json rename to apps/login/locales/de.json index 75897a628e..7b2a507fe4 100644 --- a/login/apps/login/locales/de.json +++ b/apps/login/locales/de.json @@ -6,7 +6,9 @@ "title": "Konten", "description": "Wählen Sie das Konto aus, das Sie verwenden möchten.", "addAnother": "Ein weiteres Konto hinzufügen", - "noResults": "Keine Konten gefunden" + "noResults": "Keine Konten gefunden", + "verified": "verifiziert", + "expired": "abgelaufen" }, "logout": { "title": "Logout", @@ -23,14 +25,20 @@ "title": "Willkommen zurück!", "description": "Geben Sie Ihre Anmeldedaten ein.", "register": "Neuen Benutzer registrieren", - "submit": "Weiter" + "submit": "Weiter", + "required": { + "loginName": "Dieses Feld ist erforderlich" + } }, "password": { "verify": { "title": "Passwort", "description": "Geben Sie Ihr Passwort ein.", "resetPassword": "Passwort zurücksetzen", - "submit": "Weiter" + "submit": "Weiter", + "required": { + "password": "Dieses Feld ist erforderlich" + } }, "set": { "title": "Passwort festlegen", @@ -38,12 +46,21 @@ "codeSent": "Ein Code wurde an Ihre E-Mail-Adresse gesendet.", "noCodeReceived": "Keinen Code erhalten?", "resend": "Erneut senden", - "submit": "Weiter" + "submit": "Weiter", + "required": { + "code": "Dieses Feld ist erforderlich", + "newPassword": "Bitte geben Sie ein Passwort ein!", + "confirmPassword": "Dieses Feld ist erforderlich" + } }, "change": { "title": "Passwort ändern", "description": "Legen Sie das Passwort für Ihr Konto fest", - "submit": "Weiter" + "submit": "Weiter", + "required": { + "newPassword": "Bitte geben Sie ein neues Passwort ein!", + "confirmPassword": "Dieses Feld ist erforderlich" + } } }, "idp": { @@ -85,7 +102,11 @@ "description": "Geben Sie Ihre LDAP-Anmeldedaten ein.", "username": "Benutzername", "password": "Passwort", - "submit": "Weiter" + "submit": "Weiter", + "required": { + "username": "Dieses Feld ist erforderlich", + "password": "Dieses Feld ist erforderlich" + } }, "mfa": { "verify": { @@ -107,7 +128,10 @@ "emailDescription": "Geben Sie den Code ein, den Sie per E-Mail erhalten haben.", "noCodeReceived": "Keinen Code erhalten?", "resendCode": "Code erneut senden", - "submit": "Weiter" + "submit": "Weiter", + "required": { + "code": "Dieses Feld ist erforderlich" + } }, "set": { "title": "2-Faktor einrichten", @@ -115,7 +139,10 @@ "smsDescription": "Geben Sie Ihre Telefonnummer ein, um einen Code per SMS zu erhalten.", "emailDescription": "Geben Sie Ihre E-Mail-Adresse ein, um einen Code per E-Mail zu erhalten.", "totpRegisterDescription": "Scannen Sie den QR-Code oder navigieren Sie manuell zur URL.", - "submit": "Weiter" + "submit": "Weiter", + "required": { + "code": "Dieses Feld ist erforderlich" + } } }, "passkey": { @@ -172,7 +199,16 @@ "password": { "title": "Passwort festlegen", "description": "Legen Sie das Passwort für Ihr Konto fest", - "submit": "Weiter" + "submit": "Weiter", + "required": { + "password": "Bitte geben Sie ein Passwort ein!", + "confirmPassword": "Dieses Feld ist erforderlich" + } + }, + "required": { + "firstname": "Dieses Feld ist erforderlich", + "lastname": "Dieses Feld ist erforderlich", + "email": "Dieses Feld ist erforderlich" } }, "invite": { @@ -209,7 +245,10 @@ "noCodeReceived": "Keinen Code erhalten?", "resendCode": "Code erneut senden", "codeSent": "Ein Code wurde gerade an Ihre E-Mail-Adresse gesendet.", - "submit": "Weiter" + "submit": "Weiter", + "required": { + "code": "Dieses Feld ist erforderlich" + } } }, "authenticator": { @@ -223,7 +262,10 @@ "usercode": { "title": "Gerätecode", "description": "Geben Sie den Code ein.", - "submit": "Weiter" + "submit": "Weiter", + "required": { + "code": "Dieses Feld ist erforderlich" + } }, "request": { "title": "{appName} möchte eine Verbindung herstellen:", diff --git a/login/apps/login/locales/en.json b/apps/login/locales/en.json similarity index 84% rename from login/apps/login/locales/en.json rename to apps/login/locales/en.json index 9f95403063..e1b7e4e82c 100644 --- a/login/apps/login/locales/en.json +++ b/apps/login/locales/en.json @@ -6,7 +6,9 @@ "title": "Accounts", "description": "Select the account you want to use.", "addAnother": "Add another account", - "noResults": "No accounts found" + "noResults": "No accounts found", + "verified": "verified", + "expired": "expired" }, "logout": { "title": "Logout", @@ -23,14 +25,20 @@ "title": "Welcome back!", "description": "Enter your login data.", "register": "Register new user", - "submit": "Continue" + "submit": "Continue", + "required": { + "loginName": "This field is required" + } }, "password": { "verify": { "title": "Password", "description": "Enter your password.", "resetPassword": "Reset Password", - "submit": "Continue" + "submit": "Continue", + "required": { + "password": "This field is required" + } }, "set": { "title": "Set Password", @@ -38,12 +46,21 @@ "codeSent": "A code has been sent to your email address.", "noCodeReceived": "Didn't receive a code?", "resend": "Resend code", - "submit": "Continue" + "submit": "Continue", + "required": { + "code": "This field is required", + "newPassword": "You have to provide a password!", + "confirmPassword": "This field is required" + } }, "change": { "title": "Change Password", "description": "Set the password for your account", - "submit": "Continue" + "submit": "Continue", + "required": { + "newPassword": "You have to provide a new password!", + "confirmPassword": "This field is required" + } } }, "idp": { @@ -85,7 +102,11 @@ "description": "Enter your LDAP credentials.", "username": "Username", "password": "Password", - "submit": "Continue" + "submit": "Continue", + "required": { + "username": "This field is required", + "password": "This field is required" + } }, "mfa": { "verify": { @@ -107,7 +128,10 @@ "emailDescription": "Enter the code you received via email.", "noCodeReceived": "Didn't receive a code?", "resendCode": "Resend code", - "submit": "Continue" + "submit": "Continue", + "required": { + "code": "This field is required" + } }, "set": { "title": "Set up 2-Factor", @@ -115,7 +139,10 @@ "smsDescription": "Enter your phone number to receive a code via SMS.", "emailDescription": "Enter your email address to receive a code via email.", "totpRegisterDescription": "Scan the QR Code or navigate to the URL manually.", - "submit": "Continue" + "submit": "Continue", + "required": { + "code": "This field is required" + } } }, "passkey": { @@ -172,7 +199,16 @@ "password": { "title": "Set Password", "description": "Set the password for your account", - "submit": "Continue" + "submit": "Continue", + "required": { + "password": "You have to provide a password!", + "confirmPassword": "This field is required" + } + }, + "required": { + "firstname": "This field is required", + "lastname": "This field is required", + "email": "This field is required" } }, "invite": { @@ -209,7 +245,10 @@ "noCodeReceived": "Didn't receive a code?", "resendCode": "Resend code", "codeSent": "A code has just been sent to your email address.", - "submit": "Continue" + "submit": "Continue", + "required": { + "code": "This field is required" + } } }, "authenticator": { @@ -223,7 +262,10 @@ "usercode": { "title": "Device code", "description": "Enter the code displayed on your app or device.", - "submit": "Continue" + "submit": "Continue", + "required": { + "code": "This field is required" + } }, "request": { "title": "{appName} would like to connect", diff --git a/login/apps/login/locales/es.json b/apps/login/locales/es.json similarity index 84% rename from login/apps/login/locales/es.json rename to apps/login/locales/es.json index fe88bb94c6..b1c63583a7 100644 --- a/login/apps/login/locales/es.json +++ b/apps/login/locales/es.json @@ -4,9 +4,11 @@ }, "accounts": { "title": "Cuentas", - "description": "Selecciona la cuenta que deseas usar.", + "description": "Seleccione la cuenta que desea utilizar.", "addAnother": "Agregar otra cuenta", - "noResults": "No se encontraron cuentas" + "noResults": "No se encontraron cuentas", + "verified": "verificado", + "expired": "expirado" }, "logout": { "title": "Cerrar sesión", @@ -23,14 +25,20 @@ "title": "¡Bienvenido de nuevo!", "description": "Introduce tus datos de acceso.", "register": "Registrar nuevo usuario", - "submit": "Continuar" + "submit": "Continuar", + "required": { + "loginName": "Este campo es obligatorio" + } }, "password": { "verify": { "title": "Contraseña", "description": "Introduce tu contraseña.", "resetPassword": "Restablecer contraseña", - "submit": "Continuar" + "submit": "Continuar", + "required": { + "password": "Este campo es obligatorio" + } }, "set": { "title": "Establecer Contraseña", @@ -38,12 +46,21 @@ "codeSent": "Se ha enviado un código a su correo electrónico.", "noCodeReceived": "¿No recibiste un código?", "resend": "Reenviar código", - "submit": "Continuar" + "submit": "Continuar", + "required": { + "code": "Este campo es obligatorio", + "newPassword": "¡Debes proporcionar una contraseña!", + "confirmPassword": "Este campo es obligatorio" + } }, "change": { "title": "Cambiar Contraseña", "description": "Establece la contraseña para tu cuenta", - "submit": "Continuar" + "submit": "Continuar", + "required": { + "newPassword": "¡Debes proporcionar una nueva contraseña!", + "confirmPassword": "Este campo es obligatorio" + } } }, "idp": { @@ -85,7 +102,11 @@ "description": "Introduce tus credenciales LDAP.", "username": "Nombre de usuario", "password": "Contraseña", - "submit": "Continuar" + "submit": "Continuar", + "required": { + "username": "Este campo es obligatorio", + "password": "Este campo es obligatorio" + } }, "mfa": { "verify": { @@ -107,7 +128,10 @@ "emailDescription": "Introduce el código que recibiste por correo electrónico.", "noCodeReceived": "¿No recibiste un código?", "resendCode": "Reenviar código", - "submit": "Continuar" + "submit": "Continuar", + "required": { + "code": "Este campo es obligatorio" + } }, "set": { "title": "Configurar autenticación de 2 factores", @@ -115,7 +139,10 @@ "smsDescription": "Introduce tu número de teléfono para recibir un código por SMS.", "emailDescription": "Introduce tu dirección de correo electrónico para recibir un código por correo electrónico.", "totpRegisterDescription": "Escanea el código QR o navega manualmente a la URL.", - "submit": "Continuar" + "submit": "Continuar", + "required": { + "code": "Este campo es obligatorio" + } } }, "passkey": { @@ -172,7 +199,16 @@ "password": { "title": "Establecer Contraseña", "description": "Establece la contraseña para tu cuenta", - "submit": "Continuar" + "submit": "Continuar", + "required": { + "password": "¡Debes proporcionar una contraseña!", + "confirmPassword": "Este campo es obligatorio" + } + }, + "required": { + "firstname": "Este campo es obligatorio", + "lastname": "Este campo es obligatorio", + "email": "Este campo es obligatorio" } }, "invite": { @@ -209,7 +245,10 @@ "noCodeReceived": "¿No recibiste un código?", "resendCode": "Reenviar código", "codeSent": "Se ha enviado un código a tu dirección de correo electrónico.", - "submit": "Continuar" + "submit": "Continuar", + "required": { + "code": "Este campo es obligatorio" + } } }, "authenticator": { @@ -223,7 +262,10 @@ "usercode": { "title": "Código del dispositivo", "description": "Introduce el código.", - "submit": "Continuar" + "submit": "Continuar", + "required": { + "code": "Este campo es obligatorio" + } }, "request": { "title": "{appName} desea conectarse:", diff --git a/login/apps/login/locales/it.json b/apps/login/locales/it.json similarity index 84% rename from login/apps/login/locales/it.json rename to apps/login/locales/it.json index 1229a1a4c0..a71b48ed04 100644 --- a/login/apps/login/locales/it.json +++ b/apps/login/locales/it.json @@ -4,9 +4,11 @@ }, "accounts": { "title": "Account", - "description": "Seleziona l'account che desideri utilizzare.", + "description": "Seleziona l'account che vuoi utilizzare.", "addAnother": "Aggiungi un altro account", - "noResults": "Nessun account trovato" + "noResults": "Nessun account trovato", + "verified": "verificato", + "expired": "scaduto" }, "logout": { "title": "Esci", @@ -23,14 +25,20 @@ "title": "Bentornato!", "description": "Inserisci i tuoi dati di accesso.", "register": "Registrati come nuovo utente", - "submit": "Continua" + "submit": "Continua", + "required": { + "loginName": "Questo campo è obbligatorio" + } }, "password": { "verify": { "title": "Password", "description": "Inserisci la tua password.", "resetPassword": "Reimposta Password", - "submit": "Continua" + "submit": "Continua", + "required": { + "password": "Questo campo è obbligatorio" + } }, "set": { "title": "Imposta Password", @@ -38,12 +46,21 @@ "codeSent": "Un codice è stato inviato al tuo indirizzo email.", "noCodeReceived": "Non hai ricevuto un codice?", "resend": "Invia di nuovo", - "submit": "Continua" + "submit": "Continua", + "required": { + "code": "Questo campo è obbligatorio", + "newPassword": "Devi fornire una password!", + "confirmPassword": "Questo campo è obbligatorio" + } }, "change": { "title": "Cambia Password", "description": "Imposta la password per il tuo account", - "submit": "Continua" + "submit": "Continua", + "required": { + "newPassword": "Devi fornire una nuova password!", + "confirmPassword": "Questo campo è obbligatorio" + } } }, "idp": { @@ -85,7 +102,11 @@ "description": "Inserisci le tue credenziali LDAP.", "username": "Nome utente", "password": "Password", - "submit": "Continua" + "submit": "Continua", + "required": { + "username": "Questo campo è obbligatorio", + "password": "Questo campo è obbligatorio" + } }, "mfa": { "verify": { @@ -107,7 +128,10 @@ "emailDescription": "Inserisci il codice ricevuto via email.", "noCodeReceived": "Non hai ricevuto un codice?", "resendCode": "Invia di nuovo il codice", - "submit": "Continua" + "submit": "Continua", + "required": { + "code": "Questo campo è obbligatorio" + } }, "set": { "title": "Configura l'autenticazione a 2 fattori", @@ -115,7 +139,10 @@ "smsDescription": "Inserisci il tuo numero di telefono per ricevere un codice via SMS.", "emailDescription": "Inserisci il tuo indirizzo email per ricevere un codice via email.", "totpRegisterDescription": "Scansiona il codice QR o naviga manualmente all'URL.", - "submit": "Continua" + "submit": "Continua", + "required": { + "code": "Questo campo è obbligatorio" + } } }, "passkey": { @@ -172,7 +199,16 @@ "password": { "title": "Imposta Password", "description": "Imposta la password per il tuo account", - "submit": "Continua" + "submit": "Continua", + "required": { + "password": "Devi fornire una password!", + "confirmPassword": "Questo campo è obbligatorio" + } + }, + "required": { + "firstname": "Questo campo è obbligatorio", + "lastname": "Questo campo è obbligatorio", + "email": "Questo campo è obbligatorio" } }, "invite": { @@ -209,7 +245,10 @@ "noCodeReceived": "Non hai ricevuto un codice?", "resendCode": "Invia di nuovo il codice", "codeSent": "Un codice è stato appena inviato al tuo indirizzo email.", - "submit": "Continua" + "submit": "Continua", + "required": { + "code": "Questo campo è obbligatorio" + } } }, "authenticator": { @@ -223,7 +262,10 @@ "usercode": { "title": "Codice dispositivo", "description": "Inserisci il codice.", - "submit": "Continua" + "submit": "Continua", + "required": { + "code": "Questo campo è obbligatorio" + } }, "request": { "title": "{appName} desidera connettersi:", diff --git a/login/apps/login/locales/pl.json b/apps/login/locales/pl.json similarity index 86% rename from login/apps/login/locales/pl.json rename to apps/login/locales/pl.json index 9fea6a19fa..3e8562a220 100644 --- a/login/apps/login/locales/pl.json +++ b/apps/login/locales/pl.json @@ -6,7 +6,9 @@ "title": "Konta", "description": "Wybierz konto, którego chcesz użyć.", "addAnother": "Dodaj kolejne konto", - "noResults": "Nie znaleziono kont" + "noResults": "Nie znaleziono kont", + "verified": "zweryfikowany", + "expired": "wygasł" }, "logout": { "title": "Wyloguj się", @@ -23,14 +25,20 @@ "title": "Witamy ponownie!", "description": "Wprowadź dane logowania.", "register": "Zarejestruj nowego użytkownika", - "submit": "Kontynuuj" + "submit": "Kontynuuj", + "required": { + "loginName": "To pole jest wymagane" + } }, "password": { "verify": { "title": "Hasło", "description": "Wprowadź swoje hasło.", "resetPassword": "Zresetuj hasło", - "submit": "Kontynuuj" + "submit": "Kontynuuj", + "required": { + "password": "To pole jest wymagane" + } }, "set": { "title": "Ustaw hasło", @@ -38,12 +46,21 @@ "codeSent": "Kod został wysłany na twój adres e-mail.", "noCodeReceived": "Nie otrzymałeś kodu?", "resend": "Wyślij kod ponownie", - "submit": "Kontynuuj" + "submit": "Kontynuuj", + "required": { + "code": "To pole jest wymagane", + "newPassword": "Musisz podać hasło!", + "confirmPassword": "To pole jest wymagane" + } }, "change": { "title": "Zmień hasło", "description": "Ustaw nowe hasło dla swojego konta", - "submit": "Kontynuuj" + "submit": "Kontynuuj", + "required": { + "newPassword": "Musisz podać nowe hasło!", + "confirmPassword": "To pole jest wymagane" + } } }, "idp": { @@ -85,7 +102,11 @@ "description": "Wprowadź swoje dane logowania LDAP.", "username": "Nazwa użytkownika", "password": "Hasło", - "submit": "Kontynuuj" + "submit": "Kontynuuj", + "required": { + "username": "To pole jest wymagane", + "password": "To pole jest wymagane" + } }, "mfa": { "verify": { @@ -107,7 +128,10 @@ "emailDescription": "Wprowadź kod otrzymany e-mailem.", "noCodeReceived": "Nie otrzymałeś kodu?", "resendCode": "Wyślij kod ponownie", - "submit": "Kontynuuj" + "submit": "Kontynuuj", + "required": { + "code": "To pole jest wymagane" + } }, "set": { "title": "Skonfiguruj uwierzytelnianie dwuskładnikowe", @@ -115,7 +139,10 @@ "smsDescription": "Wprowadź swój numer telefonu, aby otrzymać kod SMS-em.", "emailDescription": "Wprowadź swój adres e-mail, aby otrzymać kod e-mailem.", "totpRegisterDescription": "Zeskanuj kod QR lub otwórz adres URL ręcznie.", - "submit": "Kontynuuj" + "submit": "Kontynuuj", + "required": { + "code": "To pole jest wymagane" + } } }, "passkey": { @@ -172,7 +199,16 @@ "password": { "title": "Ustaw hasło", "description": "Ustaw hasło dla swojego konta", - "submit": "Kontynuuj" + "submit": "Kontynuuj", + "required": { + "password": "Musisz podać hasło!", + "confirmPassword": "To pole jest wymagane" + } + }, + "required": { + "firstname": "To pole jest wymagane", + "lastname": "To pole jest wymagane", + "email": "To pole jest wymagane" } }, "invite": { @@ -209,7 +245,10 @@ "noCodeReceived": "Nie otrzymałeś kodu?", "resendCode": "Wyślij kod ponownie", "codeSent": "Kod został właśnie wysłany na twój adres e-mail.", - "submit": "Kontynuuj" + "submit": "Kontynuuj", + "required": { + "code": "To pole jest wymagane" + } } }, "authenticator": { @@ -223,7 +262,10 @@ "usercode": { "title": "Kod urządzenia", "description": "Wprowadź kod.", - "submit": "Kontynuuj" + "submit": "Kontynuuj", + "required": { + "code": "To pole jest wymagane" + } }, "request": { "title": "{appName} chce się połączyć:", diff --git a/login/apps/login/locales/ru.json b/apps/login/locales/ru.json similarity index 83% rename from login/apps/login/locales/ru.json rename to apps/login/locales/ru.json index e745f1ae59..6ba2917e16 100644 --- a/login/apps/login/locales/ru.json +++ b/apps/login/locales/ru.json @@ -6,7 +6,9 @@ "title": "Аккаунты", "description": "Выберите аккаунт, который хотите использовать.", "addAnother": "Добавить другой аккаунт", - "noResults": "Аккаунты не найдены" + "noResults": "Аккаунты не найдены", + "verified": "проверенный", + "expired": "истёк" }, "logout": { "title": "Выход", @@ -23,14 +25,20 @@ "title": "С возвращением!", "description": "Введите свои данные для входа.", "register": "Зарегистрировать нового пользователя", - "submit": "Продолжить" + "submit": "Продолжить", + "required": { + "loginName": "Это поле обязательно для заполнения" + } }, "password": { "verify": { "title": "Пароль", "description": "Введите ваш пароль.", "resetPassword": "Сбросить пароль", - "submit": "Продолжить" + "submit": "Продолжить", + "required": { + "password": "Это поле обязательно для заполнения" + } }, "set": { "title": "Установить пароль", @@ -38,12 +46,21 @@ "codeSent": "Код отправлен на ваш адрес электронной почты.", "noCodeReceived": "Не получили код?", "resend": "Отправить код повторно", - "submit": "Продолжить" + "submit": "Продолжить", + "required": { + "code": "Это поле обязательно для заполнения", + "newPassword": "Вы должны указать пароль!", + "confirmPassword": "Это поле обязательно для заполнения" + } }, "change": { "title": "Изменить пароль", "description": "Установите пароль для вашего аккаунта", - "submit": "Продолжить" + "submit": "Продолжить", + "required": { + "newPassword": "Вы должны указать новый пароль!", + "confirmPassword": "Это поле обязательно для заполнения" + } } }, "idp": { @@ -85,7 +102,11 @@ "description": "Введите ваши учетные данные LDAP.", "username": "Имя пользователя", "password": "Пароль", - "submit": "Продолжить" + "submit": "Продолжить", + "required": { + "username": "Это поле обязательно для заполнения", + "password": "Это поле обязательно для заполнения" + } }, "mfa": { "verify": { @@ -107,7 +128,10 @@ "emailDescription": "Введите код, полученный по email.", "noCodeReceived": "Не получили код?", "resendCode": "Отправить код повторно", - "submit": "Продолжить" + "submit": "Продолжить", + "required": { + "code": "Это поле обязательно для заполнения" + } }, "set": { "title": "Настройка двухфакторной аутентификации", @@ -115,7 +139,10 @@ "smsDescription": "Введите номер телефона для получения кода по SMS.", "emailDescription": "Введите email для получения кода.", "totpRegisterDescription": "Отсканируйте QR-код или перейдите по ссылке вручную.", - "submit": "Продолжить" + "submit": "Продолжить", + "required": { + "code": "Это поле обязательно для заполнения" + } } }, "passkey": { @@ -172,7 +199,16 @@ "password": { "title": "Установить пароль", "description": "Установите пароль для вашего аккаунта", - "submit": "Продолжить" + "submit": "Продолжить", + "required": { + "password": "Вы должны указать пароль!", + "confirmPassword": "Это поле обязательно для заполнения" + } + }, + "required": { + "firstname": "Это поле обязательно для заполнения", + "lastname": "Это поле обязательно для заполнения", + "email": "Это поле обязательно для заполнения" } }, "invite": { @@ -209,7 +245,10 @@ "noCodeReceived": "Не получили код?", "resendCode": "Отправить код повторно", "codeSent": "Код отправлен на ваш email.", - "submit": "Продолжить" + "submit": "Продолжить", + "required": { + "code": "Это поле обязательно для заполнения" + } } }, "authenticator": { @@ -223,7 +262,10 @@ "usercode": { "title": "Код устройства", "description": "Введите код.", - "submit": "Продолжить" + "submit": "Продолжить", + "required": { + "code": "Это поле обязательно для заполнения" + } }, "request": { "title": "{appName} хочет подключиться:", diff --git a/login/apps/login/locales/zh.json b/apps/login/locales/zh.json similarity index 83% rename from login/apps/login/locales/zh.json rename to apps/login/locales/zh.json index 5a9cb3a4eb..fe5f2d1867 100644 --- a/login/apps/login/locales/zh.json +++ b/apps/login/locales/zh.json @@ -4,9 +4,11 @@ }, "accounts": { "title": "账户", - "description": "选择您想使用的账户。", + "description": "选择您要使用的账户。", "addAnother": "添加另一个账户", - "noResults": "未找到账户" + "noResults": "未找到账户", + "verified": "已验证", + "expired": "已过期" }, "logout": { "title": "注销", @@ -23,14 +25,20 @@ "title": "欢迎回来!", "description": "请输入您的登录信息。", "register": "注册新用户", - "submit": "继续" + "submit": "继续", + "required": { + "loginName": "此字段为必填项" + } }, "password": { "verify": { "title": "密码", "description": "请输入您的密码。", "resetPassword": "重置密码", - "submit": "继续" + "submit": "继续", + "required": { + "password": "此字段为必填项" + } }, "set": { "title": "设置密码", @@ -38,12 +46,21 @@ "codeSent": "验证码已发送到您的邮箱。", "noCodeReceived": "没有收到验证码?", "resend": "重发验证码", - "submit": "继续" + "submit": "继续", + "required": { + "code": "此字段为必填项", + "newPassword": "必须提供密码!", + "confirmPassword": "此字段为必填项" + } }, "change": { "title": "更改密码", "description": "为您的账户设置密码", - "submit": "继续" + "submit": "继续", + "required": { + "newPassword": "必须提供新密码!", + "confirmPassword": "此字段为必填项" + } } }, "idp": { @@ -85,7 +102,11 @@ "description": "请输入您的 LDAP 凭据。", "username": "用户名", "password": "密码", - "submit": "继续" + "submit": "继续", + "required": { + "username": "此字段为必填项", + "password": "此字段为必填项" + } }, "mfa": { "verify": { @@ -107,7 +128,10 @@ "emailDescription": "输入通过电子邮件收到的验证码。", "noCodeReceived": "没有收到验证码?", "resendCode": "重发验证码", - "submit": "继续" + "submit": "继续", + "required": { + "code": "此字段为必填项" + } }, "set": { "title": "设置双因素认证", @@ -115,7 +139,10 @@ "smsDescription": "输入您的电话号码以接收短信验证码。", "emailDescription": "输入您的电子邮箱地址以接收电子邮件验证码。", "totpRegisterDescription": "扫描二维码或手动导航到URL。", - "submit": "继续" + "submit": "继续", + "required": { + "code": "此字段为必填项" + } } }, "passkey": { @@ -172,7 +199,16 @@ "password": { "title": "设置密码", "description": "为您的账户设置密码", - "submit": "继续" + "submit": "继续", + "required": { + "password": "必须提供密码!", + "confirmPassword": "此字段为必填项" + } + }, + "required": { + "firstname": "此字段为必填项", + "lastname": "此字段为必填项", + "email": "此字段为必填项" } }, "invite": { @@ -209,7 +245,10 @@ "noCodeReceived": "没有收到验证码?", "resendCode": "重发验证码", "codeSent": "刚刚发送了一封包含验证码的电子邮件。", - "submit": "继续" + "submit": "继续", + "required": { + "code": "此字段为必填项" + } } }, "authenticator": { @@ -223,7 +262,10 @@ "usercode": { "title": "设备代码", "description": "输入代码。", - "submit": "继续" + "submit": "继续", + "required": { + "code": "此字段为必填项" + } }, "request": { "title": "{appName} 想要连接:", diff --git a/login/apps/login/next-env-vars.d.ts b/apps/login/next-env-vars.d.ts similarity index 100% rename from login/apps/login/next-env-vars.d.ts rename to apps/login/next-env-vars.d.ts diff --git a/login/apps/login/next-env.d.ts b/apps/login/next-env.d.ts similarity index 100% rename from login/apps/login/next-env.d.ts rename to apps/login/next-env.d.ts diff --git a/login/apps/login/next.config.mjs b/apps/login/next.config.mjs similarity index 100% rename from login/apps/login/next.config.mjs rename to apps/login/next.config.mjs diff --git a/login/apps/login/package.json b/apps/login/package.json similarity index 60% rename from login/apps/login/package.json rename to apps/login/package.json index 655aeb8f28..a4e02922ee 100644 --- a/login/apps/login/package.json +++ b/apps/login/package.json @@ -1,20 +1,25 @@ { + "packageManager": "pnpm@9.1.2+sha256.19c17528f9ca20bd442e4ca42f00f1b9808a9cb419383cd04ba32ef19322aba7", "name": "@zitadel/login", "private": true, "type": "module", "scripts": { "dev": "next dev", - "dev:turbo": "next dev --turbopack", - "test:unit": "pnpm vitest --run", - "test:unit:standalone": "pnpm test:unit", - "lint": "pnpm exec next lint && pnpm exec prettier --check .", - "lint:fix": "pnpm exec prettier --write .", + "build": "next build", + "build:login:standalone": "NEXT_PUBLIC_BASE_PATH=/ui/v2/login NEXT_OUTPUT_MODE=standalone next build", + "start": "next start", + "lint": "pnpm run '/^lint:check:.*$/'", + "lint:check:next": "next lint", + "lint:check:prettier": "prettier --check .", + "lint:fix": "prettier --write .", + "test:unit": "vitest --run", "lint-staged": "lint-staged", - "build": "pnpm exec next build", - "build:login:standalone": "NEXT_PUBLIC_BASE_PATH=/ui/v2/login NEXT_OUTPUT_MODE=standalone pnpm build", - "start": "pnpm build && pnpm exec next start", - "start:built": "pnpm exec next start", - "clean": "rm -rf .turbo && rm -rf node_modules && rm -rf .next" + "clean": "rm -rf .turbo && rm -rf node_modules && rm -rf .next", + "test:integration:login": "cypress run", + "test:integration:login:debug": "cypress open", + "test:acceptance": "dotenv -e ../login/.env.test.local playwright", + "test:acceptance:setup": "cd ../.. && make login_test_acceptance_setup_env && NODE_ENV=test turbo run test:acceptance:setup:dev", + "test:acceptance:setup:dev": "cd ../.. && make login_test_acceptance_setup_dev" }, "git": { "pre-commit": "lint-staged" @@ -25,6 +30,7 @@ "dependencies": { "@headlessui/react": "^2.1.9", "@heroicons/react": "2.1.3", + "@radix-ui/react-tooltip": "^1.2.7", "@tailwindcss/forms": "0.5.7", "@vercel/analytics": "^1.2.2", "@zitadel/client": "latest", @@ -59,6 +65,7 @@ "@typescript-eslint/eslint-plugin": "^7.0.0", "@typescript-eslint/parser": "^7.0.0", "@vercel/git-hooks": "1.0.0", + "@vitejs/plugin-react": "^4.4.1", "autoprefixer": "10.4.21", "eslint": "^8.57.0", "eslint-config-next": "15.4.0-canary.86", @@ -75,6 +82,19 @@ "tailwindcss": "3.4.14", "ts-proto": "^2.7.0", "typescript": "^5.8.3", - "vitest": "^2.0.0" + "vite-tsconfig-paths": "^5.1.4", + "vitest": "^2.0.0", + "concurrently": "^9.1.2", + "cypress": "^14.5.2", + "dotenv-cli": "^8.0.0", + "env-cmd": "^10.0.0", + "nodemon": "^3.1.9", + "start-server-and-test": "^2.0.11", + "@faker-js/faker": "^9.7.0", + "@otplib/core": "^12.0.0", + "@otplib/plugin-crypto": "^12.0.0", + "@otplib/plugin-thirty-two": "^12.0.0", + "@playwright/test": "^1.52.0", + "gaxios": "^7.1.0" } } diff --git a/login/apps/login/postcss.config.cjs b/apps/login/postcss.config.cjs similarity index 100% rename from login/apps/login/postcss.config.cjs rename to apps/login/postcss.config.cjs diff --git a/login/apps/login/prettier.config.mjs b/apps/login/prettier.config.mjs similarity index 100% rename from login/apps/login/prettier.config.mjs rename to apps/login/prettier.config.mjs diff --git a/login/apps/login/public/checkbox.svg b/apps/login/public/checkbox.svg similarity index 100% rename from login/apps/login/public/checkbox.svg rename to apps/login/public/checkbox.svg diff --git a/login/apps/login/public/favicon.ico b/apps/login/public/favicon.ico similarity index 100% rename from login/apps/login/public/favicon.ico rename to apps/login/public/favicon.ico diff --git a/login/apps/login/public/favicon/android-chrome-192x192.png b/apps/login/public/favicon/android-chrome-192x192.png similarity index 100% rename from login/apps/login/public/favicon/android-chrome-192x192.png rename to apps/login/public/favicon/android-chrome-192x192.png diff --git a/login/apps/login/public/favicon/android-chrome-512x512.png b/apps/login/public/favicon/android-chrome-512x512.png similarity index 100% rename from login/apps/login/public/favicon/android-chrome-512x512.png rename to apps/login/public/favicon/android-chrome-512x512.png diff --git a/login/apps/login/public/favicon/apple-touch-icon.png b/apps/login/public/favicon/apple-touch-icon.png similarity index 100% rename from login/apps/login/public/favicon/apple-touch-icon.png rename to apps/login/public/favicon/apple-touch-icon.png diff --git a/login/apps/login/public/favicon/browserconfig.xml b/apps/login/public/favicon/browserconfig.xml similarity index 100% rename from login/apps/login/public/favicon/browserconfig.xml rename to apps/login/public/favicon/browserconfig.xml diff --git a/login/apps/login/public/favicon/favicon-16x16.png b/apps/login/public/favicon/favicon-16x16.png similarity index 100% rename from login/apps/login/public/favicon/favicon-16x16.png rename to apps/login/public/favicon/favicon-16x16.png diff --git a/login/apps/login/public/favicon/favicon-32x32.png b/apps/login/public/favicon/favicon-32x32.png similarity index 100% rename from login/apps/login/public/favicon/favicon-32x32.png rename to apps/login/public/favicon/favicon-32x32.png diff --git a/login/apps/login/public/favicon/favicon.ico b/apps/login/public/favicon/favicon.ico similarity index 100% rename from login/apps/login/public/favicon/favicon.ico rename to apps/login/public/favicon/favicon.ico diff --git a/login/apps/login/public/favicon/mstile-150x150.png b/apps/login/public/favicon/mstile-150x150.png similarity index 100% rename from login/apps/login/public/favicon/mstile-150x150.png rename to apps/login/public/favicon/mstile-150x150.png diff --git a/login/apps/login/public/favicon/site.webmanifest b/apps/login/public/favicon/site.webmanifest similarity index 100% rename from login/apps/login/public/favicon/site.webmanifest rename to apps/login/public/favicon/site.webmanifest diff --git a/login/apps/login/public/grid-dark.svg b/apps/login/public/grid-dark.svg similarity index 100% rename from login/apps/login/public/grid-dark.svg rename to apps/login/public/grid-dark.svg diff --git a/login/apps/login/public/grid-light.svg b/apps/login/public/grid-light.svg similarity index 100% rename from login/apps/login/public/grid-light.svg rename to apps/login/public/grid-light.svg diff --git a/login/apps/login/public/logo/zitadel-logo-solo-darkdesign.svg b/apps/login/public/logo/zitadel-logo-solo-darkdesign.svg similarity index 100% rename from login/apps/login/public/logo/zitadel-logo-solo-darkdesign.svg rename to apps/login/public/logo/zitadel-logo-solo-darkdesign.svg diff --git a/login/apps/login/public/logo/zitadel-logo-solo-lightdesign.svg b/apps/login/public/logo/zitadel-logo-solo-lightdesign.svg similarity index 100% rename from login/apps/login/public/logo/zitadel-logo-solo-lightdesign.svg rename to apps/login/public/logo/zitadel-logo-solo-lightdesign.svg diff --git a/login/apps/login/public/zitadel-logo-dark.svg b/apps/login/public/zitadel-logo-dark.svg similarity index 100% rename from login/apps/login/public/zitadel-logo-dark.svg rename to apps/login/public/zitadel-logo-dark.svg diff --git a/login/apps/login/public/zitadel-logo-light.svg b/apps/login/public/zitadel-logo-light.svg similarity index 100% rename from login/apps/login/public/zitadel-logo-light.svg rename to apps/login/public/zitadel-logo-light.svg diff --git a/apps/login/readme.md b/apps/login/readme.md new file mode 100644 index 0000000000..cdde703f48 --- /dev/null +++ b/apps/login/readme.md @@ -0,0 +1,263 @@ +# ZITADEL TypeScript with Turborepo + +This repository contains all TypeScript and JavaScript packages and applications you need to create your own ZITADEL +Login UI. + +collage of login screens + +[![npm package](https://img.shields.io/npm/v/@zitadel/proto.svg?style=for-the-badge&logo=npm&logoColor=white)](https://www.npmjs.com/package/@zitadel/proto) +[![npm package](https://img.shields.io/npm/v/@zitadel/client.svg?style=for-the-badge&logo=npm&logoColor=white)](https://www.npmjs.com/package/@zitadel/client) + +**⚠️ This repo and packages are in beta state and subject to change ⚠️** + +The scope of functionality of this repo and packages is under active development. + +The `@zitadel/client` package is using [@connectrpc/connect](https://github.com/connectrpc/connect-es#readme). + +You can read the [contribution guide](/CONTRIBUTING.md) on how to contribute. +Questions can be raised in our [Discord channel](https://discord.gg/erh5Brh7jE) or as +a [GitHub issue](https://github.com/zitadel/typescript/issues). + +## Developing Your Own ZITADEL Login UI + +We think the easiest path of getting up and running, is the following: + +1. Fork and clone this repository +1. Rename the file .github/dependabot.example.yml to .github/dependabot.yml so you don't miss version and security updates. +1. [Run the ZITADEL Cloud login UI locally](#run-login-ui) +1. Make changes to the code and see the effects live on your local machine +1. Study the rest of this README.md and get familiar and comfortable with how everything works. +1. Decide on a way of how you want to build and run your login UI. + You can reuse ZITADEL Clouds way. + But if you need more freedom, you can also import the packages you need into your self built application. + +## Included Apps And Packages + +- `login`: The login UI used by ZITADEL Cloud, powered by Next.js +- `@zitadel/client`: shared client utilities for node and browser environments +- `@zitadel/proto`: Protocol Buffers (proto) definitions used by ZITADEL projects + +Each package and app is 100% [TypeScript](https://www.typescriptlang.org/). + +### Login + +The login is currently in a work in progress state. +The goal is to implement a login UI, using the session API of ZITADEL, which also implements the OIDC Standard and is +ready to use for everyone. + +In the first phase we want to have a MVP login ready with the OIDC Standard and a basic feature set. In a second step +the features will be extended. + +This list should show the current implementation state, and also what is missing. +You can already use the current state, and extend it with your needs. + +#### Features list + +- [x] Local User Registration (with Password) +- [x] User Registration and Login with external Provider + - [x] Google + - [x] GitHub + - [x] GitHub Enterprise + - [x] GitLab + - [x] GitLab Enterprise + - [x] Azure + - [x] Apple + - [x] Generic OIDC + - [x] Generic OAuth + - [x] Generic JWT + - [x] LDAP + - [x] SAML SP +- Multifactor Registration an Login + - [x] Passkeys + - [x] TOTP + - [x] OTP: Email Code + - [x] OTP: SMS Code +- [x] Password Change/Reset +- [x] Domain Discovery +- [x] Branding +- OIDC Standard + + - [x] Authorization Code Flow with PKCE + - [x] AuthRequest `hintUserId` + - [x] AuthRequest `loginHint` + - [x] AuthRequest `prompt` + - [x] Login + - [x] Select Account + - [ ] Consent + - [x] Create + - Scopes + - [x] `openid email profile address`` + - [x] `offline access` + - [x] `urn:zitadel:iam:org:idp:id:{idp_id}` + - [x] `urn:zitadel:iam:org:project:id:zitadel:aud` + - [x] `urn:zitadel:iam:org:id:{orgid}` + - [x] `urn:zitadel:iam:org:domain:primary:{domain}` + - [ ] AuthRequest UI locales + + #### Flow diagram + + This diagram shows the available pages and flows. + + > Note that back navigation or retries are not displayed. + +```mermaid + flowchart TD + A[Start] --> register + A[Start] --> accounts + A[Start] --> loginname + loginname -- signInWithIDP --> idp-success + loginname -- signInWithIDP --> idp-failure + idp-success --> B[signedin] + loginname --> password + loginname -- hasPasskey --> passkey + loginname -- allowRegister --> register + passkey-add --passwordAllowed --> password + passkey -- hasPassword --> password + passkey --> B[signedin] + password -- hasMFA --> mfa + password -- allowPasskeys --> passkey-add + password -- reset --> password-set + email -- reset --> password-set + password-set --> B[signedin] + password-change --> B[signedin] + password -- userstate=initial --> password-change + + mfa --> otp + otp --> B[signedin] + mfa--> u2f + u2f -->B[signedin] + register -- password/passkey --> B[signedin] + password --> B[signedin] + password-- forceMFA -->mfaset + mfaset --> u2fset + mfaset --> otpset + u2fset --> B[signedin] + otpset --> B[signedin] + accounts--> loginname + password -- not verified yet -->verify + register-- withpassword -->verify + passkey-- notVerified --> verify + verify --> B[signedin] +``` + +You can find a more detailed documentation of the different pages [here](./apps/login/readme.md). + +#### Custom translations + +The new login uses the [SettingsApi](https://zitadel.com/docs/apis/resources/settings_service_v2/settings-service-get-hosted-login-translation) to load custom translations. +Translations can be overriden at both the instance and organization levels. +To find the keys more easily, you can inspect the HTML and search for a `data-i18n-key` attribute, or look at the defaults in `/apps/login/locales/[locale].ts`. +![Custom Translations](.github/custom-i18n.png) + +## Tooling + +- [TypeScript](https://www.typescriptlang.org/) for static type checking +- [ESLint](https://eslint.org/) for code linting +- [Prettier](https://prettier.io) for code formatting + +## Useful Commands + +- `make login-quality` - Check the quality of your code against a production build without installing any dependencies besides Docker +- `pnpm generate` - Build proto stubs for the client package +- `pnpm dev` - Develop all packages and the login app +- `pnpm build` - Build all packages and the login app +- `pnpm clean` - Clean up all `node_modules` and `dist` folders (runs each package's clean script) + +Learn more about developing the login UI in the [contribution guide](/CONTRIBUTING.md). + +## Versioning And Publishing Packages + +Package publishing has been configured using [Changesets](https://github.com/changesets/changesets). +Here is their [documentation](https://github.com/changesets/changesets#documentation) for more information about the +workflow. + +The [GitHub Action](https://github.com/changesets/action) needs an `NPM_TOKEN` and `GITHUB_TOKEN` in the repository +settings. The [Changesets bot](https://github.com/apps/changeset-bot) should also be installed on the GitHub repository. + +Read the [changesets documentation](https://github.com/changesets/changesets/blob/main/docs/automating-changesets.md) +for more information about this automation + +### Run Login UI + +To run the application make sure to install the dependencies with + +```sh +pnpm install +``` + +then generate the GRPC stubs with + +```sh +pnpm generate +``` + +To run the application against a local ZITADEL instance, run the following command: + +```sh +pnpm run-zitadel +``` + +This sets up ZITADEL using docker compose and writes the configuration to the file `apps/login/.env.local`. + +
+Alternatively, use another environment +You can develop against any ZITADEL instance in which you have sufficient rights to execute the following steps. +Just create or overwrite the file `apps/login/.env.local` yourself. +Add your instances base URL to the file at the key `ZITADEL_API_URL`. +Go to your instance and create a service user for the login application. +The login application creates users on your primary organization and reads policy data. +For the sake of simplicity, just make the service user an instance member with the role `IAM_OWNER`. +Create a PAT and copy it to the file `apps/login/.env.local` using the key `ZITADEL_SERVICE_USER_TOKEN`. + +The file should look similar to this: + +``` +ZITADEL_API_URL=https://zitadel-tlx3du.us1.zitadel.cloud +ZITADEL_SERVICE_USER_TOKEN=1S6w48thfWFI2klgfwkCnhXJLf9FQ457E-_3H74ePQxfO3Af0Tm4V5Xi-ji7urIl_xbn-Rk +``` + +
+ +Start the login application in dev mode: + +```sh +pnpm dev +``` + +Open the login application with your favorite browser at `localhost:3000`. +Change the source code and see the changes live in your browser. + +Make sure the application still behaves as expected by running all tests + +```sh +pnpm test +``` + +To satisfy your unique workflow requirements, check out the package.json in the root directory for more detailed scripts. + +### Run Login UI Acceptance tests + +To run the acceptance tests you need a running ZITADEL environment and a component which receives HTTP requests for the emails and sms's. +This component should also be able to return the content of these notifications, as the codes and links are used in the login flows. +There is a basic implementation in Golang available under [the sink package](./acceptance/sink). + +To setup ZITADEL with the additional Sink container for handling the notifications: + +```sh +pnpm run-sink +``` + +Then you can start the acceptance tests with: + +```sh +pnpm test:acceptance +``` + +### Deploy to Vercel + +To deploy your own version on Vercel, navigate to your instance and create a service user. +Then create a personal access token (PAT), copy and set it as ZITADEL_SERVICE_USER_TOKEN, then navigate to your instance +settings and make sure it gets IAM_OWNER permissions. +Finally set your instance url as ZITADEL_API_URL. Make sure to set it without trailing slash. + +[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2Fzitadel%2Ftypescript&env=ZITADEL_API_URL,ZITADEL_SERVICE_USER_TOKEN&root-directory=apps/login&envDescription=Setup%20a%20service%20account%20with%20IAM_LOGIN_CLIENT%20membership%20on%20your%20instance%20and%20provide%20its%20personal%20access%20token.&project-name=zitadel-login&repository-name=zitadel-login) diff --git a/login/apps/login/screenshots/accounts.png b/apps/login/screenshots/accounts.png similarity index 100% rename from login/apps/login/screenshots/accounts.png rename to apps/login/screenshots/accounts.png diff --git a/login/apps/login/screenshots/accounts_jumpto.png b/apps/login/screenshots/accounts_jumpto.png similarity index 100% rename from login/apps/login/screenshots/accounts_jumpto.png rename to apps/login/screenshots/accounts_jumpto.png diff --git a/login/apps/login/screenshots/collage.png b/apps/login/screenshots/collage.png similarity index 100% rename from login/apps/login/screenshots/collage.png rename to apps/login/screenshots/collage.png diff --git a/login/apps/login/screenshots/idp.png b/apps/login/screenshots/idp.png similarity index 100% rename from login/apps/login/screenshots/idp.png rename to apps/login/screenshots/idp.png diff --git a/login/apps/login/screenshots/loginname.png b/apps/login/screenshots/loginname.png similarity index 100% rename from login/apps/login/screenshots/loginname.png rename to apps/login/screenshots/loginname.png diff --git a/login/apps/login/screenshots/mfa.png b/apps/login/screenshots/mfa.png similarity index 100% rename from login/apps/login/screenshots/mfa.png rename to apps/login/screenshots/mfa.png diff --git a/login/apps/login/screenshots/mfaset.png b/apps/login/screenshots/mfaset.png similarity index 100% rename from login/apps/login/screenshots/mfaset.png rename to apps/login/screenshots/mfaset.png diff --git a/login/apps/login/screenshots/otp.png b/apps/login/screenshots/otp.png similarity index 100% rename from login/apps/login/screenshots/otp.png rename to apps/login/screenshots/otp.png diff --git a/login/apps/login/screenshots/otpset.png b/apps/login/screenshots/otpset.png similarity index 100% rename from login/apps/login/screenshots/otpset.png rename to apps/login/screenshots/otpset.png diff --git a/login/apps/login/screenshots/passkey.png b/apps/login/screenshots/passkey.png similarity index 100% rename from login/apps/login/screenshots/passkey.png rename to apps/login/screenshots/passkey.png diff --git a/login/apps/login/screenshots/password.png b/apps/login/screenshots/password.png similarity index 100% rename from login/apps/login/screenshots/password.png rename to apps/login/screenshots/password.png diff --git a/login/apps/login/screenshots/password_change.png b/apps/login/screenshots/password_change.png similarity index 100% rename from login/apps/login/screenshots/password_change.png rename to apps/login/screenshots/password_change.png diff --git a/login/apps/login/screenshots/password_set.png b/apps/login/screenshots/password_set.png similarity index 100% rename from login/apps/login/screenshots/password_set.png rename to apps/login/screenshots/password_set.png diff --git a/login/apps/login/screenshots/register.png b/apps/login/screenshots/register.png similarity index 100% rename from login/apps/login/screenshots/register.png rename to apps/login/screenshots/register.png diff --git a/login/apps/login/screenshots/register_password.png b/apps/login/screenshots/register_password.png similarity index 100% rename from login/apps/login/screenshots/register_password.png rename to apps/login/screenshots/register_password.png diff --git a/login/apps/login/screenshots/signedin.png b/apps/login/screenshots/signedin.png similarity index 100% rename from login/apps/login/screenshots/signedin.png rename to apps/login/screenshots/signedin.png diff --git a/login/apps/login/screenshots/u2f.png b/apps/login/screenshots/u2f.png similarity index 100% rename from login/apps/login/screenshots/u2f.png rename to apps/login/screenshots/u2f.png diff --git a/login/apps/login/screenshots/u2fset.png b/apps/login/screenshots/u2fset.png similarity index 100% rename from login/apps/login/screenshots/u2fset.png rename to apps/login/screenshots/u2fset.png diff --git a/login/apps/login/screenshots/verify.png b/apps/login/screenshots/verify.png similarity index 100% rename from login/apps/login/screenshots/verify.png rename to apps/login/screenshots/verify.png diff --git a/login/scripts/entrypoint.sh b/apps/login/scripts/entrypoint.sh similarity index 88% rename from login/scripts/entrypoint.sh rename to apps/login/scripts/entrypoint.sh index c537e8b8fb..123612d1cb 100755 --- a/login/scripts/entrypoint.sh +++ b/apps/login/scripts/entrypoint.sh @@ -8,4 +8,6 @@ if [ -n "${ZITADEL_SERVICE_USER_TOKEN_FILE}" ] && [ -f "${ZITADEL_SERVICE_USER_T export ZITADEL_SERVICE_USER_TOKEN=$(cat "${ZITADEL_SERVICE_USER_TOKEN_FILE}") fi -exec node apps/login/server.js + + +exec node /runtime/apps/login/apps/login/server.js diff --git a/apps/login/scripts/healthcheck.js b/apps/login/scripts/healthcheck.js new file mode 100644 index 0000000000..652524154a --- /dev/null +++ b/apps/login/scripts/healthcheck.js @@ -0,0 +1,14 @@ +const url = process.argv[2]; + +if (!url) { + console.error("❌ No URL provided as command line argument."); + process.exit(1); +} + +try { + const res = await fetch(url); + if (!res.ok) process.exit(1); + process.exit(0); +} catch (e) { + process.exit(1); +} diff --git a/login/apps/login/src/app/(login)/accounts/page.tsx b/apps/login/src/app/(login)/accounts/page.tsx similarity index 95% rename from login/apps/login/src/app/(login)/accounts/page.tsx rename to apps/login/src/app/(login)/accounts/page.tsx index cebcd014bb..e4e6b387dc 100644 --- a/login/apps/login/src/app/(login)/accounts/page.tsx +++ b/apps/login/src/app/(login)/accounts/page.tsx @@ -15,12 +15,12 @@ import { headers } from "next/headers"; import Link from "next/link"; async function loadSessions({ serviceUrl }: { serviceUrl: string }) { - const ids: (string | undefined)[] = await getAllSessionCookieIds(); + const cookieIds = await getAllSessionCookieIds(); - if (ids && ids.length) { + if (cookieIds && cookieIds.length) { const response = await listSessions({ serviceUrl, - ids: ids.filter((id) => !!id) as string[], + ids: cookieIds.filter((id) => !!id) as string[], }); return response?.sessions ?? []; } else { diff --git a/login/apps/login/src/app/(login)/authenticator/set/page.tsx b/apps/login/src/app/(login)/authenticator/set/page.tsx similarity index 100% rename from login/apps/login/src/app/(login)/authenticator/set/page.tsx rename to apps/login/src/app/(login)/authenticator/set/page.tsx diff --git a/login/apps/login/src/app/(login)/device/consent/page.tsx b/apps/login/src/app/(login)/device/consent/page.tsx similarity index 100% rename from login/apps/login/src/app/(login)/device/consent/page.tsx rename to apps/login/src/app/(login)/device/consent/page.tsx diff --git a/login/apps/login/src/app/(login)/device/page.tsx b/apps/login/src/app/(login)/device/page.tsx similarity index 100% rename from login/apps/login/src/app/(login)/device/page.tsx rename to apps/login/src/app/(login)/device/page.tsx diff --git a/login/apps/login/src/app/(login)/error.tsx b/apps/login/src/app/(login)/error.tsx similarity index 100% rename from login/apps/login/src/app/(login)/error.tsx rename to apps/login/src/app/(login)/error.tsx diff --git a/login/apps/login/src/app/(login)/idp/[provider]/failure/page.tsx b/apps/login/src/app/(login)/idp/[provider]/failure/page.tsx similarity index 100% rename from login/apps/login/src/app/(login)/idp/[provider]/failure/page.tsx rename to apps/login/src/app/(login)/idp/[provider]/failure/page.tsx diff --git a/login/apps/login/src/app/(login)/idp/[provider]/success/page.tsx b/apps/login/src/app/(login)/idp/[provider]/success/page.tsx similarity index 100% rename from login/apps/login/src/app/(login)/idp/[provider]/success/page.tsx rename to apps/login/src/app/(login)/idp/[provider]/success/page.tsx diff --git a/login/apps/login/src/app/(login)/idp/ldap/page.tsx b/apps/login/src/app/(login)/idp/ldap/page.tsx similarity index 100% rename from login/apps/login/src/app/(login)/idp/ldap/page.tsx rename to apps/login/src/app/(login)/idp/ldap/page.tsx diff --git a/login/apps/login/src/app/(login)/idp/page.tsx b/apps/login/src/app/(login)/idp/page.tsx similarity index 100% rename from login/apps/login/src/app/(login)/idp/page.tsx rename to apps/login/src/app/(login)/idp/page.tsx diff --git a/apps/login/src/app/(login)/layout.tsx b/apps/login/src/app/(login)/layout.tsx new file mode 100644 index 0000000000..dbce9804c9 --- /dev/null +++ b/apps/login/src/app/(login)/layout.tsx @@ -0,0 +1,65 @@ +import "@/styles/globals.scss"; + +import { LanguageProvider } from "@/components/language-provider"; +import { LanguageSwitcher } from "@/components/language-switcher"; +import { Skeleton } from "@/components/skeleton"; +import { Theme } from "@/components/theme"; +import { ThemeProvider } from "@/components/theme-provider"; +import * as Tooltip from "@radix-ui/react-tooltip"; +import { Analytics } from "@vercel/analytics/react"; +import { Lato } from "next/font/google"; +import { ReactNode, Suspense } from "react"; + +const lato = Lato({ + weight: ["400", "700", "900"], + subsets: ["latin"], +}); + +export default async function RootLayout({ + children, +}: { + children: ReactNode; +}) { + return ( + + + + + + +
+ +
+
+
+ +
+
+ + } + > + +
+
+ {children} +
+ + +
+
+
+
+
+
+
+ + + + ); +} diff --git a/login/apps/login/src/app/(login)/loginname/page.tsx b/apps/login/src/app/(login)/loginname/page.tsx similarity index 100% rename from login/apps/login/src/app/(login)/loginname/page.tsx rename to apps/login/src/app/(login)/loginname/page.tsx diff --git a/login/apps/login/src/app/(login)/logout/page.tsx b/apps/login/src/app/(login)/logout/page.tsx similarity index 90% rename from login/apps/login/src/app/(login)/logout/page.tsx rename to apps/login/src/app/(login)/logout/page.tsx index 853461d7d6..71371fc129 100644 --- a/login/apps/login/src/app/(login)/logout/page.tsx +++ b/apps/login/src/app/(login)/logout/page.tsx @@ -12,12 +12,12 @@ import { Organization } from "@zitadel/proto/zitadel/org/v2/org_pb"; import { headers } from "next/headers"; async function loadSessions({ serviceUrl }: { serviceUrl: string }) { - const ids: (string | undefined)[] = await getAllSessionCookieIds(); + const cookieIds = await getAllSessionCookieIds(); - if (ids && ids.length) { + if (cookieIds && cookieIds.length) { const response = await listSessions({ serviceUrl, - ids: ids.filter((id) => !!id) as string[], + ids: cookieIds.filter((id) => !!id) as string[], }); return response?.sessions ?? []; } else { @@ -34,7 +34,8 @@ export default async function Page(props: { const organization = searchParams?.organization; const postLogoutRedirectUri = searchParams?.post_logout_redirect_uri; const logoutHint = searchParams?.logout_hint; - const UILocales = searchParams?.ui_locales; // TODO implement with new translation service + // TODO implement with new translation service + // const UILocales = searchParams?.ui_locales; const _headers = await headers(); const { serviceUrl } = getServiceUrlFromHeaders(_headers); diff --git a/login/apps/login/src/app/(login)/logout/success/page.tsx b/apps/login/src/app/(login)/logout/success/page.tsx similarity index 70% rename from login/apps/login/src/app/(login)/logout/success/page.tsx rename to apps/login/src/app/(login)/logout/success/page.tsx index e7ec459f03..a13564664c 100644 --- a/login/apps/login/src/app/(login)/logout/success/page.tsx +++ b/apps/login/src/app/(login)/logout/success/page.tsx @@ -1,8 +1,7 @@ import { DynamicTheme } from "@/components/dynamic-theme"; import { Translated } from "@/components/translated"; import { getServiceUrlFromHeaders } from "@/lib/service-url"; -import { getBrandingSettings, getDefaultOrg } from "@/lib/zitadel"; -import { Organization } from "@zitadel/proto/zitadel/org/v2/org_pb"; +import { getBrandingSettings } from "@/lib/zitadel"; import { headers } from "next/headers"; export default async function Page(props: { searchParams: Promise }) { @@ -11,17 +10,7 @@ export default async function Page(props: { searchParams: Promise }) { const _headers = await headers(); const { serviceUrl } = getServiceUrlFromHeaders(_headers); - const { login_hint, organization } = searchParams; - - let defaultOrganization; - if (!organization) { - const org: Organization | null = await getDefaultOrg({ - serviceUrl, - }); - if (org) { - defaultOrganization = org.id; - } - } + const { organization } = searchParams; const branding = await getBrandingSettings({ serviceUrl, diff --git a/login/apps/login/src/app/(login)/mfa/page.tsx b/apps/login/src/app/(login)/mfa/page.tsx similarity index 100% rename from login/apps/login/src/app/(login)/mfa/page.tsx rename to apps/login/src/app/(login)/mfa/page.tsx diff --git a/login/apps/login/src/app/(login)/mfa/set/page.tsx b/apps/login/src/app/(login)/mfa/set/page.tsx similarity index 100% rename from login/apps/login/src/app/(login)/mfa/set/page.tsx rename to apps/login/src/app/(login)/mfa/set/page.tsx diff --git a/login/apps/login/src/app/(login)/otp/[method]/page.tsx b/apps/login/src/app/(login)/otp/[method]/page.tsx similarity index 94% rename from login/apps/login/src/app/(login)/otp/[method]/page.tsx rename to apps/login/src/app/(login)/otp/[method]/page.tsx index af4159d62e..1b1356315a 100644 --- a/login/apps/login/src/app/(login)/otp/[method]/page.tsx +++ b/apps/login/src/app/(login)/otp/[method]/page.tsx @@ -30,28 +30,22 @@ export default async function Page(props: { const { loginName, // send from password page - userId, // send from email link requestId, sessionId, organization, code, - submit, } = searchParams; const { method } = params; const session = sessionId - ? await loadSessionById(serviceUrl, sessionId, organization) + ? await loadSessionById(sessionId, organization) : await loadMostRecentSession({ serviceUrl, sessionParams: { loginName, organization }, }); - async function loadSessionById( - host: string, - sessionId: string, - organization?: string, - ) { + async function loadSessionById(sessionId: string, organization?: string) { const recent = await getSessionCookieById({ sessionId, organization }); return getSession({ serviceUrl, diff --git a/login/apps/login/src/app/(login)/otp/[method]/set/page.tsx b/apps/login/src/app/(login)/otp/[method]/set/page.tsx similarity index 96% rename from login/apps/login/src/app/(login)/otp/[method]/set/page.tsx rename to apps/login/src/app/(login)/otp/[method]/set/page.tsx index f74093ce8e..4624dc9eba 100644 --- a/login/apps/login/src/app/(login)/otp/[method]/set/page.tsx +++ b/apps/login/src/app/(login)/otp/[method]/set/page.tsx @@ -66,20 +66,20 @@ export default async function Page(props: { error = err; }); } else if (method === "sms") { - // does not work await addOTPSMS({ serviceUrl, userId: session.factors.user.id, - }).catch((error) => { - error = new Error("Could not add OTP via SMS"); + }).catch((_error) => { + // TODO: Throw this error? + new Error("Could not add OTP via SMS"); }); } else if (method === "email") { - // works await addOTPEmail({ serviceUrl, userId: session.factors.user.id, - }).catch((error) => { - error = new Error("Could not add OTP via Email"); + }).catch((_error) => { + // TODO: Throw this error? + new Error("Could not add OTP via Email"); }); } else { throw new Error("Invalid method"); @@ -106,6 +106,7 @@ export default async function Page(props: { paramsToContinue.append("requestId", requestId); } urlToContinue = `/otp/${method}?` + paramsToContinue; + // immediately check the OTP on the next page if sms or email was set up if (["email", "sms"].includes(method)) { return redirect(urlToContinue); diff --git a/login/apps/login/src/app/(login)/page.tsx b/apps/login/src/app/(login)/page.tsx similarity index 100% rename from login/apps/login/src/app/(login)/page.tsx rename to apps/login/src/app/(login)/page.tsx diff --git a/login/apps/login/src/app/(login)/passkey/page.tsx b/apps/login/src/app/(login)/passkey/page.tsx similarity index 100% rename from login/apps/login/src/app/(login)/passkey/page.tsx rename to apps/login/src/app/(login)/passkey/page.tsx diff --git a/login/apps/login/src/app/(login)/passkey/set/page.tsx b/apps/login/src/app/(login)/passkey/set/page.tsx similarity index 100% rename from login/apps/login/src/app/(login)/passkey/set/page.tsx rename to apps/login/src/app/(login)/passkey/set/page.tsx diff --git a/login/apps/login/src/app/(login)/password/change/page.tsx b/apps/login/src/app/(login)/password/change/page.tsx similarity index 100% rename from login/apps/login/src/app/(login)/password/change/page.tsx rename to apps/login/src/app/(login)/password/change/page.tsx diff --git a/login/apps/login/src/app/(login)/password/page.tsx b/apps/login/src/app/(login)/password/page.tsx similarity index 97% rename from login/apps/login/src/app/(login)/password/page.tsx rename to apps/login/src/app/(login)/password/page.tsx index 461c095157..a9ab4091f9 100644 --- a/login/apps/login/src/app/(login)/password/page.tsx +++ b/apps/login/src/app/(login)/password/page.tsx @@ -17,7 +17,7 @@ export default async function Page(props: { searchParams: Promise>; }) { const searchParams = await props.searchParams; - let { loginName, organization, requestId, alt } = searchParams; + let { loginName, organization, requestId } = searchParams; const _headers = await headers(); const { serviceUrl } = getServiceUrlFromHeaders(_headers); diff --git a/login/apps/login/src/app/(login)/password/set/page.tsx b/apps/login/src/app/(login)/password/set/page.tsx similarity index 100% rename from login/apps/login/src/app/(login)/password/set/page.tsx rename to apps/login/src/app/(login)/password/set/page.tsx diff --git a/login/apps/login/src/app/(login)/register/page.tsx b/apps/login/src/app/(login)/register/page.tsx similarity index 100% rename from login/apps/login/src/app/(login)/register/page.tsx rename to apps/login/src/app/(login)/register/page.tsx diff --git a/login/apps/login/src/app/(login)/register/password/page.tsx b/apps/login/src/app/(login)/register/password/page.tsx similarity index 100% rename from login/apps/login/src/app/(login)/register/password/page.tsx rename to apps/login/src/app/(login)/register/password/page.tsx diff --git a/login/apps/login/src/app/(login)/saml-post/route.ts b/apps/login/src/app/(login)/saml-post/route.ts similarity index 100% rename from login/apps/login/src/app/(login)/saml-post/route.ts rename to apps/login/src/app/(login)/saml-post/route.ts diff --git a/login/apps/login/src/app/(login)/signedin/page.tsx b/apps/login/src/app/(login)/signedin/page.tsx similarity index 100% rename from login/apps/login/src/app/(login)/signedin/page.tsx rename to apps/login/src/app/(login)/signedin/page.tsx diff --git a/login/apps/login/src/app/(login)/u2f/page.tsx b/apps/login/src/app/(login)/u2f/page.tsx similarity index 100% rename from login/apps/login/src/app/(login)/u2f/page.tsx rename to apps/login/src/app/(login)/u2f/page.tsx diff --git a/login/apps/login/src/app/(login)/u2f/set/page.tsx b/apps/login/src/app/(login)/u2f/set/page.tsx similarity index 100% rename from login/apps/login/src/app/(login)/u2f/set/page.tsx rename to apps/login/src/app/(login)/u2f/set/page.tsx diff --git a/login/apps/login/src/app/(login)/verify/page.tsx b/apps/login/src/app/(login)/verify/page.tsx similarity index 100% rename from login/apps/login/src/app/(login)/verify/page.tsx rename to apps/login/src/app/(login)/verify/page.tsx diff --git a/login/apps/login/src/app/(login)/verify/success/page.tsx b/apps/login/src/app/(login)/verify/success/page.tsx similarity index 96% rename from login/apps/login/src/app/(login)/verify/success/page.tsx rename to apps/login/src/app/(login)/verify/success/page.tsx index f216226f7c..5427ecd90e 100644 --- a/login/apps/login/src/app/(login)/verify/success/page.tsx +++ b/apps/login/src/app/(login)/verify/success/page.tsx @@ -13,7 +13,7 @@ export default async function Page(props: { searchParams: Promise }) { const _headers = await headers(); const { serviceUrl } = getServiceUrlFromHeaders(_headers); - const { loginName, requestId, organization, userId } = searchParams; + const { loginName, organization, userId } = searchParams; const branding = await getBrandingSettings({ serviceUrl, diff --git a/login/apps/login/src/app/global-error.tsx b/apps/login/src/app/global-error.tsx similarity index 100% rename from login/apps/login/src/app/global-error.tsx rename to apps/login/src/app/global-error.tsx diff --git a/login/apps/login/src/app/healthy/route.ts b/apps/login/src/app/healthy/route.ts similarity index 100% rename from login/apps/login/src/app/healthy/route.ts rename to apps/login/src/app/healthy/route.ts diff --git a/login/apps/login/src/app/login/route.ts b/apps/login/src/app/login/route.ts similarity index 100% rename from login/apps/login/src/app/login/route.ts rename to apps/login/src/app/login/route.ts diff --git a/login/apps/login/src/app/security/route.ts b/apps/login/src/app/security/route.ts similarity index 100% rename from login/apps/login/src/app/security/route.ts rename to apps/login/src/app/security/route.ts diff --git a/login/apps/login/src/components/address-bar.tsx b/apps/login/src/components/address-bar.tsx similarity index 100% rename from login/apps/login/src/components/address-bar.tsx rename to apps/login/src/components/address-bar.tsx diff --git a/login/apps/login/src/components/alert.tsx b/apps/login/src/components/alert.tsx similarity index 98% rename from login/apps/login/src/components/alert.tsx rename to apps/login/src/components/alert.tsx index fa18b750f2..01f82627cd 100644 --- a/login/apps/login/src/components/alert.tsx +++ b/apps/login/src/components/alert.tsx @@ -17,7 +17,7 @@ export enum AlertType { const yellow = "border-yellow-600/40 dark:border-yellow-500/20 bg-yellow-200/30 text-yellow-600 dark:bg-yellow-700/20 dark:text-yellow-200"; -const red = +// const red = "border-red-600/40 dark:border-red-500/20 bg-red-200/30 text-red-600 dark:bg-red-700/20 dark:text-red-200"; const neutral = "border-divider-light dark:border-divider-dark bg-black/5 text-gray-600 dark:bg-white/10 dark:text-gray-200"; diff --git a/login/apps/login/src/components/app-avatar.tsx b/apps/login/src/components/app-avatar.tsx similarity index 100% rename from login/apps/login/src/components/app-avatar.tsx rename to apps/login/src/components/app-avatar.tsx diff --git a/login/apps/login/src/components/auth-methods.tsx b/apps/login/src/components/auth-methods.tsx similarity index 100% rename from login/apps/login/src/components/auth-methods.tsx rename to apps/login/src/components/auth-methods.tsx diff --git a/login/apps/login/src/components/authentication-method-radio.tsx b/apps/login/src/components/authentication-method-radio.tsx similarity index 99% rename from login/apps/login/src/components/authentication-method-radio.tsx rename to apps/login/src/components/authentication-method-radio.tsx index 121e257485..93a42ab5f4 100644 --- a/login/apps/login/src/components/authentication-method-radio.tsx +++ b/apps/login/src/components/authentication-method-radio.tsx @@ -43,7 +43,7 @@ export function AuthenticationMethodRadio({ } boder-divider-light relative flex h-full flex-1 cursor-pointer rounded-lg border px-5 py-4 hover:shadow-lg focus:outline-none dark:border-divider-dark dark:hover:bg-white/10` } > - {({ active, checked }) => ( + {({ checked }) => ( <>
{method === "passkey" && ( diff --git a/login/apps/login/src/components/avatar.tsx b/apps/login/src/components/avatar.tsx similarity index 100% rename from login/apps/login/src/components/avatar.tsx rename to apps/login/src/components/avatar.tsx diff --git a/login/apps/login/src/components/back-button.tsx b/apps/login/src/components/back-button.tsx similarity index 100% rename from login/apps/login/src/components/back-button.tsx rename to apps/login/src/components/back-button.tsx diff --git a/login/apps/login/src/components/boundary.tsx b/apps/login/src/components/boundary.tsx similarity index 100% rename from login/apps/login/src/components/boundary.tsx rename to apps/login/src/components/boundary.tsx diff --git a/login/apps/login/src/components/button.tsx b/apps/login/src/components/button.tsx similarity index 100% rename from login/apps/login/src/components/button.tsx rename to apps/login/src/components/button.tsx diff --git a/login/apps/login/src/components/change-password-form.tsx b/apps/login/src/components/change-password-form.tsx similarity index 96% rename from login/apps/login/src/components/change-password-form.tsx rename to apps/login/src/components/change-password-form.tsx index 1c93e4ae23..6124812e27 100644 --- a/login/apps/login/src/components/change-password-form.tsx +++ b/apps/login/src/components/change-password-form.tsx @@ -15,6 +15,7 @@ import { ChecksSchema } from "@zitadel/proto/zitadel/session/v2/session_service_ import { PasswordComplexitySettings } from "@zitadel/proto/zitadel/settings/v2/password_settings_pb"; import { useRouter } from "next/navigation"; import { useState } from "react"; +import { useTranslations } from "next-intl"; import { FieldValues, useForm } from "react-hook-form"; import { Alert } from "./alert"; import { BackButton } from "./back-button"; @@ -56,6 +57,8 @@ export function ChangePasswordForm({ }, }); + const t = useTranslations("password"); + const [loading, setLoading] = useState(false); const [error, setError] = useState(""); @@ -156,7 +159,7 @@ export function ChangePasswordForm({ autoComplete="new-password" required {...register("password", { - required: "You have to provide a new password!", + required: t("change.required.newPassword"), })} label="New Password" error={errors.password?.message as string} @@ -169,7 +172,7 @@ export function ChangePasswordForm({ required autoComplete="new-password" {...register("confirmPassword", { - required: "This field is required", + required: t("change.required.confirmPassword"), })} label="Confirm Password" error={errors.confirmPassword?.message as string} diff --git a/login/apps/login/src/components/checkbox.tsx b/apps/login/src/components/checkbox.tsx similarity index 100% rename from login/apps/login/src/components/checkbox.tsx rename to apps/login/src/components/checkbox.tsx diff --git a/login/apps/login/src/components/choose-authenticator-to-login.tsx b/apps/login/src/components/choose-authenticator-to-login.tsx similarity index 100% rename from login/apps/login/src/components/choose-authenticator-to-login.tsx rename to apps/login/src/components/choose-authenticator-to-login.tsx diff --git a/login/apps/login/src/components/choose-authenticator-to-setup.tsx b/apps/login/src/components/choose-authenticator-to-setup.tsx similarity index 100% rename from login/apps/login/src/components/choose-authenticator-to-setup.tsx rename to apps/login/src/components/choose-authenticator-to-setup.tsx diff --git a/login/apps/login/src/components/choose-second-factor-to-setup.tsx b/apps/login/src/components/choose-second-factor-to-setup.tsx similarity index 100% rename from login/apps/login/src/components/choose-second-factor-to-setup.tsx rename to apps/login/src/components/choose-second-factor-to-setup.tsx diff --git a/login/apps/login/src/components/choose-second-factor.tsx b/apps/login/src/components/choose-second-factor.tsx similarity index 100% rename from login/apps/login/src/components/choose-second-factor.tsx rename to apps/login/src/components/choose-second-factor.tsx diff --git a/login/apps/login/src/components/consent.tsx b/apps/login/src/components/consent.tsx similarity index 100% rename from login/apps/login/src/components/consent.tsx rename to apps/login/src/components/consent.tsx diff --git a/login/apps/login/src/components/copy-to-clipboard.tsx b/apps/login/src/components/copy-to-clipboard.tsx similarity index 100% rename from login/apps/login/src/components/copy-to-clipboard.tsx rename to apps/login/src/components/copy-to-clipboard.tsx diff --git a/login/apps/login/src/components/default-tags.tsx b/apps/login/src/components/default-tags.tsx similarity index 100% rename from login/apps/login/src/components/default-tags.tsx rename to apps/login/src/components/default-tags.tsx diff --git a/login/apps/login/src/components/device-code-form.tsx b/apps/login/src/components/device-code-form.tsx similarity index 93% rename from login/apps/login/src/components/device-code-form.tsx rename to apps/login/src/components/device-code-form.tsx index 7dd63b0f5c..9c5a28ca4f 100644 --- a/login/apps/login/src/components/device-code-form.tsx +++ b/apps/login/src/components/device-code-form.tsx @@ -4,6 +4,7 @@ import { Alert } from "@/components/alert"; import { getDeviceAuthorizationRequest } from "@/lib/server/oidc"; import { useRouter } from "next/navigation"; import { useState } from "react"; +import { useTranslations } from "next-intl"; import { useForm } from "react-hook-form"; import { BackButton } from "./back-button"; import { Button, ButtonVariants } from "./button"; @@ -25,6 +26,8 @@ export function DeviceCodeForm({ userCode }: { userCode?: string }) { }, }); + const t = useTranslations("device"); + const [error, setError] = useState(""); const [loading, setLoading] = useState(false); @@ -62,7 +65,7 @@ export function DeviceCodeForm({ userCode }: { userCode?: string }) { diff --git a/login/apps/login/src/components/dynamic-theme.tsx b/apps/login/src/components/dynamic-theme.tsx similarity index 100% rename from login/apps/login/src/components/dynamic-theme.tsx rename to apps/login/src/components/dynamic-theme.tsx diff --git a/login/apps/login/src/components/external-link.tsx b/apps/login/src/components/external-link.tsx similarity index 100% rename from login/apps/login/src/components/external-link.tsx rename to apps/login/src/components/external-link.tsx diff --git a/login/apps/login/src/components/idp-signin.tsx b/apps/login/src/components/idp-signin.tsx similarity index 100% rename from login/apps/login/src/components/idp-signin.tsx rename to apps/login/src/components/idp-signin.tsx diff --git a/login/apps/login/src/components/idps/base-button.tsx b/apps/login/src/components/idps/base-button.tsx similarity index 100% rename from login/apps/login/src/components/idps/base-button.tsx rename to apps/login/src/components/idps/base-button.tsx diff --git a/login/apps/login/src/components/idps/pages/complete-idp.tsx b/apps/login/src/components/idps/pages/complete-idp.tsx similarity index 100% rename from login/apps/login/src/components/idps/pages/complete-idp.tsx rename to apps/login/src/components/idps/pages/complete-idp.tsx diff --git a/login/apps/login/src/components/idps/pages/linking-failed.tsx b/apps/login/src/components/idps/pages/linking-failed.tsx similarity index 100% rename from login/apps/login/src/components/idps/pages/linking-failed.tsx rename to apps/login/src/components/idps/pages/linking-failed.tsx diff --git a/login/apps/login/src/components/idps/pages/linking-success.tsx b/apps/login/src/components/idps/pages/linking-success.tsx similarity index 100% rename from login/apps/login/src/components/idps/pages/linking-success.tsx rename to apps/login/src/components/idps/pages/linking-success.tsx diff --git a/login/apps/login/src/components/idps/pages/login-failed.tsx b/apps/login/src/components/idps/pages/login-failed.tsx similarity index 100% rename from login/apps/login/src/components/idps/pages/login-failed.tsx rename to apps/login/src/components/idps/pages/login-failed.tsx diff --git a/login/apps/login/src/components/idps/pages/login-success.tsx b/apps/login/src/components/idps/pages/login-success.tsx similarity index 100% rename from login/apps/login/src/components/idps/pages/login-success.tsx rename to apps/login/src/components/idps/pages/login-success.tsx diff --git a/login/apps/login/src/components/idps/sign-in-with-apple.tsx b/apps/login/src/components/idps/sign-in-with-apple.tsx similarity index 100% rename from login/apps/login/src/components/idps/sign-in-with-apple.tsx rename to apps/login/src/components/idps/sign-in-with-apple.tsx diff --git a/login/apps/login/src/components/idps/sign-in-with-azure-ad.tsx b/apps/login/src/components/idps/sign-in-with-azure-ad.tsx similarity index 100% rename from login/apps/login/src/components/idps/sign-in-with-azure-ad.tsx rename to apps/login/src/components/idps/sign-in-with-azure-ad.tsx diff --git a/login/apps/login/src/components/idps/sign-in-with-generic.tsx b/apps/login/src/components/idps/sign-in-with-generic.tsx similarity index 100% rename from login/apps/login/src/components/idps/sign-in-with-generic.tsx rename to apps/login/src/components/idps/sign-in-with-generic.tsx diff --git a/login/apps/login/src/components/idps/sign-in-with-github.tsx b/apps/login/src/components/idps/sign-in-with-github.tsx similarity index 100% rename from login/apps/login/src/components/idps/sign-in-with-github.tsx rename to apps/login/src/components/idps/sign-in-with-github.tsx diff --git a/login/apps/login/src/components/idps/sign-in-with-gitlab.test.tsx b/apps/login/src/components/idps/sign-in-with-gitlab.test.tsx similarity index 100% rename from login/apps/login/src/components/idps/sign-in-with-gitlab.test.tsx rename to apps/login/src/components/idps/sign-in-with-gitlab.test.tsx diff --git a/login/apps/login/src/components/idps/sign-in-with-gitlab.tsx b/apps/login/src/components/idps/sign-in-with-gitlab.tsx similarity index 100% rename from login/apps/login/src/components/idps/sign-in-with-gitlab.tsx rename to apps/login/src/components/idps/sign-in-with-gitlab.tsx diff --git a/login/apps/login/src/components/idps/sign-in-with-google.test.tsx b/apps/login/src/components/idps/sign-in-with-google.test.tsx similarity index 100% rename from login/apps/login/src/components/idps/sign-in-with-google.test.tsx rename to apps/login/src/components/idps/sign-in-with-google.test.tsx diff --git a/login/apps/login/src/components/idps/sign-in-with-google.tsx b/apps/login/src/components/idps/sign-in-with-google.tsx similarity index 100% rename from login/apps/login/src/components/idps/sign-in-with-google.tsx rename to apps/login/src/components/idps/sign-in-with-google.tsx diff --git a/login/apps/login/src/components/input.tsx b/apps/login/src/components/input.tsx similarity index 100% rename from login/apps/login/src/components/input.tsx rename to apps/login/src/components/input.tsx diff --git a/login/apps/login/src/components/language-provider.tsx b/apps/login/src/components/language-provider.tsx similarity index 100% rename from login/apps/login/src/components/language-provider.tsx rename to apps/login/src/components/language-provider.tsx diff --git a/login/apps/login/src/components/language-switcher.tsx b/apps/login/src/components/language-switcher.tsx similarity index 98% rename from login/apps/login/src/components/language-switcher.tsx rename to apps/login/src/components/language-switcher.tsx index 1b2ea9d727..db5df5e14c 100644 --- a/login/apps/login/src/components/language-switcher.tsx +++ b/apps/login/src/components/language-switcher.tsx @@ -55,7 +55,7 @@ export function LanguageSwitcher() { "transition duration-100 ease-in data-[leave]:data-[closed]:opacity-0", )} > - {LANGS.map((lang, index) => ( + {LANGS.map((lang) => ( @@ -77,7 +77,7 @@ export function LDAPUsernamePasswordForm({ idpId, link }: Props) { diff --git a/login/apps/login/src/components/login-otp.tsx b/apps/login/src/components/login-otp.tsx similarity index 98% rename from login/apps/login/src/components/login-otp.tsx rename to apps/login/src/components/login-otp.tsx index f2b7e903d7..ffaa5320b0 100644 --- a/login/apps/login/src/components/login-otp.tsx +++ b/apps/login/src/components/login-otp.tsx @@ -11,6 +11,7 @@ import { useEffect, useRef, useState } from "react"; import { useForm } from "react-hook-form"; import { Alert, AlertType } from "./alert"; import { BackButton } from "./back-button"; +import { useTranslations } from "next-intl"; import { Button, ButtonVariants } from "./button"; import { TextInput } from "./input"; import { Spinner } from "./spinner"; @@ -42,6 +43,8 @@ export function LoginOTP({ code, loginSettings, }: Props) { + const t = useTranslations("otp"); + const [error, setError] = useState(""); const [loading, setLoading] = useState(false); @@ -249,7 +252,7 @@ export function LoginOTP({
({ mode: "onBlur", }); + + const t = useTranslations("password"); const [info, setInfo] = useState(""); const [error, setError] = useState(""); @@ -118,7 +121,7 @@ export function PasswordForm({ diff --git a/login/apps/login/src/components/privacy-policy-checkboxes.tsx b/apps/login/src/components/privacy-policy-checkboxes.tsx similarity index 100% rename from login/apps/login/src/components/privacy-policy-checkboxes.tsx rename to apps/login/src/components/privacy-policy-checkboxes.tsx diff --git a/login/apps/login/src/components/register-form-idp-incomplete.tsx b/apps/login/src/components/register-form-idp-incomplete.tsx similarity index 92% rename from login/apps/login/src/components/register-form-idp-incomplete.tsx rename to apps/login/src/components/register-form-idp-incomplete.tsx index 1e9f2e99f2..10e766be76 100644 --- a/login/apps/login/src/components/register-form-idp-incomplete.tsx +++ b/apps/login/src/components/register-form-idp-incomplete.tsx @@ -3,6 +3,7 @@ import { registerUserAndLinkToIDP } from "@/lib/server/register"; import { useRouter } from "next/navigation"; import { useState } from "react"; +import { useTranslations } from "next-intl"; import { FieldValues, useForm } from "react-hook-form"; import { Alert } from "./alert"; import { BackButton } from "./back-button"; @@ -54,6 +55,8 @@ export function RegisterFormIDPIncomplete({ }, }); + const t = useTranslations("register"); + const [loading, setLoading] = useState(false); const [error, setError] = useState(""); @@ -102,7 +105,7 @@ export function RegisterFormIDPIncomplete({ type="firstname" autoComplete="firstname" required - {...register("firstname", { required: "This field is required" })} + {...register("firstname", { required: t("required.firstname") })} label="First name" error={errors.firstname?.message as string} data-testid="firstname-text-input" @@ -113,7 +116,7 @@ export function RegisterFormIDPIncomplete({ type="lastname" autoComplete="lastname" required - {...register("lastname", { required: "This field is required" })} + {...register("lastname", { required: t("required.lastname") })} label="Last name" error={errors.lastname?.message as string} data-testid="lastname-text-input" @@ -124,7 +127,7 @@ export function RegisterFormIDPIncomplete({ type="email" autoComplete="email" required - {...register("email", { required: "This field is required" })} + {...register("email", { required: t("required.email") })} label="E-mail" error={errors.email?.message as string} data-testid="email-text-input" diff --git a/login/apps/login/src/components/register-form.tsx b/apps/login/src/components/register-form.tsx similarity index 95% rename from login/apps/login/src/components/register-form.tsx rename to apps/login/src/components/register-form.tsx index 554a0f08c2..7b4254b0b3 100644 --- a/login/apps/login/src/components/register-form.tsx +++ b/apps/login/src/components/register-form.tsx @@ -8,6 +8,7 @@ import { } from "@zitadel/proto/zitadel/settings/v2/login_settings_pb"; import { useRouter } from "next/navigation"; import { useState } from "react"; +import { useTranslations } from "next-intl"; import { FieldValues, useForm } from "react-hook-form"; import { Alert, AlertType } from "./alert"; import { @@ -60,6 +61,8 @@ export function RegisterForm({ }, }); + const t = useTranslations("register"); + const [loading, setLoading] = useState(false); const [selected, setSelected] = useState(methods[0]); const [error, setError] = useState(""); @@ -130,7 +133,7 @@ export function RegisterForm({ type="firstname" autoComplete="firstname" required - {...register("firstname", { required: "This field is required" })} + {...register("firstname", { required: t("required.firstname") })} label="First name" error={errors.firstname?.message as string} data-testid="firstname-text-input" @@ -141,7 +144,7 @@ export function RegisterForm({ type="lastname" autoComplete="lastname" required - {...register("lastname", { required: "This field is required" })} + {...register("lastname", { required: t("required.lastname") })} label="Last name" error={errors.lastname?.message as string} data-testid="lastname-text-input" @@ -152,7 +155,7 @@ export function RegisterForm({ type="email" autoComplete="email" required - {...register("email", { required: "This field is required" })} + {...register("email", { required: t("required.email") })} label="E-mail" error={errors.email?.message as string} data-testid="email-text-input" diff --git a/login/apps/login/src/components/register-passkey.tsx b/apps/login/src/components/register-passkey.tsx similarity index 100% rename from login/apps/login/src/components/register-passkey.tsx rename to apps/login/src/components/register-passkey.tsx diff --git a/login/apps/login/src/components/register-u2f.tsx b/apps/login/src/components/register-u2f.tsx similarity index 100% rename from login/apps/login/src/components/register-u2f.tsx rename to apps/login/src/components/register-u2f.tsx diff --git a/login/apps/login/src/components/self-service-menu.tsx b/apps/login/src/components/self-service-menu.tsx similarity index 93% rename from login/apps/login/src/components/self-service-menu.tsx rename to apps/login/src/components/self-service-menu.tsx index 8690160aed..511c14c0ab 100644 --- a/login/apps/login/src/components/self-service-menu.tsx +++ b/apps/login/src/components/self-service-menu.tsx @@ -1,6 +1,6 @@ import Link from "next/link"; -export function SelfServiceMenu({ sessionId }: { sessionId: string }) { +export function SelfServiceMenu() { const list: any[] = []; // if (!!config.selfservice.change_password.enabled) { diff --git a/login/apps/login/src/components/session-clear-item.tsx b/apps/login/src/components/session-clear-item.tsx similarity index 94% rename from login/apps/login/src/components/session-clear-item.tsx rename to apps/login/src/components/session-clear-item.tsx index 1c9e53121f..4f305b1bd7 100644 --- a/login/apps/login/src/components/session-clear-item.tsx +++ b/apps/login/src/components/session-clear-item.tsx @@ -21,7 +21,7 @@ export function SessionClearItem({ const currentLocale = useLocale(); moment.locale(currentLocale === "zh" ? "zh-cn" : currentLocale); - const [loading, setLoading] = useState(false); + const [_loading, setLoading] = useState(false); async function clearSessionId(id: string) { setLoading(true); @@ -41,9 +41,10 @@ export function SessionClearItem({ const { valid, verifiedAt } = isSessionValid(session); - const [error, setError] = useState(null); + const [_error, setError] = useState(null); - const router = useRouter(); + // TODO: To we have to call this? + useRouter(); return ( + + {valid && session.expirationDate && ( + + + Expires {moment(timestampDate(session.expirationDate)).fromNow()} + + + + )} + + ); +} diff --git a/login/apps/login/src/components/sessions-clear-list.tsx b/apps/login/src/components/sessions-clear-list.tsx similarity index 100% rename from login/apps/login/src/components/sessions-clear-list.tsx rename to apps/login/src/components/sessions-clear-list.tsx diff --git a/login/apps/login/src/components/sessions-list.tsx b/apps/login/src/components/sessions-list.tsx similarity index 100% rename from login/apps/login/src/components/sessions-list.tsx rename to apps/login/src/components/sessions-list.tsx diff --git a/login/apps/login/src/components/set-password-form.tsx b/apps/login/src/components/set-password-form.tsx similarity index 96% rename from login/apps/login/src/components/set-password-form.tsx rename to apps/login/src/components/set-password-form.tsx index d4b68e1b93..83e8849124 100644 --- a/login/apps/login/src/components/set-password-form.tsx +++ b/apps/login/src/components/set-password-form.tsx @@ -16,6 +16,7 @@ import { ChecksSchema } from "@zitadel/proto/zitadel/session/v2/session_service_ import { PasswordComplexitySettings } from "@zitadel/proto/zitadel/settings/v2/password_settings_pb"; import { useRouter } from "next/navigation"; import { useState } from "react"; +import { useTranslations } from "next-intl"; import { FieldValues, useForm } from "react-hook-form"; import { Alert, AlertType } from "./alert"; import { BackButton } from "./back-button"; @@ -59,6 +60,8 @@ export function SetPasswordForm({ }, }); + const t = useTranslations("password"); + const [loading, setLoading] = useState(false); const [error, setError] = useState(""); @@ -216,7 +219,7 @@ export function SetPasswordForm({ type="text" required {...register("code", { - required: "This field is required", + required: t("set.required.code"), })} label="Code" autoComplete="one-time-code" @@ -231,7 +234,7 @@ export function SetPasswordForm({ autoComplete="new-password" required {...register("password", { - required: "You have to provide a password!", + required: t("set.required.newPassword"), })} label="New Password" error={errors.password?.message as string} @@ -244,7 +247,7 @@ export function SetPasswordForm({ required autoComplete="new-password" {...register("confirmPassword", { - required: "This field is required", + required: t("set.required.confirmPassword"), })} label="Confirm Password" error={errors.confirmPassword?.message as string} diff --git a/login/apps/login/src/components/set-register-password-form.tsx b/apps/login/src/components/set-register-password-form.tsx similarity index 95% rename from login/apps/login/src/components/set-register-password-form.tsx rename to apps/login/src/components/set-register-password-form.tsx index 7ffa18de26..dc61c67311 100644 --- a/login/apps/login/src/components/set-register-password-form.tsx +++ b/apps/login/src/components/set-register-password-form.tsx @@ -10,6 +10,7 @@ import { registerUser } from "@/lib/server/register"; import { PasswordComplexitySettings } from "@zitadel/proto/zitadel/settings/v2/password_settings_pb"; import { useRouter } from "next/navigation"; import { useState } from "react"; +import { useTranslations } from "next-intl"; import { FieldValues, useForm } from "react-hook-form"; import { Alert } from "./alert"; import { BackButton } from "./back-button"; @@ -52,6 +53,8 @@ export function SetRegisterPasswordForm({ }, }); + const t = useTranslations("register"); + const [loading, setLoading] = useState(false); const [error, setError] = useState(""); @@ -115,7 +118,7 @@ export function SetRegisterPasswordForm({ autoComplete="new-password" required {...register("password", { - required: "You have to provide a password!", + required: t("password.required.password"), })} label="Password" error={errors.password?.message as string} @@ -128,7 +131,7 @@ export function SetRegisterPasswordForm({ required autoComplete="new-password" {...register("confirmPassword", { - required: "This field is required", + required: t("password.required.confirmPassword"), })} label="Confirm Password" error={errors.confirmPassword?.message as string} diff --git a/login/apps/login/src/components/sign-in-with-idp.tsx b/apps/login/src/components/sign-in-with-idp.tsx similarity index 100% rename from login/apps/login/src/components/sign-in-with-idp.tsx rename to apps/login/src/components/sign-in-with-idp.tsx diff --git a/login/apps/login/src/components/skeleton-card.tsx b/apps/login/src/components/skeleton-card.tsx similarity index 100% rename from login/apps/login/src/components/skeleton-card.tsx rename to apps/login/src/components/skeleton-card.tsx diff --git a/login/apps/login/src/components/skeleton.tsx b/apps/login/src/components/skeleton.tsx similarity index 100% rename from login/apps/login/src/components/skeleton.tsx rename to apps/login/src/components/skeleton.tsx diff --git a/login/apps/login/src/components/spinner.tsx b/apps/login/src/components/spinner.tsx similarity index 100% rename from login/apps/login/src/components/spinner.tsx rename to apps/login/src/components/spinner.tsx diff --git a/login/apps/login/src/components/state-badge.tsx b/apps/login/src/components/state-badge.tsx similarity index 100% rename from login/apps/login/src/components/state-badge.tsx rename to apps/login/src/components/state-badge.tsx diff --git a/login/apps/login/src/components/tab-group.tsx b/apps/login/src/components/tab-group.tsx similarity index 100% rename from login/apps/login/src/components/tab-group.tsx rename to apps/login/src/components/tab-group.tsx diff --git a/login/apps/login/src/components/tab.tsx b/apps/login/src/components/tab.tsx similarity index 100% rename from login/apps/login/src/components/tab.tsx rename to apps/login/src/components/tab.tsx diff --git a/login/apps/login/src/components/theme-provider.tsx b/apps/login/src/components/theme-provider.tsx similarity index 100% rename from login/apps/login/src/components/theme-provider.tsx rename to apps/login/src/components/theme-provider.tsx diff --git a/login/apps/login/src/components/theme-wrapper.tsx b/apps/login/src/components/theme-wrapper.tsx similarity index 100% rename from login/apps/login/src/components/theme-wrapper.tsx rename to apps/login/src/components/theme-wrapper.tsx diff --git a/login/apps/login/src/components/theme.tsx b/apps/login/src/components/theme.tsx similarity index 100% rename from login/apps/login/src/components/theme.tsx rename to apps/login/src/components/theme.tsx diff --git a/login/apps/login/src/components/totp-register.tsx b/apps/login/src/components/totp-register.tsx similarity index 96% rename from login/apps/login/src/components/totp-register.tsx rename to apps/login/src/components/totp-register.tsx index f15c0d034c..ec9f630f91 100644 --- a/login/apps/login/src/components/totp-register.tsx +++ b/apps/login/src/components/totp-register.tsx @@ -7,6 +7,7 @@ import Link from "next/link"; import { useRouter } from "next/navigation"; import { QRCodeSVG } from "qrcode.react"; import { useState } from "react"; +import { useTranslations } from "next-intl"; import { useForm } from "react-hook-form"; import { Alert } from "./alert"; import { Button, ButtonVariants } from "./button"; @@ -31,7 +32,6 @@ type Props = { }; export function TotpRegister({ uri, - secret, loginName, sessionId, requestId, @@ -50,6 +50,8 @@ export function TotpRegister({ }, }); + const t = useTranslations("otp"); + async function continueWithCode(values: Inputs) { setLoading(true); return verifyTOTP(values.code, loginName, organization) @@ -123,7 +125,7 @@ export function TotpRegister({
diff --git a/login/apps/login/src/components/translated.tsx b/apps/login/src/components/translated.tsx similarity index 97% rename from login/apps/login/src/components/translated.tsx rename to apps/login/src/components/translated.tsx index 807ea18e8f..2a9f5c1329 100644 --- a/login/apps/login/src/components/translated.tsx +++ b/apps/login/src/components/translated.tsx @@ -2,7 +2,6 @@ import { useTranslations } from "next-intl"; export function Translated({ i18nKey, - children, namespace, data, ...props diff --git a/login/apps/login/src/components/user-avatar.tsx b/apps/login/src/components/user-avatar.tsx similarity index 100% rename from login/apps/login/src/components/user-avatar.tsx rename to apps/login/src/components/user-avatar.tsx diff --git a/login/apps/login/src/components/username-form.tsx b/apps/login/src/components/username-form.tsx similarity index 96% rename from login/apps/login/src/components/username-form.tsx rename to apps/login/src/components/username-form.tsx index dbb82a35c9..38eeffff98 100644 --- a/login/apps/login/src/components/username-form.tsx +++ b/apps/login/src/components/username-form.tsx @@ -11,6 +11,7 @@ import { Button, ButtonVariants } from "./button"; import { TextInput } from "./input"; import { Spinner } from "./spinner"; import { Translated } from "./translated"; +import { useTranslations } from "next-intl"; type Inputs = { loginName: string; @@ -42,6 +43,8 @@ export function UsernameForm({ }, }); + const t = useTranslations("loginname"); + const router = useRouter(); const [loading, setLoading] = useState(false); @@ -101,7 +104,7 @@ export function UsernameForm({ (""); const [loading, setLoading] = useState(false); @@ -135,7 +138,7 @@ export function VerifyForm({ diff --git a/login/apps/login/src/components/zitadel-logo-dark.tsx b/apps/login/src/components/zitadel-logo-dark.tsx similarity index 99% rename from login/apps/login/src/components/zitadel-logo-dark.tsx rename to apps/login/src/components/zitadel-logo-dark.tsx index 0df6ae2004..c87d190839 100644 --- a/login/apps/login/src/components/zitadel-logo-dark.tsx +++ b/apps/login/src/components/zitadel-logo-dark.tsx @@ -1,6 +1,6 @@ import { FC } from "react"; -export const ZitadelLogoDark: FC = (props) => ( +export const ZitadelLogoDark: FC = () => ( ( +export const ZitadelLogoLight: FC = () => ( ({ */ export async function getAllSessionCookieIds( cleanup: boolean = false, -): Promise { +): Promise { const cookiesList = await cookies(); const stringifiedCookie = cookiesList.get("sessions"); diff --git a/login/apps/login/src/lib/demos.ts b/apps/login/src/lib/demos.ts similarity index 100% rename from login/apps/login/src/lib/demos.ts rename to apps/login/src/lib/demos.ts diff --git a/login/apps/login/src/lib/fingerprint.ts b/apps/login/src/lib/fingerprint.ts similarity index 100% rename from login/apps/login/src/lib/fingerprint.ts rename to apps/login/src/lib/fingerprint.ts diff --git a/login/apps/login/src/lib/i18n.ts b/apps/login/src/lib/i18n.ts similarity index 100% rename from login/apps/login/src/lib/i18n.ts rename to apps/login/src/lib/i18n.ts diff --git a/login/apps/login/src/lib/idp.ts b/apps/login/src/lib/idp.ts similarity index 100% rename from login/apps/login/src/lib/idp.ts rename to apps/login/src/lib/idp.ts diff --git a/login/apps/login/src/lib/oidc.ts b/apps/login/src/lib/oidc.ts similarity index 100% rename from login/apps/login/src/lib/oidc.ts rename to apps/login/src/lib/oidc.ts diff --git a/login/apps/login/src/lib/saml.ts b/apps/login/src/lib/saml.ts similarity index 100% rename from login/apps/login/src/lib/saml.ts rename to apps/login/src/lib/saml.ts diff --git a/login/apps/login/src/lib/self.ts b/apps/login/src/lib/self.ts similarity index 100% rename from login/apps/login/src/lib/self.ts rename to apps/login/src/lib/self.ts diff --git a/login/apps/login/src/lib/server/cookie.ts b/apps/login/src/lib/server/cookie.ts similarity index 85% rename from login/apps/login/src/lib/server/cookie.ts rename to apps/login/src/lib/server/cookie.ts index 841fc06b3a..7f87f49731 100644 --- a/login/apps/login/src/lib/server/cookie.ts +++ b/apps/login/src/lib/server/cookie.ts @@ -55,10 +55,21 @@ export async function createSessionAndUpdateCookie(command: { const _headers = await headers(); const { serviceUrl } = getServiceUrlFromHeaders(_headers); + let sessionLifetime = command.lifetime; + + if (!sessionLifetime) { + console.warn("No session lifetime provided, using default of 24 hours."); + + sessionLifetime = { + seconds: BigInt(24 * 60 * 60), // 24 hours + nanos: 0, + } as Duration; // for usecases where the lifetime is not specified (user discovery) + } + const createdSession = await createSessionFromChecks({ serviceUrl, checks: command.checks, - lifetime: command.lifetime, + lifetime: sessionLifetime, }); if (createdSession) { @@ -126,11 +137,24 @@ export async function createSessionForIdpAndUpdateCookie({ const _headers = await headers(); const { serviceUrl } = getServiceUrlFromHeaders(_headers); + let sessionLifetime = lifetime; + + if (!sessionLifetime) { + console.warn( + "No IDP session lifetime provided, using default of 24 hours.", + ); + + sessionLifetime = { + seconds: BigInt(24 * 60 * 60), // 24 hours + nanos: 0, + } as Duration; + } + const createdSession = await createSessionForUserIdAndIdpIntent({ serviceUrl, userId, idpIntent, - lifetime, + lifetime: sessionLifetime, }).catch((error: ErrorDetail | CredentialsCheckError) => { console.error("Could not set session", error); if ("failedAttempts" in error && error.failedAttempts) { @@ -190,41 +214,41 @@ export type SessionWithChallenges = Session & { challenges: Challenges | undefined; }; -export async function setSessionAndUpdateCookie( - recentCookie: CustomCookieData, - checks?: Checks, - challenges?: RequestChallenges, - requestId?: string, - lifetime?: Duration, -) { +export async function setSessionAndUpdateCookie(command: { + recentCookie: CustomCookieData; + checks?: Checks; + challenges?: RequestChallenges; + requestId?: string; + lifetime: Duration; +}) { const _headers = await headers(); const { serviceUrl } = getServiceUrlFromHeaders(_headers); return setSession({ serviceUrl, - sessionId: recentCookie.id, - sessionToken: recentCookie.token, - challenges, - checks, - lifetime, + sessionId: command.recentCookie.id, + sessionToken: command.recentCookie.token, + challenges: command.challenges, + checks: command.checks, + lifetime: command.lifetime, }) .then((updatedSession) => { if (updatedSession) { const sessionCookie: CustomCookieData = { - id: recentCookie.id, + id: command.recentCookie.id, token: updatedSession.sessionToken, - creationTs: recentCookie.creationTs, - expirationTs: recentCookie.expirationTs, + creationTs: command.recentCookie.creationTs, + expirationTs: command.recentCookie.expirationTs, // just overwrite the changeDate with the new one changeTs: updatedSession.details?.changeDate ? `${timestampMs(updatedSession.details.changeDate)}` : "", - loginName: recentCookie.loginName, - organization: recentCookie.organization, + loginName: command.recentCookie.loginName, + organization: command.recentCookie.organization, }; - if (requestId) { - sessionCookie.requestId = requestId; + if (command.requestId) { + sessionCookie.requestId = command.requestId; } return getSession({ diff --git a/login/apps/login/src/lib/server/device.ts b/apps/login/src/lib/server/device.ts similarity index 100% rename from login/apps/login/src/lib/server/device.ts rename to apps/login/src/lib/server/device.ts diff --git a/login/apps/login/src/lib/server/idp.ts b/apps/login/src/lib/server/idp.ts similarity index 100% rename from login/apps/login/src/lib/server/idp.ts rename to apps/login/src/lib/server/idp.ts diff --git a/login/apps/login/src/lib/server/loginname.ts b/apps/login/src/lib/server/loginname.ts similarity index 100% rename from login/apps/login/src/lib/server/loginname.ts rename to apps/login/src/lib/server/loginname.ts diff --git a/login/apps/login/src/lib/server/oidc.ts b/apps/login/src/lib/server/oidc.ts similarity index 100% rename from login/apps/login/src/lib/server/oidc.ts rename to apps/login/src/lib/server/oidc.ts diff --git a/login/apps/login/src/lib/server/passkeys.ts b/apps/login/src/lib/server/passkeys.ts similarity index 95% rename from login/apps/login/src/lib/server/passkeys.ts rename to apps/login/src/lib/server/passkeys.ts index 60aa2c92b4..ca603471ab 100644 --- a/login/apps/login/src/lib/server/passkeys.ts +++ b/apps/login/src/lib/server/passkeys.ts @@ -211,19 +211,27 @@ export async function sendPasskey(command: SendPasskeyCommand) { organization, }); - const lifetime = checks?.webAuthN + let lifetime = checks?.webAuthN ? loginSettings?.multiFactorCheckLifetime // TODO different lifetime for webauthn u2f/passkey : checks?.otpEmail || checks?.otpSms ? loginSettings?.secondFactorCheckLifetime : undefined; - const session = await setSessionAndUpdateCookie( - recentSession, + if (!lifetime) { + console.warn("No passkey lifetime provided, defaulting to 24 hours"); + + lifetime = { + seconds: BigInt(60 * 60 * 24), // default to 24 hours + nanos: 0, + } as Duration; + } + + const session = await setSessionAndUpdateCookie({ + recentCookie: recentSession, checks, - undefined, requestId, lifetime, - ); + }); if (!session || !session?.factors?.user?.id) { return { error: "Could not update session" }; diff --git a/login/apps/login/src/lib/server/password.ts b/apps/login/src/lib/server/password.ts similarity index 94% rename from login/apps/login/src/lib/server/password.ts rename to apps/login/src/lib/server/password.ts index 5c6fb03aa5..013255d06f 100644 --- a/login/apps/login/src/lib/server/password.ts +++ b/apps/login/src/lib/server/password.ts @@ -16,7 +16,7 @@ import { setPassword, setUserPassword, } from "@/lib/zitadel"; -import { ConnectError, create } from "@zitadel/client"; +import { ConnectError, create, Duration } from "@zitadel/client"; import { createUserServiceClient } from "@zitadel/client/v2"; import { Checks, @@ -152,14 +152,32 @@ export async function sendPassword(command: UpdateSessionCommand) { // this is a fake error message to hide that the user does not even exist return { error: "Could not verify password" }; } else { + loginSettings = await getLoginSettings({ + serviceUrl, + organization: sessionCookie.organization, + }); + + if (!loginSettings) { + return { error: "Could not load login settings" }; + } + + let lifetime = loginSettings.passwordCheckLifetime; + + if (!lifetime) { + console.warn("No password lifetime provided, defaulting to 24 hours"); + lifetime = { + seconds: BigInt(60 * 60 * 24), // default to 24 hours + nanos: 0, + } as Duration; + } + try { - session = await setSessionAndUpdateCookie( - sessionCookie, - command.checks, - undefined, - command.requestId, - loginSettings?.passwordCheckLifetime, - ); + session = await setSessionAndUpdateCookie({ + recentCookie: sessionCookie, + checks: command.checks, + requestId: command.requestId, + lifetime, + }); } catch (error: any) { if ("failedAttempts" in error && error.failedAttempts) { const lockoutSettings = await getLockoutSettings({ diff --git a/login/apps/login/src/lib/server/register.ts b/apps/login/src/lib/server/register.ts similarity index 100% rename from login/apps/login/src/lib/server/register.ts rename to apps/login/src/lib/server/register.ts diff --git a/login/apps/login/src/lib/server/session.ts b/apps/login/src/lib/server/session.ts similarity index 94% rename from login/apps/login/src/lib/server/session.ts rename to apps/login/src/lib/server/session.ts index d04d1d25b4..957c89ad81 100644 --- a/login/apps/login/src/lib/server/session.ts +++ b/apps/login/src/lib/server/session.ts @@ -154,19 +154,27 @@ export async function updateSession(options: UpdateSessionCommand) { organization, }); - const lifetime = checks?.webAuthN + let lifetime = checks?.webAuthN ? loginSettings?.multiFactorCheckLifetime // TODO different lifetime for webauthn u2f/passkey : checks?.otpEmail || checks?.otpSms ? loginSettings?.secondFactorCheckLifetime : undefined; - const session = await setSessionAndUpdateCookie( - recentSession, + if (!lifetime) { + console.warn("No lifetime provided for session, defaulting to 24 hours"); + lifetime = { + seconds: BigInt(60 * 60 * 24), // default to 24 hours + nanos: 0, + } as Duration; + } + + const session = await setSessionAndUpdateCookie({ + recentCookie: recentSession, checks, challenges, requestId, lifetime, - ); + }); if (!session) { return { error: "Could not update session" }; diff --git a/login/apps/login/src/lib/server/u2f.ts b/apps/login/src/lib/server/u2f.ts similarity index 100% rename from login/apps/login/src/lib/server/u2f.ts rename to apps/login/src/lib/server/u2f.ts diff --git a/login/apps/login/src/lib/server/verify.ts b/apps/login/src/lib/server/verify.ts similarity index 100% rename from login/apps/login/src/lib/server/verify.ts rename to apps/login/src/lib/server/verify.ts diff --git a/login/apps/login/src/lib/service-url.ts b/apps/login/src/lib/service-url.ts similarity index 100% rename from login/apps/login/src/lib/service-url.ts rename to apps/login/src/lib/service-url.ts diff --git a/login/apps/login/src/lib/service.ts b/apps/login/src/lib/service.ts similarity index 100% rename from login/apps/login/src/lib/service.ts rename to apps/login/src/lib/service.ts diff --git a/login/apps/login/src/lib/session.ts b/apps/login/src/lib/session.ts similarity index 100% rename from login/apps/login/src/lib/session.ts rename to apps/login/src/lib/session.ts diff --git a/login/apps/login/src/lib/verify-helper.ts b/apps/login/src/lib/verify-helper.ts similarity index 100% rename from login/apps/login/src/lib/verify-helper.ts rename to apps/login/src/lib/verify-helper.ts diff --git a/login/apps/login/src/lib/zitadel.ts b/apps/login/src/lib/zitadel.ts similarity index 99% rename from login/apps/login/src/lib/zitadel.ts rename to apps/login/src/lib/zitadel.ts index bad773092c..5e4583f8af 100644 --- a/login/apps/login/src/lib/zitadel.ts +++ b/apps/login/src/lib/zitadel.ts @@ -298,7 +298,7 @@ export async function createSessionFromChecks({ }: { serviceUrl: string; checks: Checks; - lifetime?: Duration; + lifetime: Duration; }) { const sessionService: Client = await createServiceForHost(SessionService, serviceUrl); @@ -320,7 +320,7 @@ export async function createSessionForUserIdAndIdpIntent({ idpIntentId?: string | undefined; idpIntentToken?: string | undefined; }; - lifetime?: Duration; + lifetime: Duration; }) { const sessionService: Client = await createServiceForHost(SessionService, serviceUrl); @@ -355,7 +355,7 @@ export async function setSession({ sessionToken: string; challenges: RequestChallenges | undefined; checks?: Checks; - lifetime?: Duration; + lifetime: Duration; }) { const sessionService: Client = await createServiceForHost(SessionService, serviceUrl); diff --git a/login/apps/login/src/middleware.ts b/apps/login/src/middleware.ts similarity index 100% rename from login/apps/login/src/middleware.ts rename to apps/login/src/middleware.ts diff --git a/login/apps/login/src/styles/globals.scss b/apps/login/src/styles/globals.scss similarity index 100% rename from login/apps/login/src/styles/globals.scss rename to apps/login/src/styles/globals.scss diff --git a/login/apps/login/src/styles/vars.scss b/apps/login/src/styles/vars.scss similarity index 100% rename from login/apps/login/src/styles/vars.scss rename to apps/login/src/styles/vars.scss diff --git a/login/apps/login/tailwind.config.mjs b/apps/login/tailwind.config.mjs similarity index 100% rename from login/apps/login/tailwind.config.mjs rename to apps/login/tailwind.config.mjs diff --git a/login/apps/login/test-setup.ts b/apps/login/test-setup.ts similarity index 100% rename from login/apps/login/test-setup.ts rename to apps/login/test-setup.ts diff --git a/login/apps/login/tsconfig.json b/apps/login/tsconfig.json similarity index 90% rename from login/apps/login/tsconfig.json rename to apps/login/tsconfig.json index e59724b283..4cec65b3dc 100644 --- a/login/apps/login/tsconfig.json +++ b/apps/login/tsconfig.json @@ -23,5 +23,5 @@ } }, "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], - "exclude": ["node_modules"] + "exclude": ["node_modules", "integration", "acceptance"] } diff --git a/login/apps/login/turbo.json b/apps/login/turbo.json similarity index 65% rename from login/apps/login/turbo.json rename to apps/login/turbo.json index f05cd41d01..b7b4e5fd27 100644 --- a/login/apps/login/turbo.json +++ b/apps/login/turbo.json @@ -3,20 +3,20 @@ "tasks": { "build": { "outputs": ["dist/**", ".next/**", "!.next/cache/**"], - "dependsOn": ["@zitadel/client#build", "@zitadel/proto#generate"] + "dependsOn": ["@zitadel/client#build"] }, "build:login:standalone": { - "outputs": ["dist/**", ".next/**", "!.next/cache/**"] + "outputs": ["dist/**", ".next/**", "!.next/cache/**"], + "dependsOn": ["@zitadel/client#build"] + }, + "dev": { + "dependsOn": ["@zitadel/client#build"] }, "test": { "dependsOn": ["@zitadel/client#build"] }, "test:unit": { "dependsOn": ["@zitadel/client#build"] - }, - "test:unit:standalone": {}, - "test:watch": { - "dependsOn": ["@zitadel/client#build"] } } } diff --git a/login/apps/login/vitest.config.mts b/apps/login/vitest.config.mts similarity index 100% rename from login/apps/login/vitest.config.mts rename to apps/login/vitest.config.mts diff --git a/build/Dockerfile.gitignore b/build/Dockerfile.gitignore deleted file mode 100644 index a2cc8ed480..0000000000 --- a/build/Dockerfile.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -* -!build/entrypoint.sh -!zitadel diff --git a/build/login/.dockerignore b/build/login/.dockerignore new file mode 100644 index 0000000000..2070cf5982 --- /dev/null +++ b/build/login/.dockerignore @@ -0,0 +1,37 @@ +* + +!apps/login/constants +!apps/login/scripts +!apps/login/src +!apps/login/public +!apps/login/locales +!apps/login/next.config.mjs +!apps/login/next-env-vars.d.ts +!apps/login/next-env.d.ts +!apps/login/tailwind.config.js +!apps/login/tsconfig.json +!apps/login/package.json +!apps/login/turbo.json + +!package.json +!pnpm-lock.yaml +!pnpm-workspace.yaml +!turbo.json + +!packages/zitadel-proto/package.json +!packages/zitadel-proto/buf.gen.yaml +!packages/zitadel-proto/turbo.json + +!packages/zitadel-client/package.json +!packages/zitadel-client/src +!packages/zitadel-client/tsconfig.json +!packages/zitadel-client/tsup.config.ts +!packages/zitadel-client/turbo.json + +!proto + +*.md +*.png +node_modules +*.test.ts +*.test.tsx diff --git a/build/login/Dockerfile b/build/login/Dockerfile new file mode 100644 index 0000000000..ad9163285f --- /dev/null +++ b/build/login/Dockerfile @@ -0,0 +1,45 @@ +FROM node:20-alpine AS base + +FROM base AS build +ENV PNPM_HOME="/pnpm" +ENV PATH="$PNPM_HOME:$PATH" +RUN corepack enable && COREPACK_ENABLE_DOWNLOAD_PROMPT=0 corepack prepare pnpm@9.1.2 --activate && \ + apk update && apk add --no-cache && \ + rm -rf /var/cache/apk/* +WORKDIR /app +COPY pnpm-lock.yaml pnpm-workspace.yaml ./ +RUN --mount=type=cache,id=pnpm,target=/root/.local/share/pnpm/store pnpm fetch --frozen-lockfile \ + --filter @zitadel/login \ + --filter @zitadel/client \ + --filter @zitadel/proto +COPY package.json ./ +COPY apps/login/package.json ./apps/login/package.json +COPY packages/zitadel-proto/package.json ./packages/zitadel-proto/package.json +COPY packages/zitadel-client/package.json ./packages/zitadel-client/package.json +RUN --mount=type=cache,id=pnpm,target=/root/.local/share/pnpm/store pnpm install --frozen-lockfile \ + --filter @zitadel/login \ + --filter @zitadel/client \ + --filter @zitadel/proto +COPY . . +RUN pnpm turbo build:login:standalone + +FROM scratch AS build-out +COPY --from=build /app/apps/login/.next/standalone / +COPY --from=build /app/apps/login/.next/static /.next/static +COPY --from=build /app/apps/login/public /public + +FROM base AS login-standalone +WORKDIR /runtime +RUN addgroup --system --gid 1001 nodejs && \ + adduser --system --uid 1001 nextjs +# If /.env-file/.env is mounted into the container, its variables are made available to the server before it starts up. +RUN mkdir -p /.env-file && touch /.env-file/.env && chown -R nextjs:nodejs /.env-file +COPY apps/login/scripts ./ +COPY --chown=nextjs:nodejs --from=build-out . . +USER nextjs +ENV HOSTNAME="0.0.0.0" +ENV PORT=3000 +# TODO: Check healthy, not ready +HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \ + CMD ["/bin/sh", "-c", "node ./healthcheck.js http://localhost:${PORT}/ui/v2/login/healthy"] +ENTRYPOINT ["./entrypoint.sh"] diff --git a/build/workflow.Dockerfile b/build/workflow.Dockerfile deleted file mode 100644 index 573e13891a..0000000000 --- a/build/workflow.Dockerfile +++ /dev/null @@ -1,296 +0,0 @@ -# ############################################################################## -# core -# ############################################################################## - -# ####################################### -# download dependencies -# ####################################### -FROM golang:buster AS core-deps - -WORKDIR /go/src/github.com/zitadel/zitadel - -COPY go.mod . -COPY go.sum . - -RUN go mod download - -# ####################################### -# compile custom protoc plugins -# ####################################### -FROM golang:buster AS core-api-generator - -WORKDIR /go/src/github.com/zitadel/zitadel - -COPY go.mod . -COPY go.sum . -COPY internal/protoc internal/protoc -COPY pkg/grpc/protoc/v2 pkg/grpc/protoc/v2 - -RUN go install internal/protoc/protoc-gen-authoption/main.go \ - && mv $(go env GOPATH)/bin/main $(go env GOPATH)/bin/protoc-gen-authoption \ - && go install internal/protoc/protoc-gen-zitadel/main.go \ - && mv $(go env GOPATH)/bin/main $(go env GOPATH)/bin/protoc-gen-zitadel - -# ####################################### -# build backend stub -# ####################################### -FROM golang:buster AS core-api - -WORKDIR /go/src/github.com/zitadel/zitadel - -COPY go.mod . -COPY go.sum . -COPY proto proto -COPY buf.*.yaml . -COPY Makefile Makefile -COPY --from=core-api-generator /go/bin /usr/local/bin - -RUN make grpc - -# ####################################### -# generate code for login ui -# ####################################### -FROM golang:buster AS core-login - -WORKDIR /go/src/github.com/zitadel/zitadel - -COPY Makefile Makefile -COPY internal/api/ui/login/static internal/api/ui/login/static -COPY internal/api/ui/login/statik internal/api/ui/login/statik -COPY internal/notification/static internal/notification/static -COPY internal/notification/statik internal/notification/statik -COPY internal/static internal/static -COPY internal/statik internal/statik - -RUN make static - -# ####################################### -# generate code for assets -# ####################################### -FROM golang:buster AS core-assets -WORKDIR /go/src/github.com/zitadel/zitadel - -COPY go.mod . -COPY go.sum . -COPY Makefile Makefile -COPY internal/api/assets/generator internal/api/assets/generator -COPY internal/config internal/config -COPY internal/errors internal/errors -COPY --from=core-api /go/src/github.com/zitadel/zitadel/openapi/v2 openapi/v2 - -RUN make assets - -# ####################################### -# Gather all core files -# ####################################### -FROM core-deps AS core-gathered - -COPY cmd cmd -COPY internal internal -COPY pkg pkg -COPY proto proto -COPY openapi openapi -COPY statik statik -COPY main.go main.go -COPY --from=core-api /go/src/github.com/zitadel/zitadel . -COPY --from=core-login /go/src/github.com/zitadel/zitadel . -COPY --from=core-assets /go/src/github.com/zitadel/zitadel/internal ./internal - -# ############################################################################## -# build console -# ############################################################################## - -# ####################################### -# download console dependencies -# ####################################### -FROM node:20-buster AS console-deps - -WORKDIR /zitadel/console - -COPY pnpm-lock.yaml . -COPY pnpm-workspace.yaml . -COPY console/package.json console/ - -RUN corepack enable pnpm && pnpm install --frozen-lockfile --filter=console - -# ####################################### -# generate console client -# ####################################### -FROM node:20-buster AS console-client - -WORKDIR /zitadel/console - -# install buf -COPY --from=bufbuild/buf:latest /usr/local/bin/* /usr/local/bin/ -ENV PATH="/usr/local/bin:${PATH}" - -COPY console/package.json . -COPY console/buf.*.yaml . -COPY proto ../proto - -RUN pnpm generate - -# ####################################### -# Gather all console files -# ####################################### -FROM console-deps as console-gathered - -COPY --from=console-client /zitadel/console/src/app/proto/generated src/app/proto/generated - -COPY console/src src -COPY console/angular.json . -COPY console/ngsw-config.json . -COPY console/tsconfig* . - -# ####################################### -# Build console -# ####################################### -FROM console-gathered AS console -RUN pnpm build - -# ############################################################################## -# build the executable -# ############################################################################## - -# ####################################### -# build executable -# ####################################### -FROM core-gathered AS compile - -ARG GOOS -ARG GOARCH - -COPY --from=console /zitadel/console/dist/console internal/api/ui/console/static/ - -RUN go build -o zitadel -ldflags="-s -w -race" \ - && chmod +x zitadel - -ENTRYPOINT [ "./zitadel" ] - -# ####################################### -# copy executable -# ####################################### -FROM scratch AS copy-executable -ARG GOOS -ARG GOARCH - -COPY --from=compile /go/src/github.com/zitadel/zitadel/zitadel /.artifacts/zitadel - -# ############################################################################## -# tests -# ############################################################################## -FROM ubuntu/postgres:latest AS test-core-base - -ARG DEBIAN_FRONTEND=noninteractive - -RUN apt-get update && \ - apt-get install -y --no-install-recommends \ - gcc \ - make \ - ca-certificates \ - gcc \ - && \ - update-ca-certificates; \ - rm -rf /var/lib/apt/lists/* - -# install go -COPY --from=golang:latest /usr/local/go/ /usr/local/go/ -ENV PATH="/go/bin:/usr/local/go/bin:${PATH}" - -WORKDIR /go/src/github.com/zitadel/zitadel - -# default vars -ENV POSTGRES_USER=zitadel -ENV POSTGRES_DB=zitadel -ENV POSTGRES_PASSWORD=postgres -ENV POSTGRES_HOST_AUTH_METHOD=trust - -ENV PGUSER=zitadel -ENV PGDATABASE=zitadel -ENV PGPASSWORD=postgres - -ENV CGO_ENABLED=1 - -# copy zitadel files -COPY --from=core-deps /go/pkg/mod /root/go/pkg/mod -COPY --from=core-gathered /go/src/github.com/zitadel/zitadel . - -# ####################################### -# unit test core -# ####################################### -FROM test-core-base AS test-core-unit -RUN go test -race -v -coverprofile=profile.cov ./... - -# ####################################### -# coverage output -# ####################################### -FROM scratch AS coverage-core-unit -COPY --from=test-core-unit /go/src/github.com/zitadel/zitadel/profile.cov /coverage/ - -# ####################################### -# integration test core -# ####################################### -FROM test-core-base AS test-core-integration -ENV ZITADEL_MASTERKEY=MasterkeyNeedsToHave32Characters - -COPY build/core-integration-test.sh /usr/local/bin/run-tests.sh -RUN chmod +x /usr/local/bin/run-tests.sh - -RUN run-tests.sh - -# ####################################### -# coverage output -# ####################################### -FROM scratch AS coverage-core-integration -COPY --from=test-core-integration /go/src/github.com/zitadel/zitadel/profile.cov /coverage/ - -# ############################################################################## -# linting -# ############################################################################## - -# ####################################### -# api -# ####################################### -FROM bufbuild/buf:latest AS lint-api - -COPY proto proto -COPY buf.*.yaml . - -RUN buf lint - -# ####################################### -# console -# ####################################### -FROM console-gathered AS lint-console - -COPY console/.eslintrc.js . -COPY console/.prettier* . -RUN pnpm lint - -# ####################################### -# core -# ####################################### -FROM golangci/golangci-lint:latest AS lint-core -ARG LINT_EXIT_CODE=1 - -WORKDIR /go/src/github.com/zitadel/zitadel - -COPY .golangci.yaml . -COPY .git/ .git/ -COPY --from=core-deps /go/pkg/mod /go/pkg/mod -COPY --from=core-gathered /go/src/github.com/zitadel/zitadel . - -RUN git fetch https://github.com/zitadel/zitadel main:main - -RUN golangci-lint run \ - --timeout 10m \ - --config ./.golangci.yaml \ - --out-format=github-actions:report,colored-line-number \ - --issues-exit-code=${LINT_EXIT_CODE} \ - --concurrency=$(getconf _NPROCESSORS_ONLN) - -# ####################################### -# report output -# ####################################### -FROM scratch AS lint-core-report -COPY --from=lint-core /go/src/github.com/zitadel/zitadel/report . \ No newline at end of file diff --git a/build/zitadel/.dockerignore b/build/zitadel/.dockerignore new file mode 100644 index 0000000000..83c401b28a --- /dev/null +++ b/build/zitadel/.dockerignore @@ -0,0 +1,3 @@ +* +!build/zitadel/entrypoint.sh +!zitadel diff --git a/build/Dockerfile b/build/zitadel/Dockerfile similarity index 93% rename from build/Dockerfile rename to build/zitadel/Dockerfile index 769f04023e..4abc1f388c 100644 --- a/build/Dockerfile +++ b/build/zitadel/Dockerfile @@ -4,7 +4,7 @@ ARG TARGETPLATFORM RUN apt-get update && apt-get install ca-certificates -y -COPY build/entrypoint.sh /app/entrypoint.sh +COPY build/zitadel/entrypoint.sh /app/entrypoint.sh COPY zitadel /app/zitadel RUN useradd -s "" --home / zitadel && \ diff --git a/build/entrypoint.sh b/build/zitadel/entrypoint.sh similarity index 100% rename from build/entrypoint.sh rename to build/zitadel/entrypoint.sh diff --git a/build/zitadel/generate-grpc.sh b/build/zitadel/generate-grpc.sh deleted file mode 100755 index e69de29bb2..0000000000 diff --git a/console/package.json b/console/package.json index b4f2bdae86..c95cc5b674 100644 --- a/console/package.json +++ b/console/package.json @@ -6,7 +6,9 @@ "dev": "node prebuild.development.js && ng serve", "start": "node prebuild.development.js && ng serve", "build": "ng build --configuration production --base-href=/ui/console/", - "lint": "ng lint && prettier --check src", + "lint": "pnpm run '/^lint:check:.*$/'", + "lint:check:ng": "ng lint", + "lint:check:prettier": "prettier --check src", "lint:fix": "prettier --write src", "generate": "pnpm exec buf generate ../proto --include-imports --include-wkt" }, diff --git a/console/turbo.json b/console/turbo.json index c6c5266cc9..f92aab1119 100644 --- a/console/turbo.json +++ b/console/turbo.json @@ -19,10 +19,6 @@ "dependsOn": ["generate", "@zitadel/client#build"], "cache": false, "persistent": true - }, - "lint": { - "dependsOn": ["generate"], - "outputs": [] } } } diff --git a/docker-bake.hcl b/docker-bake.hcl index d75373dee1..2c36c66141 100644 --- a/docker-bake.hcl +++ b/docker-bake.hcl @@ -1,5 +1,13 @@ -target "typescript-proto-client" { - contexts = { - proto-files = "target:proto-files" - } +# login-standalone should be extended by the login-standalone target in apps/login/docker-bake.hcl +target "login-standalone" { + dockerfile = "build/login/Dockerfile" } + +target "login-standalone-out" { + inherits = ["login-standalone"] + target = "build-out" + output = [ + "type=local,dest=.artifacts/login" + ] +} + \ No newline at end of file diff --git a/dockerfiles/proto-files.Dockerfile b/dockerfiles/proto-files.Dockerfile deleted file mode 100644 index 0af3346096..0000000000 --- a/dockerfiles/proto-files.Dockerfile +++ /dev/null @@ -1,8 +0,0 @@ -FROM bufbuild/buf:1.54.0 AS proto-files -RUN buf export https://github.com/envoyproxy/protoc-gen-validate.git --path validate --output /proto-files && \ - buf export https://github.com/grpc-ecosystem/grpc-gateway.git --path protoc-gen-openapiv2 --output /proto-files && \ - buf export https://github.com/googleapis/googleapis.git --path google/api/annotations.proto --path google/api/http.proto --path google/api/field_behavior.proto --output /proto-files - -FROM scratch -COPY --from=proto-files /proto-files / -COPY ./proto / diff --git a/dockerfiles/proto-files.Dockerfile.dockerignore b/dockerfiles/proto-files.Dockerfile.dockerignore deleted file mode 100644 index e26cd3c2d6..0000000000 --- a/dockerfiles/proto-files.Dockerfile.dockerignore +++ /dev/null @@ -1,2 +0,0 @@ -* -!proto diff --git a/dockerfiles/typescript-proto-client.Dockerfile b/dockerfiles/typescript-proto-client.Dockerfile deleted file mode 100644 index 4a9505d19d..0000000000 --- a/dockerfiles/typescript-proto-client.Dockerfile +++ /dev/null @@ -1,8 +0,0 @@ -FROM login-pnpm AS typescript-proto-client -COPY ./login/packages/zitadel-proto/package.json ./packages/zitadel-proto/ -RUN --mount=type=cache,id=pnpm,target=/pnpm/store \ - pnpm install --frozen-lockfile --workspace-root --filter zitadel-proto -COPY --from=proto-files /buf.yaml /buf.lock /proto-files/ -COPY --from=proto-files /zitadel /proto-files/zitadel -COPY ./login/packages/zitadel-proto/buf.gen.yaml ./packages/zitadel-proto/ -RUN cd packages/zitadel-proto && pnpm exec buf generate /proto-files diff --git a/dockerfiles/typescript-proto-client.Dockerfile.dockerignore b/dockerfiles/typescript-proto-client.Dockerfile.dockerignore deleted file mode 100644 index 3915a26e4e..0000000000 --- a/dockerfiles/typescript-proto-client.Dockerfile.dockerignore +++ /dev/null @@ -1,11 +0,0 @@ -* -!/login/packages/zitadel-proto/ -login/packages/zitadel-proto/google -login/packages/zitadel-proto/zitadel -login/packages/zitadel-proto/protoc-gen-openapiv2 -login/packages/zitadel-proto/validate - -**/*.md -**/*.png -**/node_modules -**/.turbo diff --git a/docs/docs/guides/migrate/sources/keycloak-guide.md b/docs/docs/guides/migrate/sources/keycloak-guide.md new file mode 100644 index 0000000000..597fbf8ae7 --- /dev/null +++ b/docs/docs/guides/migrate/sources/keycloak-guide.md @@ -0,0 +1,253 @@ +--- + +title: Migrating Users from Keycloak to ZITADEL (Including Password Hashes) +sidebar_label: Keycloak Migration Guide +--- + +## 1. Introduction + +This guide will walk you through the steps to migrate users from **Keycloak** to **ZITADEL**, including password hashes, using the `zitadel-tools` CLI and the user import APIs. + +**What you'll learn with this guide** + +* How to export users from Keycloak +* Use of the ZITADEL migration tooling +* Performing the user import via ZITADEL's API +* Troubleshooting and validating the migration + +--- + +## 2. Prerequisites + +### 2.1. Install Go + +The migration tool is written in Go. Download and install the latest version of Go from the [official Go website](https://go.dev/doc/install). + +### 2.2. Create a ZITADEL Instance and Organization + +You'll need a target organization in ZITADEL to import your users. You can create a new organization or use an existing one. + +If you don't have a ZITADEL instance, you can [sign up for free here](https://zitadel.com) to create a new one for you. +See: [Managing Organizations in ZITADEL](https://zitadel.com/docs/guides/manage/console/organizations). + +> **Note:** Copy your Organization ID (Resource ID) since you will use the id in the later steps. + +--- + +## 3. Exporting User Data from Keycloak + +### 3.1. Set up Keycloak Locally (Optional) + +To run a local development Keycloak instance, use the official Docker image: + +```bash +docker run -d -p 8081:8080 \ + -e KEYCLOAK_ADMIN=admin \ + -e KEYCLOAK_ADMIN_PASSWORD=admin \ + quay.io/keycloak/keycloak:22.0.1 start-dev +``` + +### 3.2. Export Users from Keycloak + +Run the following command inside the Keycloak container to export your realm and users: + +```bash +docker exec \ + /opt/keycloak/bin/kc.sh export \ + --dir /tmp/export \ + --realm \ + --users realm_file +``` + +Then copy the exported file to your host machine: + +```bash +docker cp :/tmp/export/-realm.json . +``` + +This creates a file such as: + +``` +-realm.json +``` + +--- + +## 4. Running the ZITADEL Migration Tool + +### 4.1. Install the Migration Tool + +Follow the installation instructions to set up the ZITADEL migration tool from [ZITADEL Tools](https://github.com/zitadel/zitadel-tools?tab=readme-ov-file#installation). + +### 4.2. Generate Import JSON + +Use the migration tool to convert the Keycloak realm export into a ZITADEL-compatible JSON file: + +```bash +zitadel-tools migrate keycloak \ + --org= \ + --realm=-realm.json \ + --output=./importBody.json \ + --timeout=5m0s \ + --multiline +``` + +The tool will generate `importBody.json`, which is ready for importing into ZITADEL. + +--- + +## 5. Importing Users into ZITADEL + +### 5.1. Obtain Access Token (or PAT) for API Access + +To call the ZITADEL Management API, you need to authenticate using a **Service User** with the `IAM_OWNER` Manager permissions. + +There are two recommended authentication methods: + +* **Client Credentials Flow** + [Learn how to authenticate with client credentials.](https://zitadel.com/docs/guides/integrate/service-users/client-credentials) + +* **Personal Access Token (PAT)** + [Learn how to create and use a PAT.](https://zitadel.com/docs/guides/integrate/service-users/personal-access-token) + +**Reference:** [Service Users & API Authentication](https://zitadel.com/docs/guides/integrate/service-users/authenticate-service-users#authentication-methods) + +--- + +### 5.2. Import Data with the ZITADEL API + +Use your **access token** or **PAT** to authenticate, then call the [Management API – Human User Import](https://zitadel.com/docs/apis/resources/admin/admin-service-import-data) endpoint. + +**Import Endpoint:** + +* `POST /admin/v1/import` +* `Authorization: Bearer ` +* **Body:** Generated in step 4.2 + +#### Example cURL request + +```bash +curl --request POST \ + --url https:///admin/v1/import \ + --header 'Content-Type: application/json' \ + --header 'Authorization: Bearer ' \ + --data @importBody.json +``` + +Successful Response: +```bash +{ + "success": { + "orgs": [ + { + "orgId": "318900732864567390", + "humanUserIds": [ + "da72ac13-6994-4498-8b27-3ff9555661b2", + "4e987a01-34db-4393-b61c-1ce753baf69c", + "1041d710-8a89-48f8-85b5-1ab9656190f3", + "7b23b799-4f0f-4964-bc6d-95c534787d2c", + "6f2f1b2f-b292-4431-932b-620124e065ec", + "2c65045a-9de8-4d28-b686-b27bf3a70fc3", + "aca2dd3e-689c-4ab6-b446-0990127b1e0d", + "18a23e01-f0fe-443f-9f1c-2a8135cd22c2", + "c49af4bf-0dbb-4994-b453-b8dd0d5006ea" + ] + } + ] + }, + "errors": [ + { + "type": "org", + "id": "318900732864567390", + "message": "ID=ORG-lapo2m Message=Errors.Org.AlreadyExisting" + } + ] +} +``` + +ℹ️ Note: The above response indicates that the organization already existed, and users were successfully added. This is not an error, and you can consider the import successful as long as the HTTP status code is **200**. + +--- + +## 6. Testing the Migration + +### 6.1. Test User Login + +Use the **ZITADEL login page** or your integrated app to test logging in with one of the imported users. + +Confirm that the migrated password works as expected. + +--- + +### 6.2. Troubleshooting + +**Common issues:** + +* Invalid Keycloak export format +* Malformed JSON +* Missing `orgId` or access token +* Timeout exceeded during import + +The import API returns a detailed response with any errors encountered during the process. + +#### Where to check logs and get help + +You can verify that users were imported successfully by querying the **events API** and looking for the `user.human.added` event type. + +Use the following request: + +```bash +curl --location 'https:///admin/v1/events/_search' \ +--header 'Authorization: Bearer ' \ +--header 'Content-Type: application/json' \ +--data '{ + "asc": true, + "limit": 1000, + "event_types": [ + "user.human.added" + ] +}' +``` + +This will return a list of user creation events including details such as email, username, and hashed password to help you confirm the imported data. + +Successful Response +```bash +{ + "events": [ + { + "type": { + "type": "user.human.added", + "localized": { + "key": "EventTypes.user.human.added", + "localizedMessage": "Person added" + } + }, + "payload": { + "displayName": "test user", + "email": "testuser@gmail.com", + "userName": "testuser" + }, + "aggregate": { + "id": "da72ac13-6994-4498-8b27-3ff9555661b2", + "resourceOwner": "318900732864567390" + }, + "creationDate": "2025-07-22T15:16:06.364302Z" + } + ] +} +``` + +ℹ️ Note: If you see entries with "type": "user.human.added" and correct payload data, the import was successful. + +--- + +## 7. Q&A and Further Resources + +### Real-World Scenarios & Common Questions + +**Q:** What is the maximum number of users that can be imported in a single batch? +**A:** There is no hard limit on the number of users. However, there is a **timeout**. +For **ZITADEL Cloud deployments**, the timeout is **5 minutes**, which typically allows for importing around **5,000 users per batch**. + +--- diff --git a/docs/frameworks.json b/docs/frameworks.json index 88f47d0176..f5fec02b42 100644 --- a/docs/frameworks.json +++ b/docs/frameworks.json @@ -3,21 +3,21 @@ "id": "client-php", "title": "PHP", "imgSrcDark": "/docs/img/tech/php.svg", - "docsLink": "/docs/sdk-examples/java", + "docsLink": "/docs/sdk-examples/client-libraries/php", "client": true }, { "id": "client-java", "title": "Java", "imgSrcDark": "/docs/img/tech/java.svg", - "docsLink": "/docs/sdk-examples/java", + "docsLink": "/docs/sdk-examples/client-libraries/java", "client": true }, { "id": "client-go", "title": "Go", "imgSrcDark": "/docs/img/tech/golang.svg", - "docsLink": "/docs/sdk-examples/java", + "docsLink": "/docs/sdk-examples/go", "client": true, "sdk": true }, @@ -25,14 +25,14 @@ "id": "client-ruby", "title": "Ruby", "imgSrcDark": "/docs/img/tech/ruby.svg", - "docsLink": "/docs/sdk-examples/java", + "docsLink": "/docs/sdk-examples/client-libraries/ruby", "client": true }, { "id": "client-python", "title": "Python", "imgSrcDark": "/docs/img/tech/python.svg", - "docsLink": "/docs/sdk-examples/java", + "docsLink": "/docs/sdk-examples/client-libraries/python", "client": true }, diff --git a/docs/package.json b/docs/package.json index 135b6029eb..8423e5352d 100644 --- a/docs/package.json +++ b/docs/package.json @@ -22,7 +22,8 @@ "generate:configdocs": "cp -r ../cmd/defaults.yaml ./docs/self-hosting/manage/configure/ && cp -r ../cmd/setup/steps.yaml ./docs/self-hosting/manage/configure/", "generate:re-gen": "yarn generate:clean-all && pnpm generate", "generate:clean-all": "docusaurus clean-api-docs all", - "postinstall": "sh ./plugin-download.sh" + "postinstall": "sh ./plugin-download.sh", + "clean": "rm -rf node_modules .artifacts .docusaurus .turbo protoc-gen-connect-openapi docs/apis/resources" }, "dependencies": { "@bufbuild/buf": "^1.14.0", diff --git a/docs/sidebars.js b/docs/sidebars.js index 5d87e1987d..933b0a3bfe 100644 --- a/docs/sidebars.js +++ b/docs/sidebars.js @@ -205,6 +205,7 @@ module.exports = { items: [ "guides/migrate/sources/zitadel", "guides/migrate/sources/auth0", + "guides/migrate/sources/keycloak-guide", "guides/migrate/sources/auth0-guide", "guides/migrate/sources/keycloak", ], diff --git a/e2e/config/localhost/docker-compose.yaml b/e2e/config/localhost/docker-compose.yaml index 41334d92f9..cb055dd27c 100644 --- a/e2e/config/localhost/docker-compose.yaml +++ b/e2e/config/localhost/docker-compose.yaml @@ -5,12 +5,12 @@ services: image: '${ZITADEL_IMAGE:-ghcr.io/zitadel/zitadel:latest}' build: context: ../../.. - dockerfile: ./build/Dockerfile + dockerfile: ./build/zitadel/Dockerfile target: artifact cache_from: - - type=gha + - type=gha cache_to: - - type=gha,mode=max + - type=gha,mode=max command: 'start-from-init --masterkey "MasterkeyNeedsToHave32Characters" --tlsMode disabled --config /zitadel.yaml --steps /zitadel.yaml' depends_on: db: @@ -18,15 +18,15 @@ services: volumes: - ./zitadel.yaml:/zitadel.yaml ports: - - "8080:8080" + - "8080:8080" healthcheck: - test: ["CMD", "/app/zitadel", "ready", "--config", "/zitadel.yaml" ] + test: [ "CMD", "/app/zitadel", "ready", "--config", "/zitadel.yaml" ] interval: '10s' timeout: '5s' retries: 5 start_period: '10s' extra_hosts: - - "host.docker.internal:host-gateway" + - "host.docker.internal:host-gateway" db: restart: 'always' @@ -35,7 +35,7 @@ services: - POSTGRES_USER=postgres - POSTGRES_PASSWORD=postgres healthcheck: - test: ["CMD-SHELL", "pg_isready", "-d", "zitadel", "-U", "postgres"] + test: [ "CMD-SHELL", "pg_isready", "-d", "zitadel", "-U", "postgres" ] interval: '10s' timeout: '30s' retries: 5 diff --git a/e2e/package.json b/e2e/package.json index 8b6b79735e..b465d6b6d9 100644 --- a/e2e/package.json +++ b/e2e/package.json @@ -3,15 +3,15 @@ "version": "0.0.0", "scripts": { "open": "pnpm exec cypress open", - "e2e": "pnpm exec cypress run", - "open:golang": "pnpm run open --", - "e2e:golang": "pnpm run e2e --", - "open:golangangular": "CYPRESS_BASE_URL=http://localhost:4200 CYPRESS_BACKEND_URL=http://localhost:8080 pnpm run open --", - "e2e:golangangular": "CYPRESS_BASE_URL=http://localhost:4200 CYPRESS_BACKEND_URL=http://localhost:8080 pnpm run e2e --", - "open:angulargolang": "pnpm run open:golangangular --", - "e2e:angulargolang": "pnpm run e2e:golangangular --", - "open:angular": "CYPRESS_BASE_URL=http://localhost:4200 CYPRESS_BACKEND_URL=http://localhost:8080 CYPRESS_WEBHOOK_HANDLER_HOST=host.docker.internal pnpm run open --", - "e2e:angular": "CYPRESS_BASE_URL=http://localhost:4200 CYPRESS_BACKEND_URL=http://localhost:8080 CYPRESS_WEBHOOK_HANDLER_HOST=host.docker.internal pnpm run e2e --", + "test:e2e": "pnpm exec cypress run", + "test:open:golang": "pnpm run open --", + "test:e2e:golang": "pnpm run e2e --", + "test:open:golangangular": "CYPRESS_BASE_URL=http://localhost:4200 CYPRESS_BACKEND_URL=http://localhost:8080 pnpm run open --", + "test:e2e:golangangular": "CYPRESS_BASE_URL=http://localhost:4200 CYPRESS_BACKEND_URL=http://localhost:8080 pnpm run e2e --", + "test:open:angulargolang": "pnpm run open:golangangular --", + "test:e2e:angulargolang": "pnpm run e2e:golangangular --", + "test:open:angular": "CYPRESS_BASE_URL=http://localhost:4200 CYPRESS_BACKEND_URL=http://localhost:8080 CYPRESS_WEBHOOK_HANDLER_HOST=host.docker.internal pnpm run open --", + "test:e2e:angular": "CYPRESS_BASE_URL=http://localhost:4200 CYPRESS_BACKEND_URL=http://localhost:8080 CYPRESS_WEBHOOK_HANDLER_HOST=host.docker.internal pnpm run e2e --", "lint": "prettier --check cypress", "lint:fix": "prettier --write cypress" }, diff --git a/internal/api/scim/integration_test/users_create_test.go b/internal/api/scim/integration_test/users_create_test.go index 4d1d9268ce..71356c7b43 100644 --- a/internal/api/scim/integration_test/users_create_test.go +++ b/internal/api/scim/integration_test/users_create_test.go @@ -432,3 +432,78 @@ func TestCreateUser_scopedExternalID(t *testing.T) { assert.Equal(tt, "701984", string(md.Metadata.Value)) }, retryDuration, tick) } + +func TestCreateUser_ignorePasswordOnCreate(t *testing.T) { + t.Parallel() + tests := []struct { + name string + ignorePassword string + scimErrorType string + scimErrorDetail string + wantUser *resources.ScimUser + wantErr bool + }{ + { + name: "ignorePasswordOnCreate set to false", + ignorePassword: "false", + wantErr: true, + scimErrorType: "invalidValue", + scimErrorDetail: "Password is too short", + }, + { + name: "ignorePasswordOnCreate set to an invalid value", + ignorePassword: "random", + wantErr: true, + scimErrorType: "invalidValue", + scimErrorDetail: "Invalid value for metadata key urn:zitadel:scim:ignorePasswordOnCreate: random", + }, + { + name: "ignorePasswordOnCreate set to true", + ignorePassword: "true", + wantUser: &resources.ScimUser{ + UserName: "acmeUser1", + Name: &resources.ScimUserName{ + FamilyName: "Ross", + GivenName: "Bethany", + }, + Emails: []*resources.ScimEmail{ + { + Value: "user1@example.com", + Primary: true, + }, + }, + }, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + t.Parallel() + // create a machine user + callingUserId, callingUserPat, err := Instance.CreateMachineUserPATWithMembership(CTX, "ORG_OWNER") + require.NoError(t, err) + ctx := integration.WithAuthorizationToken(CTX, callingUserPat) + + // set urn:zitadel:scim:ignorePasswordOnCreate metadata for the machine user + setAndEnsureMetadata(t, callingUserId, "urn:zitadel:scim:ignorePasswordOnCreate", tt.ignorePassword) + + // create a user with an invalid password + createdUser, err := Instance.Client.SCIM.Users.Create(ctx, Instance.DefaultOrg.Id, withUsername(invalidPasswordUserJson, "acmeUser1")) + require.Equal(t, tt.wantErr, err != nil) + if err != nil { + scimErr := scim.RequireScimError(t, http.StatusBadRequest, err) + assert.Equal(t, tt.scimErrorType, scimErr.Error.ScimType) + assert.Equal(t, tt.scimErrorDetail, scimErr.Error.Detail) + return + } + + retryDuration, tick := integration.WaitForAndTickWithMaxDuration(CTX, time.Minute) + require.EventuallyWithT(t, func(ttt *assert.CollectT) { + // ensure the user is really stored and not just returned to the caller + fetchedUser, err := Instance.Client.SCIM.Users.Get(CTX, Instance.DefaultOrg.Id, createdUser.ID) + require.NoError(ttt, err) + assert.True(ttt, test.PartiallyDeepEqual(tt.wantUser, fetchedUser)) + }, retryDuration, tick) + }) + } +} diff --git a/internal/api/scim/metadata/context.go b/internal/api/scim/metadata/context.go index dd8ef54d8e..2d0d76b928 100644 --- a/internal/api/scim/metadata/context.go +++ b/internal/api/scim/metadata/context.go @@ -15,6 +15,7 @@ var scimContextKey scimContextKeyType type ScimContextData struct { ProvisioningDomain string + IgnorePasswordOnCreate bool ExternalIDScopedMetadataKey ScopedKey bulkIDMapping map[string]string } diff --git a/internal/api/scim/metadata/metadata.go b/internal/api/scim/metadata/metadata.go index 28e42290d1..eb20284821 100644 --- a/internal/api/scim/metadata/metadata.go +++ b/internal/api/scim/metadata/metadata.go @@ -13,8 +13,9 @@ type ScopedKey string const ( externalIdProvisioningDomainPlaceholder = "{provisioningDomain}" - KeyPrefix = "urn:zitadel:scim:" - KeyProvisioningDomain Key = KeyPrefix + "provisioningDomain" + KeyPrefix = "urn:zitadel:scim:" + KeyProvisioningDomain Key = KeyPrefix + "provisioningDomain" + KeyIgnorePasswordOnCreate Key = KeyPrefix + "ignorePasswordOnCreate" KeyExternalId Key = KeyPrefix + "externalId" keyScopedExternalIdTemplate = KeyPrefix + externalIdProvisioningDomainPlaceholder + ":externalId" diff --git a/internal/api/scim/middleware/scim_context_middleware.go b/internal/api/scim/middleware/scim_context_middleware.go index 1ec917e18b..e9b6f48aa2 100644 --- a/internal/api/scim/middleware/scim_context_middleware.go +++ b/internal/api/scim/middleware/scim_context_middleware.go @@ -3,10 +3,15 @@ package middleware import ( "context" "net/http" + "strconv" + "strings" + + "github.com/zitadel/logging" "github.com/zitadel/zitadel/internal/api/authz" zhttp "github.com/zitadel/zitadel/internal/api/http/middleware" smetadata "github.com/zitadel/zitadel/internal/api/scim/metadata" + sresources "github.com/zitadel/zitadel/internal/api/scim/resources" "github.com/zitadel/zitadel/internal/query" "github.com/zitadel/zitadel/internal/zerrors" ) @@ -29,22 +34,43 @@ func initScimContext(ctx context.Context, q *query.Queries) (context.Context, er ctx = smetadata.SetScimContextData(ctx, data) userID := authz.GetCtxData(ctx).UserID - metadata, err := q.GetUserMetadataByKey(ctx, false, userID, string(smetadata.KeyProvisioningDomain), false) + + // get the provisioningDomain and ignorePasswordOnCreate metadata keys associated with the service user + metadataKeys := []smetadata.Key{ + smetadata.KeyProvisioningDomain, + smetadata.KeyIgnorePasswordOnCreate, + } + queries := sresources.BuildMetadataQueries(ctx, metadataKeys) + + metadataList, err := q.SearchUserMetadata(ctx, false, userID, queries, nil) if err != nil { if zerrors.IsNotFound(err) { return ctx, nil } - return ctx, err } - if metadata == nil { + if metadataList == nil || len(metadataList.Metadata) == 0 { return ctx, nil } - data.ProvisioningDomain = string(metadata.Value) - if data.ProvisioningDomain != "" { - data.ExternalIDScopedMetadataKey = smetadata.ScopeExternalIdKey(data.ProvisioningDomain) + for _, metadata := range metadataList.Metadata { + switch metadata.Key { + case string(smetadata.KeyProvisioningDomain): + data.ProvisioningDomain = string(metadata.Value) + if data.ProvisioningDomain != "" { + data.ExternalIDScopedMetadataKey = smetadata.ScopeExternalIdKey(data.ProvisioningDomain) + } + case string(smetadata.KeyIgnorePasswordOnCreate): + ignorePasswordOnCreate, parseErr := strconv.ParseBool(strings.TrimSpace(string(metadata.Value))) + if parseErr != nil { + return ctx, + zerrors.ThrowInvalidArgumentf(nil, "SMCM-yvw2rt", "Invalid value for metadata key %s: %s", smetadata.KeyIgnorePasswordOnCreate, metadata.Value) + } + data.IgnorePasswordOnCreate = ignorePasswordOnCreate + default: + logging.WithFields("user_metadata_key", metadata.Key).Warn("unexpected metadata key") + } } return smetadata.SetScimContextData(ctx, data), nil } diff --git a/internal/api/scim/resources/user_mapping.go b/internal/api/scim/resources/user_mapping.go index 260e50846a..0aac888173 100644 --- a/internal/api/scim/resources/user_mapping.go +++ b/internal/api/scim/resources/user_mapping.go @@ -45,7 +45,12 @@ func (h *UsersHandler) mapToAddHuman(ctx context.Context, scimUser *ScimUser) (* } human.Metadata = md - if scimUser.Password != nil { + // Okta sends a random password during SCIM provisioning + // irrespective of whether the Sync Password option is enabled or disabled on Okta. + // This password does not comply with Zitadel's password complexity, and + // the following workaround ignores the random password as it does not add any value. + ignorePasswordOnCreate := metadata.GetScimContextData(ctx).IgnorePasswordOnCreate + if scimUser.Password != nil && !ignorePasswordOnCreate { human.Password = scimUser.Password.String() scimUser.Password = nil } diff --git a/internal/api/scim/resources/user_metadata.go b/internal/api/scim/resources/user_metadata.go index b758117ce8..8cf8693691 100644 --- a/internal/api/scim/resources/user_metadata.go +++ b/internal/api/scim/resources/user_metadata.go @@ -21,7 +21,7 @@ import ( ) func (h *UsersHandler) queryMetadataForUsers(ctx context.Context, userIds []string) (map[string]map[metadata.ScopedKey][]byte, error) { - queries := h.buildMetadataQueries(ctx) + queries := BuildMetadataQueries(ctx, metadata.ScimUserRelevantMetadataKeys) md, err := h.query.SearchUserMetadataForUsers(ctx, false, userIds, queries) if err != nil { @@ -43,7 +43,7 @@ func (h *UsersHandler) queryMetadataForUsers(ctx context.Context, userIds []stri } func (h *UsersHandler) queryMetadataForUser(ctx context.Context, id string) (map[metadata.ScopedKey][]byte, error) { - queries := h.buildMetadataQueries(ctx) + queries := BuildMetadataQueries(ctx, metadata.ScimUserRelevantMetadataKeys) md, err := h.query.SearchUserMetadata(ctx, false, id, queries, nil) if err != nil { @@ -53,9 +53,9 @@ func (h *UsersHandler) queryMetadataForUser(ctx context.Context, id string) (map return metadata.MapListToScopedKeyMap(md.Metadata), nil } -func (h *UsersHandler) buildMetadataQueries(ctx context.Context) *query.UserMetadataSearchQueries { - keyQueries := make([]query.SearchQuery, len(metadata.ScimUserRelevantMetadataKeys)) - for i, key := range metadata.ScimUserRelevantMetadataKeys { +func BuildMetadataQueries(ctx context.Context, metadataKeys []metadata.Key) *query.UserMetadataSearchQueries { + keyQueries := make([]query.SearchQuery, len(metadataKeys)) + for i, key := range metadataKeys { keyQueries[i] = buildMetadataKeyQuery(ctx, key) } diff --git a/login/.npmrc b/login/.npmrc deleted file mode 100644 index ded82e2f63..0000000000 --- a/login/.npmrc +++ /dev/null @@ -1 +0,0 @@ -auto-install-peers = true diff --git a/login/.prettierignore b/login/.prettierignore deleted file mode 100644 index 77415caa1e..0000000000 --- a/login/.prettierignore +++ /dev/null @@ -1,9 +0,0 @@ -.next/ -.changeset/ -.github/ -dist/ -standalone/ -packages/zitadel-proto/google -packages/zitadel-proto/protoc-gen-openapiv2 -packages/zitadel-proto/validate -packages/zitadel-proto/zitadel diff --git a/login/Makefile b/login/Makefile deleted file mode 100644 index 05cf704c3f..0000000000 --- a/login/Makefile +++ /dev/null @@ -1,137 +0,0 @@ -XDG_CACHE_HOME ?= $(HOME)/.cache -export CACHE_DIR ?= $(XDG_CACHE_HOME)/zitadel-make - -LOGIN_DIR ?= ./ -LOGIN_BAKE_CLI ?= docker buildx bake -LOGIN_BAKE_CLI_WITH_ARGS := $(LOGIN_BAKE_CLI) --file $(LOGIN_DIR)docker-bake.hcl --file $(LOGIN_DIR)apps/login-test-acceptance/docker-compose.yaml -LOGIN_BAKE_CLI_ADDITIONAL_ARGS ?= -LOGIN_BAKE_CLI_WITH_ARGS += $(LOGIN_BAKE_CLI_ADDITIONAL_ARGS) - -export COMPOSE_BAKE=true -export UID := $(id -u) -export GID := $(id -g) - -export LOGIN_TEST_ACCEPTANCE_BUILD_CONTEXT := $(LOGIN_DIR)apps/login-test-acceptance - -export DOCKER_METADATA_OUTPUT_VERSION ?= local -export LOGIN_TAG ?= zitadel-login:${DOCKER_METADATA_OUTPUT_VERSION} -export LOGIN_TEST_UNIT_TAG := login-test-unit:${DOCKER_METADATA_OUTPUT_VERSION} -export LOGIN_TEST_INTEGRATION_TAG := login-test-integration:${DOCKER_METADATA_OUTPUT_VERSION} -export LOGIN_TEST_ACCEPTANCE_TAG := login-test-acceptance:${DOCKER_METADATA_OUTPUT_VERSION} -export LOGIN_TEST_ACCEPTANCE_SETUP_TAG := login-test-acceptance-setup:${DOCKER_METADATA_OUTPUT_VERSION} -export LOGIN_TEST_ACCEPTANCE_SINK_TAG := login-test-acceptance-sink:${DOCKER_METADATA_OUTPUT_VERSION} -export LOGIN_TEST_ACCEPTANCE_OIDCRP_TAG := login-test-acceptance-oidcrp:${DOCKER_METADATA_OUTPUT_VERSION} -export LOGIN_TEST_ACCEPTANCE_OIDCOP_TAG := login-test-acceptance-oidcop:${DOCKER_METADATA_OUTPUT_VERSION} -export LOGIN_TEST_ACCEPTANCE_SAMLSP_TAG := login-test-acceptance-samlsp:${DOCKER_METADATA_OUTPUT_VERSION} -export LOGIN_TEST_ACCEPTANCE_SAMLIDP_TAG := login-test-acceptance-samlidp:${DOCKER_METADATA_OUTPUT_VERSION} -export POSTGRES_TAG := postgres:17.0-alpine3.19 -export GOLANG_TAG := golang:1.24-alpine -export ZITADEL_TAG ?= ghcr.io/zitadel/zitadel:latest -export LOGIN_CORE_MOCK_TAG := login-core-mock:${DOCKER_METADATA_OUTPUT_VERSION} - -login_help: - @echo "Makefile for the login service" - @echo "Available targets:" - @echo " login_help - Show this help message." - @echo " login_quality - Run all quality checks (login_lint, login_test_unit, login_test_integration, login_test_acceptance)." - @echo " login_standalone_build - Build the docker image for production login containers." - @echo " login_lint - Run linting and formatting checks. IGNORE_RUN_CACHE=true prevents skipping." - @echo " login_test_unit - Run unit tests. Tests without any dependencies. IGNORE_RUN_CACHE=true prevents skipping." - @echo " login-test_integration - Run integration tests. Tests a login production build against a mocked Zitadel core API. IGNORE_RUN_CACHE=true prevents skipping." - @echo " login_test_acceptance - Run acceptance tests. Tests a login production build with a local Zitadel instance behind a reverse proxy. IGNORE_RUN_CACHE=true prevents skipping." - @echo " typescript_generate - Generate TypeScript client code from Protobuf definitions." - @echo " show_run_caches - Show all run caches with image ids and exit codes." - @echo " clean_run_caches - Remove all run caches." - - -login_lint: - @echo "Running login linting and formatting checks" - $(LOGIN_BAKE_CLI_WITH_ARGS) login-lint - -login_test_unit: - @echo "Running login unit tests" - $(LOGIN_BAKE_CLI_WITH_ARGS) login-test-unit - -login_test_integration_build: - @echo "Building login integration test environment with the local core mock image" - $(LOGIN_BAKE_CLI_WITH_ARGS) core-mock login-test-integration login-standalone --load - -login_test_integration_dev: login_test_integration_cleanup - @echo "Starting login integration test environment with the local core mock image" - $(LOGIN_BAKE_CLI_WITH_ARGS) core-mock && docker compose --file $(LOGIN_DIR)apps/login-test-integration/docker-compose.yaml run --service-ports --rm core-mock - -login_test_integration_run: login_test_integration_cleanup - @echo "Running login integration tests" - docker compose --file $(LOGIN_DIR)apps/login-test-integration/docker-compose.yaml run --rm integration - -login_test_integration_cleanup: - @echo "Cleaning up login integration test environment" - docker compose --file $(LOGIN_DIR)apps/login-test-integration/docker-compose.yaml down --volumes - -login_test_integration: login_test_integration_build - $(LOGIN_DIR)scripts/run_or_skip.sh login_test_integration_run \ - "$(LOGIN_TAG) \ - $(LOGIN_CORE_MOCK_TAG) \ - $(LOGIN_TEST_INTEGRATION_TAG)" - -login_test_acceptance_build_bake: - @echo "Building login test acceptance images as defined in the docker-bake.hcl" - $(LOGIN_BAKE_CLI_WITH_ARGS) login-test-acceptance login-standalone --load - -login_test_acceptance_build_compose: - @echo "Building login test acceptance images as defined in the docker-compose.yaml" - $(LOGIN_BAKE_CLI_WITH_ARGS) --load setup sink - -# login_test_acceptance_build is overwritten by the login_dev target in zitadel/zitadel/Makefile -login_test_acceptance_build: login_test_acceptance_build_compose login_test_acceptance_build_bake - -login_test_acceptance_run: login_test_acceptance_cleanup - @echo "Running login test acceptance tests" - docker compose --file $(LOGIN_DIR)apps/login-test-acceptance/docker-compose.yaml --file $(LOGIN_DIR)apps/login-test-acceptance/docker-compose-ci.yaml run --rm --service-ports acceptance - -login_test_acceptance_cleanup: - @echo "Cleaning up login test acceptance environment" - docker compose --file $(LOGIN_DIR)apps/login-test-acceptance/docker-compose.yaml --file $(LOGIN_DIR)apps/login-test-acceptance/docker-compose-ci.yaml down --volumes - -login_test_acceptance: login_test_acceptance_build - $(LOGIN_DIR)scripts/run_or_skip.sh login_test_acceptance_run \ - "$(LOGIN_TAG) \ - $(ZITADEL_TAG) \ - $(POSTGRES_TAG) \ - $(GOLANG_TAG) \ - $(LOGIN_TEST_ACCEPTANCE_TAG) \ - $(LOGIN_TEST_ACCEPTANCE_SETUP_TAG) \ - $(LOGIN_TEST_ACCEPTANCE_SINK_TAG)" - -login_test_acceptance_setup_env: login_test_acceptance_build_compose login_test_acceptance_cleanup - @echo "Setting up the login test acceptance environment and writing the env.test.local file" - docker compose --file $(LOGIN_DIR)apps/login-test-acceptance/docker-compose.yaml run setup - -login_test_acceptance_setup_dev: - @echo "Starting the login test acceptance environment with the local zitadel image" - docker compose --file $(LOGIN_DIR)apps/login-test-acceptance/docker-compose.yaml up --no-recreate zitadel traefik sink - -login_quality: login_lint login_test_unit login_test_integration - @echo "Running login quality checks: lint, unit tests, integration tests" - -login_standalone_build: - @echo "Building the login standalone docker image with tag: $(LOGIN_TAG)" - $(LOGIN_BAKE_CLI_WITH_ARGS) login-standalone --load - -login_standalone_out: - $(LOGIN_BAKE_CLI_WITH_ARGS) login-standalone-out - -typescript_generate: - @echo "Generating TypeScript client and writing to local $(LOGIN_DIR)packages/zitadel-proto" - $(LOGIN_BAKE_CLI_WITH_ARGS) login-typescript-proto-client-out - -clean_run_caches: - @echo "Removing cache directory: $(CACHE_DIR)" - rm -rf "$(CACHE_DIR)" - -show_run_caches: - @echo "Showing run caches with docker image ids and exit codes in $(CACHE_DIR):" - @find "$(CACHE_DIR)" -type f 2>/dev/null | while read file; do \ - echo "$$file: $$(cat $$file)"; \ - done - diff --git a/login/acceptance/docker-compose.yaml b/login/acceptance/docker-compose.yaml deleted file mode 100644 index a68a435e83..0000000000 --- a/login/acceptance/docker-compose.yaml +++ /dev/null @@ -1,71 +0,0 @@ -services: - zitadel: - user: "${ZITADEL_DEV_UID}" - image: "${ZITADEL_IMAGE:-ghcr.io/zitadel/zitadel:02617cf17fdde849378c1a6b5254bbfb2745b164}" - command: 'start-from-init --masterkey "MasterkeyNeedsToHave32Characters" --tlsMode disabled --config /zitadel.yaml --steps /zitadel.yaml' - ports: - - "8080:8080" - volumes: - - ./pat:/pat - - ./zitadel.yaml:/zitadel.yaml - depends_on: - db: - condition: "service_healthy" - extra_hosts: - - "localhost:host-gateway" - - db: - restart: "always" - image: postgres:17.0-alpine3.19 - environment: - - POSTGRES_USER=zitadel - - PGUSER=zitadel - - POSTGRES_DB=zitadel - - POSTGRES_HOST_AUTH_METHOD=trust - command: postgres -c shared_preload_libraries=pg_stat_statements -c pg_stat_statements.track=all -c shared_buffers=1GB -c work_mem=16MB -c effective_io_concurrency=100 -c wal_level=minimal -c archive_mode=off -c max_wal_senders=0 - healthcheck: - test: ["CMD-SHELL", "pg_isready"] - interval: "10s" - timeout: "30s" - retries: 5 - start_period: "20s" - ports: - - 5432:5432 - - wait_for_zitadel: - image: curlimages/curl:8.00.1 - command: /bin/sh -c "until curl -s -o /dev/null -i -f http://zitadel:8080/debug/ready; do echo 'waiting' && sleep 1; done; echo 'ready' && sleep 5;" || false - depends_on: - - zitadel - - setup: - user: "${ZITADEL_DEV_UID}" - container_name: setup - image: acceptance-setup:latest - environment: - PAT_FILE: /pat/zitadel-admin-sa.pat - ZITADEL_API_INTERNAL_URL: http://zitadel:8080 - WRITE_ENVIRONMENT_FILE: /apps/login/.env.local - WRITE_TEST_ENVIRONMENT_FILE: /acceptance/tests/.env.local - SINK_EMAIL_INTERNAL_URL: http://sink:3333/email - SINK_SMS_INTERNAL_URL: http://sink:3333/sms - SINK_NOTIFICATION_URL: http://localhost:3333/notification - volumes: - - "./pat:/pat" - - "../apps/login:/apps/login" - - "../acceptance/tests:/acceptance/tests" - depends_on: - wait_for_zitadel: - condition: "service_completed_successfully" - - sink: - image: golang:1.24-alpine - container_name: sink - command: go run /sink/main.go -port '3333' -email '/email' -sms '/sms' -notification '/notification' - ports: - - 3333:3333 - volumes: - - "./sink:/sink" - depends_on: - setup: - condition: "service_completed_successfully" diff --git a/login/apps/login-test-acceptance/docker-compose-ci.yaml b/login/apps/login-test-acceptance/docker-compose-ci.yaml deleted file mode 100644 index 6f5963df43..0000000000 --- a/login/apps/login-test-acceptance/docker-compose-ci.yaml +++ /dev/null @@ -1,59 +0,0 @@ -services: - - zitadel: - environment: - ZITADEL_EXTERNALDOMAIN: traefik - - traefik: - labels: !reset [] - - setup: - environment: - ZITADEL_API_DOMAIN: traefik - ZITADEL_API_URL: https://traefik - LOGIN_BASE_URL: https://traefik/ui/v2/login/ - SINK_NOTIFICATION_URL: http://sink:3333/notification - ZITADEL_ADMIN_USER: zitadel-admin@zitadel.traefik - - login: - image: "${LOGIN_TAG:-zitadel-login:local}" - container_name: acceptance-login - labels: - - "traefik.enable=true" - - "traefik.http.routers.login.rule=PathPrefix(`/ui/v2/login`)" - ports: - - "3000:3000" - environment: - - NODE_TLS_REJECT_UNAUTHORIZED=0 - depends_on: - setup: - condition: service_completed_successfully - - acceptance: - image: "${LOGIN_TEST_ACCEPTANCE_TAG:-login-test-acceptance:local}" - container_name: acceptance - environment: - - CI - - LOGIN_BASE_URL=https://traefik/ui/v2/login/ - - NODE_TLS_REJECT_UNAUTHORIZED=0 - volumes: - - ../login/.env.test.local:/build/apps/login/.env.test.local - - ./test-results:/build/apps/login-test-acceptance/test-results - - ./playwright-report:/build/apps/login-test-acceptance/playwright-report - ports: - - 9323:9323 - ipc: "host" - init: true - depends_on: - login: - condition: "service_healthy" - sink: - condition: service_healthy -# oidcrp: -# condition: service_healthy -# oidcop: -# condition: service_healthy -# samlsp: -# condition: service_healthy -# samlidp: -# condition: service_healthy diff --git a/login/apps/login-test-acceptance/docker-compose.yaml b/login/apps/login-test-acceptance/docker-compose.yaml deleted file mode 100644 index cb0463fdc8..0000000000 --- a/login/apps/login-test-acceptance/docker-compose.yaml +++ /dev/null @@ -1,237 +0,0 @@ -services: - - zitadel: - user: "${UID:-1000}:${GID:-1000}" - image: "${ZITADEL_TAG:-ghcr.io/zitadel/zitadel:latest}" - container_name: acceptance-zitadel - command: 'start-from-init --masterkey "MasterkeyNeedsToHave32Characters" --config /zitadel.yaml --steps /zitadel.yaml' - labels: - - "traefik.enable=true" - - "traefik.http.routers.zitadel.rule=!PathPrefix(`/ui/v2/login`)" - # - "traefik.http.middlewares.zitadel.headers.customrequestheaders.Host=localhost" -# - "traefik.http.routers.zitadel.middlewares=zitadel@docker" - - "traefik.http.services.zitadel-service.loadbalancer.server.scheme=h2c" - ports: - - "8080:8080" - volumes: - - ./pat:/pat - - ./zitadel.yaml:/zitadel.yaml - depends_on: - db: - condition: "service_healthy" - - db: - restart: "always" - image: ${LOGIN_TEST_ACCEPTANCE_POSTGES_TAG:-postgres:17.0-alpine3.19} - container_name: acceptance-db - environment: - - POSTGRES_USER=zitadel - - PGUSER=zitadel - - POSTGRES_DB=zitadel - - POSTGRES_HOST_AUTH_METHOD=trust - command: postgres -c shared_preload_libraries=pg_stat_statements -c pg_stat_statements.track=all -c shared_buffers=1GB -c work_mem=16MB -c effective_io_concurrency=100 -c wal_level=minimal -c archive_mode=off -c max_wal_senders=0 - healthcheck: - test: ["CMD-SHELL", "pg_isready"] - interval: "10s" - timeout: "30s" - retries: 5 - start_period: "20s" - ports: - - "5432:5432" - - wait-for-zitadel: - image: curlimages/curl:8.00.1 - container_name: acceptance-wait-for-zitadel - command: /bin/sh -c "until curl -s -o /dev/null -i -f http://zitadel:8080/debug/ready; do echo 'waiting' && sleep 1; done; echo 'ready' && sleep 5;" || false - depends_on: - - zitadel - - traefik: - image: "traefik:v3.4" - container_name: "acceptance-traefik" - labels: - - "traefik.enable=true" - - "traefik.http.routers.login.rule=PathPrefix(`/ui/v2/login`)" - - "traefik.http.services.login-service.loadbalancer.server.url=http://host.docker.internal:3000" - command: -# - "--log.level=DEBUG" - - "--ping" - - "--api.insecure=true" - - "--providers.docker=true" - - "--providers.docker.exposedbydefault=false" - - "--entrypoints.websecure.http.tls=true" - - "--entryPoints.websecure.address=:443" - healthcheck: - test: ["CMD", "traefik", "healthcheck", "--ping"] - interval: "10s" - timeout: "30s" - retries: 5 - start_period: "20s" - ports: - - "443:443" - - "8090:8080" - volumes: - - "/var/run/docker.sock:/var/run/docker.sock:ro" - extra_hosts: - - host.docker.internal:host-gateway - - setup: - user: "${UID:-1000}:${GID:-1000}" - image: ${LOGIN_TEST_ACCEPTANCE_SETUP_TAG:-login-test-acceptance-setup:local} - container_name: acceptance-setup - restart: no - build: - context: "${LOGIN_TEST_ACCEPTANCE_BUILD_CONTEXT:-.}/setup" - dockerfile: ../go-command.Dockerfile - entrypoint: "./setup.sh" - environment: - PAT_FILE: /pat/zitadel-admin-sa.pat - ZITADEL_API_INTERNAL_URL: http://zitadel:8080 - WRITE_ENVIRONMENT_FILE: /login-env/.env.test.local - SINK_EMAIL_INTERNAL_URL: http://sink:3333/email - SINK_SMS_INTERNAL_URL: http://sink:3333/sms - SINK_NOTIFICATION_URL: http://localhost:3333/notification - LOGIN_BASE_URL: https://127.0.0.1.sslip.io/ui/v2/login/ - ZITADEL_API_URL: https://127.0.0.1.sslip.io - ZITADEL_API_DOMAIN: 127.0.0.1.sslip.io - ZITADEL_ADMIN_USER: zitadel-admin@zitadel.127.0.0.1.sslip.io - volumes: - - ./pat:/pat # Read the PAT file from zitadels setup - - ../login:/login-env # Write the environment variables file for the login - depends_on: - traefik: - condition: "service_healthy" - wait-for-zitadel: - condition: "service_completed_successfully" - - sink: - image: ${LOGIN_TEST_ACCEPTANCE_SINK_TAG:-login-test-acceptance-sink:local} - container_name: acceptance-sink - build: - context: "${LOGIN_TEST_ACCEPTANCE_BUILD_CONTEXT:-.}/sink" - dockerfile: ../go-command.Dockerfile - args: - - LOGIN_TEST_ACCEPTANCE_GOLANG_TAG=${LOGIN_TEST_ACCEPTANCE_GOLANG_TAG:-golang:1.24-alpine} - environment: - PORT: '3333' - command: - - -port - - '3333' - - -email - - '/email' - - -sms - - '/sms' - - -notification - - '/notification' - ports: - - "3333:3333" - depends_on: - setup: - condition: "service_completed_successfully" - - oidcrp: - user: "${UID:-1000}:${GID:-1000}" - image: ${LOGIN_TEST_ACCEPTANCE_OIDCRP_TAG:-login-test-acceptance-oidcrp:local} - container_name: acceptance-oidcrp - build: - context: "${LOGIN_TEST_ACCEPTANCE_BUILD_CONTEXT:-.}/oidcrp" - dockerfile: ../go-command.Dockerfile - args: - - LOGIN_TEST_ACCEPTANCE_GOLANG_TAG=${LOGIN_TEST_ACCEPTANCE_GOLANG_TAG:-golang:1.24-alpine} - environment: - API_URL: 'http://traefik' - API_DOMAIN: 'traefik' - PAT_FILE: '/pat/zitadel-admin-sa.pat' - LOGIN_URL: 'https://traefik/ui/v2/login' - ISSUER: 'https://traefik' - HOST: 'traefik' - PORT: '8000' - SCOPES: 'openid profile email' - ports: - - "8000:8000" - volumes: - - "./pat:/pat" - depends_on: - traefik: - condition: "service_healthy" - setup: - condition: "service_completed_successfully" - - oidcop: - user: "${UID:-1000}:${GID:-1000}" - image: ${LOGIN_TEST_ACCEPTANCE_OIDCOP_TAG:-login-test-acceptance-oidcop:local} - container_name: acceptance-oidcop - build: - context: "${LOGIN_TEST_ACCEPTANCE_BUILD_CONTEXT:-.}/idp/oidc" - dockerfile: ../../go-command.Dockerfile - args: - - LOGIN_TEST_ACCEPTANCE_GOLANG_TAG=${LOGIN_TEST_ACCEPTANCE_GOLANG_TAG:-golang:1.24-alpine} - environment: - API_URL: 'http://traefik' - API_DOMAIN: 'traefik' - PAT_FILE: '/pat/zitadel-admin-sa.pat' - SCHEMA: 'https' - HOST: 'traefik' - PORT: "8004" - ports: - - 8004:8004 - volumes: - - "./pat:/pat" - depends_on: - traefik: - condition: "service_healthy" - setup: - condition: "service_completed_successfully" - - samlsp: - user: "${UID:-1000}:${GID:-1000}" - image: "${LOGIN_TEST_ACCEPTANCE_SAMLSP_TAG:-login-test-acceptance-samlsp:local}" - container_name: acceptance-samlsp - build: - context: "${LOGIN_TEST_ACCEPTANCE_BUILD_CONTEXT:-.}/samlsp" - dockerfile: ../go-command.Dockerfile - args: - - LOGIN_TEST_ACCEPTANCE_GOLANG_TAG=${LOGIN_TEST_ACCEPTANCE_GOLANG_TAG:-golang:1.24-alpine} - environment: - API_URL: 'http://traefik' - API_DOMAIN: 'traefik' - PAT_FILE: '/pat/zitadel-admin-sa.pat' - LOGIN_URL: 'https://traefik/ui/v2/login' - IDP_URL: 'http://zitadel:8080/saml/v2/metadata' - HOST: 'https://traefik' - PORT: '8001' - ports: - - 8001:8001 - volumes: - - "./pat:/pat" - depends_on: - traefik: - condition: "service_healthy" - setup: - condition: "service_completed_successfully" - - samlidp: - user: "${UID:-1000}:${GID:-1000}" - image: "${LOGIN_TEST_ACCEPTANCE_SAMLIDP_TAG:-login-test-acceptance-samlidp:local}" - container_name: acceptance-samlidp - build: - context: "${LOGIN_TEST_ACCEPTANCE_BUILD_CONTEXT:-.}/idp/saml" - dockerfile: ../../go-command.Dockerfile - args: - - LOGIN_TEST_ACCEPTANCE_GOLANG_TAG=${LOGIN_TEST_ACCEPTANCE_GOLANG_TAG:-golang:1.24-alpine} - environment: - API_URL: 'http://traefik:8080' - API_DOMAIN: 'traefik' - PAT_FILE: '/pat/zitadel-admin-sa.pat' - SCHEMA: 'https' - HOST: 'traefik' - PORT: "8003" - ports: - - 8003:8003 - volumes: - - "./pat:/pat" - depends_on: - traefik: - condition: "service_healthy" - setup: - condition: "service_completed_successfully" diff --git a/login/apps/login-test-acceptance/test-results/.gitkeep b/login/apps/login-test-acceptance/test-results/.gitkeep deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/login/apps/login-test-acceptance/turbo.json b/login/apps/login-test-acceptance/turbo.json deleted file mode 100644 index 3be0539d0f..0000000000 --- a/login/apps/login-test-acceptance/turbo.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "extends": ["//"], - "tasks": { - "test:acceptance:setup:dev": { - "interactive": true, - "cache": false, - "persistent": true - } - } -} diff --git a/login/apps/login-test-integration/core-mock/Dockerfile b/login/apps/login-test-integration/core-mock/Dockerfile deleted file mode 100644 index 469147d17d..0000000000 --- a/login/apps/login-test-integration/core-mock/Dockerfile +++ /dev/null @@ -1,9 +0,0 @@ -FROM golang:1.20.5-alpine3.18 - -RUN go install github.com/eliobischof/grpc-mock/cmd/grpc-mock@01b09f60db1b501178af59bed03b2c22661df48c - -COPY mocked-services.cfg . -COPY initial-stubs initial-stubs -COPY --from=protos . . - -ENTRYPOINT [ "sh", "-c", "grpc-mock -v 1 -proto $(tr '\n' ',' < ./mocked-services.cfg) -stub-dir ./initial-stubs -mock-addr :22222" ] diff --git a/login/apps/login-test-integration/docker-compose.yaml b/login/apps/login-test-integration/docker-compose.yaml deleted file mode 100644 index 2f09a2253e..0000000000 --- a/login/apps/login-test-integration/docker-compose.yaml +++ /dev/null @@ -1,30 +0,0 @@ -services: - core-mock: - image: "${LOGIN_CORE_MOCK_TAG:-login-core-mock:local}" - container_name: integration-core-mock - ports: - - 22220:22220 - - 22222:22222 - - login: - image: "${LOGIN_TAG:-login:local}" - container_name: integration-login - ports: - - 3001:3001 - environment: - - PORT=3001 - - ZITADEL_API_URL=http://core-mock:22222 - - ZITADEL_SERVICE_USER_TOKEN="yolo" - - EMAIL_VERIFICATION=true - - integration: - image: "${LOGIN_TEST_INTEGRATION_TAG:-login-test-integration:local}" - container_name: integration - environment: - - LOGIN_BASE_URL=http://login:3001/ui/v2/login - - CYPRESS_CORE_MOCK_STUBS_URL=http://core-mock:22220/v1/stubs - depends_on: - login: - condition: service_started - core-mock: - condition: service_started diff --git a/login/apps/login-test-integration/package.json b/login/apps/login-test-integration/package.json deleted file mode 100644 index f45c5a3413..0000000000 --- a/login/apps/login-test-integration/package.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "login-test-integration", - "private": true, - "scripts": { - "test:integration": "dotenv -e ../login/.env.test pnpm exec cypress", - "test:integration:setup": "cd ../.. && make login_test_integration_dev" - }, - "devDependencies": { - "@types/node": "^22.14.1", - "concurrently": "^9.1.2", - "cypress": "^14.3.2", - "env-cmd": "^10.0.0", - "nodemon": "^3.1.9", - "start-server-and-test": "^2.0.11", - "typescript": "^5.8.3" - } -} diff --git a/login/apps/login-test-integration/turbo.json b/login/apps/login-test-integration/turbo.json deleted file mode 100644 index 2e2c7cfb42..0000000000 --- a/login/apps/login-test-integration/turbo.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "extends": ["//"], - "tasks": { - "test:integration:setup": { - "interactive": true, - "cache": false, - "persistent": true - } - } -} diff --git a/login/apps/login/.env.test b/login/apps/login/.env.test deleted file mode 100644 index ee70003348..0000000000 --- a/login/apps/login/.env.test +++ /dev/null @@ -1,5 +0,0 @@ -NEXT_PUBLIC_BASE_PATH="" -ZITADEL_API_URL=http://localhost:22222 -ZITADEL_SERVICE_USER_TOKEN="yolo" -EMAIL_VERIFICATION=true -DEBUG=true diff --git a/login/apps/login/.gitignore b/login/apps/login/.gitignore deleted file mode 100644 index f1327fd22b..0000000000 --- a/login/apps/login/.gitignore +++ /dev/null @@ -1,10 +0,0 @@ -custom-config.js -.env*.local -standalone - -# Generated standalone files (temporary) -*.generated.* -package.monorepo.backup.json - -# TypeScript build info -tsconfig.tsbuildinfo diff --git a/login/apps/login/.prettierignore b/login/apps/login/.prettierignore deleted file mode 100644 index dbcbbd11d1..0000000000 --- a/login/apps/login/.prettierignore +++ /dev/null @@ -1,2 +0,0 @@ -.next -/external \ No newline at end of file diff --git a/login/apps/login/Dockerfile b/login/apps/login/Dockerfile deleted file mode 100644 index 06bd053076..0000000000 --- a/login/apps/login/Dockerfile +++ /dev/null @@ -1,54 +0,0 @@ -# Dockerfile for standalone ZITADEL Login UI -FROM node:18-alpine AS base - -# Install dependencies only when needed -FROM base AS deps -RUN apk add --no-cache libc6-compat -WORKDIR /app - -# Prepare standalone and install dependencies -COPY prepare-standalone.sh package*.json ./ -COPY *.standalone.* ./ -RUN ./prepare-standalone.sh - -# Rebuild the source code only when needed -FROM base AS builder -WORKDIR /app -COPY --from=deps /app/node_modules ./node_modules -COPY . . - -# Prepare standalone configs -RUN ./prepare-standalone.sh --no-install - -# Build application -ENV NEXT_TELEMETRY_DISABLED 1 -RUN npm run build:standalone - -# Production image, copy all the files and run next -FROM base AS runner -WORKDIR /app - -ENV NODE_ENV production -ENV NEXT_TELEMETRY_DISABLED 1 - -RUN addgroup --system --gid 1001 nodejs -RUN adduser --system --uid 1001 nextjs - -COPY --from=builder /app/public ./public - -# Set the correct permission for prerender cache -RUN mkdir .next -RUN chown nextjs:nodejs .next - -# Automatically leverage output traces to reduce image size -COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./ -COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static - -USER nextjs - -EXPOSE 3000 - -ENV PORT 3000 -ENV HOSTNAME "0.0.0.0" - -CMD ["node", "server.js"] diff --git a/login/apps/login/readme.md b/login/apps/login/readme.md deleted file mode 100644 index ca7070a901..0000000000 --- a/login/apps/login/readme.md +++ /dev/null @@ -1,394 +0,0 @@ -# ZITADEL Login UI - -This is going to be our next UI for the hosted login. It's based on Next.js 13 and its introduced `app/` directory. - -## Flow Diagram - -This diagram shows the available pages and flows. - -> Note that back navigation or retries are not displayed. - -```mermaid - flowchart TD - A[Start] --> register - A[Start] --> accounts - A[Start] --> loginname - loginname -- signInWithIDP --> idp-success - loginname -- signInWithIDP --> idp-failure - idp-success --> B[signedin] - loginname --> password - loginname -- hasPasskey --> passkey - loginname -- allowRegister --> register - passkey-add --passwordAllowed --> password - passkey -- hasPassword --> password - passkey --> B[signedin] - password -- hasMFA --> mfa - password -- allowPasskeys --> passkey-add - password -- reset --> password-set - email -- reset --> password-set - password-set --> B[signedin] - password-change --> B[signedin] - password -- userstate=initial --> password-change - - mfa --> otp - otp --> B[signedin] - mfa--> u2f - u2f -->B[signedin] - register -- password/passkey --> B[signedin] - password --> B[signedin] - password-- forceMFA -->mfaset - mfaset --> u2fset - mfaset --> otpset - u2fset --> B[signedin] - otpset --> B[signedin] - accounts--> loginname - password -- not verified yet -->verify - register-- withpassword -->verify - passkey-- notVerified --> verify - verify --> B[signedin] -``` - -### /loginname - -This page shows a loginname field and Identity Providers to login or register. -If `loginSettings(org?).allowRegister` is `true`, it also shows a link to jump to /register - -/loginame - -Requests to the APIs made: - -- `getLoginSettings(org?)` -- `getLegalAndSupportSettings(org?)` -- `getIdentityProviders(org?)` -- `getBrandingSettings(org?)` -- `getActiveIdentityProviders(org?)` -- `startIdentityProviderFlow` -- `listUsers(org?)` -- `listAuthenticationMethodTypes` -- `getOrgsByDomain` -- `createSession()` -- `getSession()` - -After a loginname is entered, a `listUsers` request is made using the loginName query to identify already registered users. - -**USER FOUND:** If only one user is found, we query `listAuthenticationMethodTypes` to identify future steps. -If no authentication methods are found, we render an error stating: _User has no available authentication methods._ (exception see below.) -Now if only one method is found, we continue with the corresponding step (/password, /passkey). -If multiple methods are set, we prefer passkeys over any other method, so we redirect to /passkey, second option is IDP, and third is password. -If password is the next step, we check `loginSettings.passkeysType` for PasskeysType.ALLOWED, and prompt the user to setup passkeys afterwards. - -**NO USER FOUND:** If no user is found, we check whether registering is allowed using `loginSettings.allowRegister`. -If `loginSettings?.allowUsernamePassword` is not allowed we continue to check for available IDPs. If a single IDP is available, we directly redirect the user to signup. - -If no single IDP is set, we check for `loginSettings.allowUsernamePassword` and if no organization is set as context, we check whether we can discover a organization from the loginname of the user (using: `getOrgsByDomain`). Then if an organization is found, we check whether domainDiscovery is allowed on it and redirect the user to /register page including the discovered domain or without. - -If no previous condition is met we throw an error stating the user was not found. - -**EXCEPTIONS:** If the outcome after this order produces a no authentication methods found, or user not found, we check whether `loginSettings?.ignoreUnknownUsernames` is set to `true` as in this case we redirect to the /password page regardless (to prevent username guessing). - -> NOTE: This page at this stage beeing ignores local sessions and executes a reauthentication. This is a feature which is not implemented yet. - -> NOTE: We ignore `loginSettings.allowExternalIdp` as the information whether IDPs are available comes as response from `getActiveIdentityProviders(org?)`. If a user has a cookie for the same loginname, a new session is created regardless and overwrites the old session. The old session is not deleted from the login as for now. - -> NOTE: `listAuthenticationMethodTypes()` does not consider different domains for u2f methods or passkeys. The check whether a user should be redirected to one of the pages `/passkey` or `/u2f`, should be extended to use a domain filter (https://github.com/zitadel/zitadel/issues/8615) - -### /password - -This page shows a password field to hydrate the current session with password as a factor. -Below the password field, a reset password link is shown which allows to send a reset email. - -/password - -Requests to the APIs made: - -- `getLoginSettings(org?)` -- `getBrandingSettings(org?)` -- `listAuthenticationMethodTypes` -- `getSession()` -- `updateSession()` -- `listUsers()` -- `getUserById()` - -**MFA AVAILABLE:** After the password has been submitted, additional authentication methods are loaded. -If the user has set up an additional **single** second factor, it is redirected to add the next factor. Depending on the available method he is redirected to `/otp/time-based`,`/otp/sms?`, `/otp/email?` or `/u2f?`. If the user has multiple second factors, he is redirected to `/mfa` to select his preferred method to continue. - -**NO MFA, USER STATE INITIAL** If the user has no MFA methods and is in an initial state, we redirect to `/password/change` where a new password can be set. - -**NO MFA, FORCE MFA:** If no MFA method is available, and the settings force MFA, the user is sent to `/mfa/set` which prompts to setup a second factor. - -**PROMPT PASSKEY** If the settings do not enforce MFA, we check if passkeys are allowed with `loginSettings?.passkeysType == PasskeysType.ALLOWED` and redirect the user to `/passkey/set` if no passkeys are setup. This step can be skipped. - -If none of the previous conditions apply, we continue to sign in. - -> NOTE: `listAuthenticationMethodTypes()` does not consider different domains for u2f methods or passkeys. The check whether a user should be redirected to one of the pages `/passkey` or `/u2f`, should be extended to use a domain filter (https://github.com/zitadel/zitadel/issues/8615) - -### /password/change - -This page allows to change the password. It is used after a user is in an initial state and is required to change the password, or it can be directly invoked with an active session. - -/password/change - -Requests to the APIs made: - -- `getLoginSettings(org?)` -- `getPasswordComplexitySettings(user?)` -- `getBrandingSettings(org?)` -- `getSession()` -- `setPassword()` - -> NOTE: The request to change the password is using the session of the user itself not the service user, therefore no code is required. - -### /password/set - -This page allows to set a password. It is used after a user has requested to reset the password on the `/password` page. - -/password/set - -Requests to the APIs made: - -- `getLoginSettings(org?)` -- `getPasswordComplexitySettings(user?)` -- `getBrandingSettings(org?)` -- `getUserByID()` -- `setPassword()` - -The page allows to enter a code or be invoked directly from a email link which prefills the code. The user can enter a new password and submit. - -### /otp/[method] - -This page shows a code field to check an otp method. The session of the user is then hydrated with the respective factor. Supported methods are `time-based`, `sms` and `email`. - -/otp/[method] - -Requests to the APIs made: - -- `getBrandingSettings(org?)` -- `getSession()` -- `updateSession()` - -If `email` or `sms` is requested as method, the current session of the user is updated to request the challenge. This will trigger an email or sms which can be entered in the code field. -The `time-based` (TOTP) method does not require a trigger, therefore no `updateSession()` is performed and no resendLink under the code field is shown. - -The submission of the code updates the session and continues to sign in the user. - -### /u2f - -This page requests a webAuthN challenge for the user and updates the session afterwards. - -/u2f - -Requests to the APIs made: - -- `getBrandingSettings(org?)` -- `getSession()` -- `updateSession()` - -When updating the session for the webAuthN challenge, we set `userVerificationRequirement` to `UserVerificationRequirement.DISCOURAGED` as this will request the webAuthN method as second factor and not as primary method. -After updating the session, the user is **always** signed in. :warning: required as this page is a follow up for setting up a u2f method. - -### /passkey - -This page requests a webAuthN challenge for the user and updates the session afterwards. -It is invoked directly after setting up a passkey `/passkey/set` or when loggin in a user after `/loginname`. - -/passkey - -Requests to the APIs made: - -- `getBrandingSettings(org?)` -- `getSession()` -- `updateSession()` - -When updating the session for the webAuthN challenge, we set `userVerificationRequirement` to `UserVerificationRequirement.REQUIRED` as this will request the webAuthN method as primary method to login. -After updating the session, the user is **always** signed in. :warning: required as this page is a follow up for setting up a passkey - -> NOTE: This page currently does not check whether a user contains passkeys. If this method is not available, this page should not be used. - -### /mfa/set - -This page loads login settings and the authentication methods for a user and shows setup options. - -/mfa/set - -Requests to the APIs made: - -- `getBrandingSettings(org?)` -- `getLoginSettings(user.org)` :warning: context taken from session -- `getSession()` -- `listAuthenticationMethodTypes()` -- `getUserByID()` - -If a user has already setup a certain method, a checkbox is shown alongside the button and the button is disabled. -OTP Email and OTP SMS only show up if the user has verified email or phone. -If the user chooses a method he is redirected to one of `/otp/time-based/set`, `/u2f/set`, `/otp/email/set`, or `/otp/sms/set`. -At the moment, U2F methods are hidden if a method is already added on the users resource. Reasoning is that the page should only be invoked for prompts. A self service page which shows up multiple u2f factors is implemented at a later stage. - -> NOTE: The session and therefore the user factor defines which login settings are checked for available options. - -> NOTE: `listAuthenticationMethodTypes()` does not consider different domains for u2f or passkeys. The check whether a user should be redirected to one of the pages `/passkey/set` or `/u2f/set`, should be extended to use a domain filter (https://github.com/zitadel/zitadel/issues/8615) - -### /passkey/set - -This page sets a passkey method for a user. This page can be either enforced, or optional depending on the Login Settings. - - -/passkey/set - -Requests to the APIs made: - -- `getBrandingSettings(org?)` -- `getSession()` -- `createPasskeyRegistrationLink()` TODO: check if this can be used with the session token (mfa required (AUTHZ-Kl3p0)) -- `registerPasskey()` -- `verifyPasskey()` - -If the loginname decides to redirect the user to this page, a button to skip appears which will sign the user in afterwards. -After a passkey is registered, we redirect the user to `/passkey` to verify it again and sign in with the new method. The `createPasskeyRegistrationLink()` uses the token of the session which is determined by the flow. - -> NOTE: this page allows passkeys to be created only if the current session is valid (self service), or no authentication method is set (register). TODO: to be implemented. - -> NOTE: Redirecting the user to `/passkey` will not be required in future and the currently used session will be hydrated directly after registering. (https://github.com/zitadel/zitadel/issues/8611) - -### /otp/time-based/set - -This page registers a time based OTP method for a user. - -/otp/time-based/set - -Requests to the APIs made: - -- `getBrandingSettings(org?)` -- `getSession()` -- `registerTOTP()` -- `verifyTOTP()` - -After the setup is done, the user is redirected to verify the TOTP method on `/otp/time-based`. - -> NOTE: Redirecting the user to `/otp/time-based` will not be required in future and the currently used session will be hydrated directly. (https://github.com/zitadel/zitadel/issues/8611) - -### /otp/email/set /otp/sms/set - -This page registers either an Email OTP method or SMS OTP method for a user. - -Requests to the APIs made: - -- `getBrandingSettings(org?)` -- `getSession()` -- `addOTPEmail()` / `addOTPSMS()` - -This page directly calls `addOTPEmail()` or `addOTPSMS()` when invoked and shows a success message. -Right afterwards, redirects to verify the method. - -### /u2f/set - -This page registers a U2F method for a user. - -/u2f/set - -Requests to the APIs made: - -- `getBrandingSettings(org?)` -- `getSession()` -- `registerU2F()` :warning: TODO: check if this can be used with the session token (mfa required (AUTHZ-Kl3p0)) -- `verifyU2FRegistration()` - -After a u2f method is registered, we redirect the user to `/passkey` to verify it again and sign in with the new method. The `createPasskeyRegistrationLink()` uses the token of the session which is determined by the flow. - -> NOTE: Redirecting the user to `/passkey` will not be required in future and the currently used session will be hydrated directly after registering. (https://github.com/zitadel/zitadel/issues/8611) - -### /register - -This page shows a register page, which gets firstname and lastname of a user as well as the email. It offers to setup a user, using password or passkeys. - -/register - -register with password - -Requests to the APIs made: - -- `listOrganizations()` :warning: TODO: determine the default organization if no context is set -- `getLegalAndSupportSettings(org)` -- `getPasswordComplexitySettings()` -- `getBrandingSettings()` -- `addHumanUser()` -- `createSession()` -- `getSession()` - -To register a user, the organization where the resource will be created is determined first. If no context is provided via url, we fall back to the default organization of the instance. - -**PASSWORD:** If a password is set, the user is created as a resource, then a session using the password check is created immediately. After creating the session, the user is directly logged in and eventually redirected back to the application. - -**PASSKEY:** If passkey is selected, the user is created as a resource first, then a session using the userId is created immediately. This session does not yet contain a check, we therefore redirect the user to setup a passkey at `/passkey/set`. As the passkey set page verifies the passkey right afterwards, the process ends with a signed in user. - -> NOTE: https://github.com/zitadel/zitadel/issues/8616 to determine the default organization of an instance must be implemented in order to correctly use the legal-, login-, branding- and complexitysettings. - -> NOTE: TODO: check which methods are allowed in the login settings, loginSettings.allowUsernamePassword / check for passkey - -### /idp - -This page doubles as /loginname but limits it to choose from IDPs - -/idp - -Requests to the APIs made: - -- `getBrandingSettings(org?)` -- `getActiveIdentityProviders(org?)` -- `startIdentityProviderFlow()` - -### /idp/[method]/success /idp/[method]/failure - -Both /success and /failure pages are designed to intercept the responses from the IDPs and decide on how to continue with the process. - -### /verify - -This page verifies the email to be valid. It page of the login can also be invoked without an active session. -The context of the user is taken from the url and is set in the email template. - -/accounts - -Requests to the APIs made: - -- `getBrandingSettings(org?)` -- `getLoginSettings(org?)` -- `verifyEmail()` - -If the page is invoked with an active session (right after a register with password), the user is signed in or redirected to the loginname if no context is known. - -> NOTE: This page will be extended to support invitations. In such case, authentication methods of the user are loaded and if none available, shown as possible next step (`/passkey/set`, `password/set`). - -### /accounts - -This page shows an overview of all current sessions. -Sessions with invalid token show a red dot on the right side, Valid session a green dot, and its last verified date. - -/accounts - -This page is a starting point for self management, reauthentication, or can be used to clear local sessions. -This page is also shown if used with OIDC and `prompt: select_account`. - -On all pages, where the current user is shown, you can jump to this page. This way, a session can quickly be reused if valid. - -jump to accounts - -### /signedin - -This is a success page which shows a completed login flow for a user, which did navigate to the login without a OIDC auth requrest. From here device authorization flows are completed. It checks if the requestId param of starts with `device_` and then executes the `authorizeOrDenyDeviceAuthorization` command. - -/signedin - -In future, self service options to jump to are shown below, like: - -- change password -- setup passkeys -- setup mfa -- change profile -- logout - -> NOTE: This page has to be explicitly enabled or act as a fallback if no default redirect is set. - -## Currently NOT Supported - -- forceMFA on login settings is not checked for IDPs - -Also note that IDP logins are considered as valid MFA. An additional MFA check will be implemented in future if enforced. diff --git a/login/apps/login/src/app/(login)/layout.tsx b/login/apps/login/src/app/(login)/layout.tsx deleted file mode 100644 index 0a75a920f1..0000000000 --- a/login/apps/login/src/app/(login)/layout.tsx +++ /dev/null @@ -1,62 +0,0 @@ -import "@/styles/globals.scss"; - -import { LanguageProvider } from "@/components/language-provider"; -import { LanguageSwitcher } from "@/components/language-switcher"; -import { Skeleton } from "@/components/skeleton"; -import { Theme } from "@/components/theme"; -import { ThemeProvider } from "@/components/theme-provider"; -import { Analytics } from "@vercel/analytics/react"; -import { Lato } from "next/font/google"; -import { ReactNode, Suspense } from "react"; - -const lato = Lato({ - weight: ["400", "700", "900"], - subsets: ["latin"], -}); - -export default async function RootLayout({ - children, -}: { - children: ReactNode; -}) { - return ( - - - - - -
- -
-
-
- -
-
-
- } - > - -
-
- {children} -
- - -
-
-
-
- - - - - - ); -} diff --git a/login/apps/login/src/components/session-item.tsx b/login/apps/login/src/components/session-item.tsx deleted file mode 100644 index f189d05828..0000000000 --- a/login/apps/login/src/components/session-item.tsx +++ /dev/null @@ -1,156 +0,0 @@ -"use client"; - -import { sendLoginname } from "@/lib/server/loginname"; -import { clearSession, continueWithSession } from "@/lib/server/session"; -import { XCircleIcon } from "@heroicons/react/24/outline"; -import { Timestamp, timestampDate } from "@zitadel/client"; -import { Session } from "@zitadel/proto/zitadel/session/v2/session_pb"; -import moment from "moment"; -import { useLocale } from "next-intl"; -import { useRouter } from "next/navigation"; -import { useState } from "react"; -import { Avatar } from "./avatar"; - -export function isSessionValid(session: Partial): { - valid: boolean; - verifiedAt?: Timestamp; -} { - const validPassword = session?.factors?.password?.verifiedAt; - const validPasskey = session?.factors?.webAuthN?.verifiedAt; - const validIDP = session?.factors?.intent?.verifiedAt; - - const stillValid = session.expirationDate - ? timestampDate(session.expirationDate) > new Date() - : true; - - const verifiedAt = validPassword || validPasskey || validIDP; - const valid = !!((validPassword || validPasskey || validIDP) && stillValid); - - return { valid, verifiedAt }; -} - -export function SessionItem({ - session, - reload, - requestId, -}: { - session: Session; - reload: () => void; - requestId?: string; -}) { - const currentLocale = useLocale(); - moment.locale(currentLocale === "zh" ? "zh-cn" : currentLocale); - - const [loading, setLoading] = useState(false); - - async function clearSessionId(id: string) { - setLoading(true); - const response = await clearSession({ - sessionId: id, - }) - .catch((error) => { - setError(error.message); - return; - }) - .finally(() => { - setLoading(false); - }); - - return response; - } - - const { valid, verifiedAt } = isSessionValid(session); - - const [error, setError] = useState(null); - - const router = useRouter(); - - return ( - - ); -} diff --git a/login/apps/login/src/lib/server/otp.ts b/login/apps/login/src/lib/server/otp.ts deleted file mode 100644 index f3d4a1536a..0000000000 --- a/login/apps/login/src/lib/server/otp.ts +++ /dev/null @@ -1,83 +0,0 @@ -"use server"; - -import { setSessionAndUpdateCookie } from "@/lib/server/cookie"; -import { create } from "@zitadel/client"; -import { - CheckOTPSchema, - ChecksSchema, - CheckTOTPSchema, -} from "@zitadel/proto/zitadel/session/v2/session_service_pb"; -import { headers } from "next/headers"; -import { - getMostRecentSessionCookie, - getSessionCookieById, - getSessionCookieByLoginName, -} from "../cookies"; -import { getServiceUrlFromHeaders } from "../service-url"; -import { getLoginSettings } from "../zitadel"; - -export type SetOTPCommand = { - loginName?: string; - sessionId?: string; - organization?: string; - requestId?: string; - code: string; - method: string; -}; - -export async function setOTP(command: SetOTPCommand) { - const _headers = await headers(); - const { serviceUrl } = getServiceUrlFromHeaders(_headers); - - const recentSession = command.sessionId - ? await getSessionCookieById({ sessionId: command.sessionId }).catch( - (error) => { - return Promise.reject(error); - }, - ) - : command.loginName - ? await getSessionCookieByLoginName({ - loginName: command.loginName, - organization: command.organization, - }).catch((error) => { - return Promise.reject(error); - }) - : await getMostRecentSessionCookie().catch((error) => { - return Promise.reject(error); - }); - - const checks = create(ChecksSchema, {}); - - if (command.method === "time-based") { - checks.totp = create(CheckTOTPSchema, { - code: command.code, - }); - } else if (command.method === "sms") { - checks.otpSms = create(CheckOTPSchema, { - code: command.code, - }); - } else if (command.method === "email") { - checks.otpEmail = create(CheckOTPSchema, { - code: command.code, - }); - } - - const loginSettings = await getLoginSettings({ - serviceUrl, - organization: command.organization, - }); - - return setSessionAndUpdateCookie( - recentSession, - checks, - undefined, - command.requestId, - loginSettings?.secondFactorCheckLifetime, - ).then((session) => { - return { - sessionId: session.id, - factors: session.factors, - challenges: session.challenges, - }; - }); -} diff --git a/login/docker-bake.hcl b/login/docker-bake.hcl deleted file mode 100644 index b60fd7270a..0000000000 --- a/login/docker-bake.hcl +++ /dev/null @@ -1,159 +0,0 @@ -variable "LOGIN_DIR" { - default = "./" -} - -variable "DOCKERFILES_DIR" { - default = "dockerfiles/" -} - -# The release target is overwritten in docker-bake-release.hcl -# It makes sure the image is built for multiple platforms. -# By default the platforms property is empty, so images are only built for the current bake runtime platform. -target "release" {} - -# typescript-proto-client is used to generate the client code for the login service. -# It is not login-prefixed, so it is easily extendable. -# To extend this bake-file.hcl, set the context of all login-prefixed targets to a different directory. -# For example docker bake --file login/docker-bake.hcl --file docker-bake.hcl --set login-*.context=./login/ -# The zitadel repository uses this to generate the client and the mock server from local proto files. -target "typescript-proto-client" { - inherits = ["release"] - dockerfile = "${DOCKERFILES_DIR}typescript-proto-client.Dockerfile" - contexts = { - # We directly generate and download the client server-side with buf, so we don't need the proto files - login-pnpm = "target:login-pnpm" - } -} - -# We prefix the target with login- so we can reuse the writing of protos if we overwrite the typescript-proto-client target. -target "login-typescript-proto-client-out" { - dockerfile = "${DOCKERFILES_DIR}login-typescript-proto-client-out.Dockerfile" - contexts = { - typescript-proto-client = "target:typescript-proto-client" - } - output = [ - "type=local,dest=${LOGIN_DIR}packages/zitadel-proto" - ] -} - -# proto-files is only used to build core-mock against which the integration tests run. -# To build the proto-client, we use buf to generate and download the client code directly. -# It is not login-prefixed, so it is easily extendable. -# To extend this bake-file.hcl, set the context of all login-prefixed targets to a different directory. -# For example docker bake --file login/docker-bake.hcl --file docker-bake.hcl --set login-*.context=./login/ -# The zitadel repository uses this to generate the client and the mock server from local proto files. -target "proto-files" { - inherits = ["release"] - dockerfile = "${DOCKERFILES_DIR}proto-files.Dockerfile" - contexts = { - login-pnpm = "target:login-pnpm" - } -} - -variable "NODE_VERSION" { - default = "20" -} - -target "login-pnpm" { - inherits = ["release"] - dockerfile = "${DOCKERFILES_DIR}login-pnpm.Dockerfile" - args = { - NODE_VERSION = "${NODE_VERSION}" - } -} - -target "login-dev-base" { - dockerfile = "${DOCKERFILES_DIR}login-dev-base.Dockerfile" - contexts = { - login-pnpm = "target:login-pnpm" - } -} - -target "login-lint" { - dockerfile = "${DOCKERFILES_DIR}login-lint.Dockerfile" - contexts = { - login-dev-base = "target:login-dev-base" - } -} - -target "login-test-unit" { - dockerfile = "${DOCKERFILES_DIR}login-test-unit.Dockerfile" - contexts = { - login-client = "target:login-client" - } -} - -target "login-client" { - inherits = ["release"] - dockerfile = "${DOCKERFILES_DIR}login-client.Dockerfile" - contexts = { - login-pnpm = "target:login-pnpm" - typescript-proto-client = "target:typescript-proto-client" - } -} - -variable "LOGIN_CORE_MOCK_TAG" { - default = "login-core-mock:local" -} - -# the core-mock context must not be overwritten, so we don't prefix it with login-. -target "core-mock" { - context = "${LOGIN_DIR}apps/login-test-integration/core-mock" - contexts = { - protos = "target:proto-files" - } - tags = ["${LOGIN_CORE_MOCK_TAG}"] -} - -variable "LOGIN_TEST_INTEGRATION_TAG" { - default = "login-test-integration:local" -} - -target "login-test-integration" { - dockerfile = "${DOCKERFILES_DIR}login-test-integration.Dockerfile" - contexts = { - login-pnpm = "target:login-pnpm" - } - tags = ["${LOGIN_TEST_INTEGRATION_TAG}"] -} - -variable "LOGIN_TEST_ACCEPTANCE_TAG" { - default = "login-test-acceptance:local" -} - -target "login-test-acceptance" { - dockerfile = "${DOCKERFILES_DIR}login-test-acceptance.Dockerfile" - contexts = { - login-pnpm = "target:login-pnpm" - } - tags = ["${LOGIN_TEST_ACCEPTANCE_TAG}"] -} - -variable "LOGIN_TAG" { - default = "zitadel-login:local" -} - -target "docker-metadata-action" { - # In the pipeline, this target is overwritten by the docker metadata action. - tags = ["${LOGIN_TAG}"] -} - -# We run integration and acceptance tests against the next standalone server for docker. -target "login-standalone" { - inherits = [ - "docker-metadata-action", - "release", - ] - dockerfile = "${DOCKERFILES_DIR}login-standalone.Dockerfile" - contexts = { - login-client = "target:login-client" - } -} - -target "login-standalone-out" { - inherits = ["login-standalone"] - target = "login-standalone-out" - output = [ - "type=local,dest=${LOGIN_DIR}apps/login/standalone" - ] -} diff --git a/login/dockerfiles/login-client.Dockerfile b/login/dockerfiles/login-client.Dockerfile deleted file mode 100644 index cf44feeb0d..0000000000 --- a/login/dockerfiles/login-client.Dockerfile +++ /dev/null @@ -1,6 +0,0 @@ -FROM typescript-proto-client AS login-client -COPY packages/zitadel-client/package.json ./packages/zitadel-client/ -RUN --mount=type=cache,id=pnpm,target=/pnpm/store \ - pnpm install --frozen-lockfile --workspace-root --filter ./packages/zitadel-client -COPY packages/zitadel-client ./packages/zitadel-client -RUN cd packages/zitadel-client && pnpm build diff --git a/login/dockerfiles/login-client.Dockerfile.dockerignore b/login/dockerfiles/login-client.Dockerfile.dockerignore deleted file mode 100644 index c2302359f5..0000000000 --- a/login/dockerfiles/login-client.Dockerfile.dockerignore +++ /dev/null @@ -1,11 +0,0 @@ -* - -!packages/zitadel-client -packages/zitadel-client/dist - -!packages/zitadel-tsconfig - -**/*.md -**/*.png -**/node_modules -**/.turbo diff --git a/login/dockerfiles/login-dev-base.Dockerfile b/login/dockerfiles/login-dev-base.Dockerfile deleted file mode 100644 index e102d16746..0000000000 --- a/login/dockerfiles/login-dev-base.Dockerfile +++ /dev/null @@ -1,3 +0,0 @@ -FROM login-pnpm AS login-dev-base -RUN pnpm install --frozen-lockfile --prefer-offline --workspace-root --filter . - diff --git a/login/dockerfiles/login-dev-base.Dockerfile.dockerignore b/login/dockerfiles/login-dev-base.Dockerfile.dockerignore deleted file mode 100644 index 72e8ffc0db..0000000000 --- a/login/dockerfiles/login-dev-base.Dockerfile.dockerignore +++ /dev/null @@ -1 +0,0 @@ -* diff --git a/login/dockerfiles/login-lint.Dockerfile b/login/dockerfiles/login-lint.Dockerfile deleted file mode 100644 index 0c466b4cfa..0000000000 --- a/login/dockerfiles/login-lint.Dockerfile +++ /dev/null @@ -1,7 +0,0 @@ -FROM login-dev-base AS login-lint -COPY .prettierrc .prettierignore ./ -COPY apps/login/package.json apps/login/ -RUN --mount=type=cache,id=pnpm,target=/pnpm/store \ - pnpm install --frozen-lockfile --workspace-root --filter apps/login -COPY . . -RUN pnpm lint && pnpm format diff --git a/login/dockerfiles/login-lint.Dockerfile.dockerignore b/login/dockerfiles/login-lint.Dockerfile.dockerignore deleted file mode 100644 index 1029f73c02..0000000000 --- a/login/dockerfiles/login-lint.Dockerfile.dockerignore +++ /dev/null @@ -1,25 +0,0 @@ -* - -!apps/login -apps/login/.next -apps/login/dist -apps/login/screenshots -apps/login/standalone -apps/login/.env*.local - -!apps/login-test-integration - -!apps/login-test-acceptance -apps/login-test-acceptance/test-results - -!/packages/zitadel-tsconfig/* -!/packages/zitadel-prettier-config -!/packages/zitadel-eslint-config - -!/.prettierrc -!/.prettierignore - -**/*.md -**/*.png -**/node_modules -**/.turbo diff --git a/login/dockerfiles/login-pnpm.Dockerfile b/login/dockerfiles/login-pnpm.Dockerfile deleted file mode 100644 index bcef6d126c..0000000000 --- a/login/dockerfiles/login-pnpm.Dockerfile +++ /dev/null @@ -1,10 +0,0 @@ -ARG NODE_VERSION=20 -FROM node:${NODE_VERSION}-bookworm AS login-pnpm -ENV PNPM_HOME="/pnpm" -ENV PATH="$PNPM_HOME:$PATH" -RUN corepack enable && COREPACK_ENABLE_DOWNLOAD_PROMPT=0 corepack prepare pnpm@9.1.2 --activate && \ - apt-get update && apt-get install -y --no-install-recommends && \ - rm -rf /var/lib/apt/lists/* -WORKDIR /build -COPY turbo.json .npmrc package.json pnpm-lock.yaml pnpm-workspace.yaml ./ -ENTRYPOINT ["pnpm"] diff --git a/login/dockerfiles/login-pnpm.Dockerfile.dockerignore b/login/dockerfiles/login-pnpm.Dockerfile.dockerignore deleted file mode 100644 index 067514fdd3..0000000000 --- a/login/dockerfiles/login-pnpm.Dockerfile.dockerignore +++ /dev/null @@ -1,6 +0,0 @@ -* -!/turbo.json -!/.npmrc -!/package.json -!/pnpm-lock.yaml -!/pnpm-workspace.yaml diff --git a/login/dockerfiles/login-standalone.Dockerfile b/login/dockerfiles/login-standalone.Dockerfile deleted file mode 100644 index 3754f9d80f..0000000000 --- a/login/dockerfiles/login-standalone.Dockerfile +++ /dev/null @@ -1,33 +0,0 @@ -FROM login-client AS login-standalone-builder -COPY apps/login ./apps/login -RUN pnpm exec turbo prune @zitadel/login --docker -WORKDIR /build/docker -RUN cp -r ../out/json/* . -RUN --mount=type=cache,id=pnpm,target=/pnpm/store \ - pnpm install --frozen-lockfile -RUN cp -r ../out/full/* . -RUN pnpm exec turbo run build:login:standalone - -FROM scratch AS login-standalone-out -COPY --from=login-standalone-builder /build/docker/apps/login/.next/standalone / -COPY --from=login-standalone-builder /build/docker/apps/login/.next/static /apps/login/.next/static -COPY --from=login-standalone-builder /build/docker/apps/login/public /apps/login/public - -FROM node:20-alpine AS login-standalone -WORKDIR /runtime -RUN addgroup --system --gid 1001 nodejs && \ - adduser --system --uid 1001 nextjs -# If /.env-file/.env is mounted into the container, its variables are made available to the server before it starts up. -RUN mkdir -p /.env-file && touch /.env-file/.env && chown -R nextjs:nodejs /.env-file -COPY ./scripts/entrypoint.sh ./ -COPY ./scripts/healthcheck.js ./ -COPY --chown=nextjs:nodejs --from=login-standalone-builder /build/docker/apps/login/.next/standalone ./ -COPY --chown=nextjs:nodejs --from=login-standalone-builder /build/docker/apps/login/.next/static ./apps/login/.next/static -COPY --chown=nextjs:nodejs --from=login-standalone-builder /build/docker/apps/login/public ./apps/login/public -USER nextjs -ENV HOSTNAME="0.0.0.0" -ENV PORT=3000 -# TODO: Check healthy, not ready -HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \ -CMD ["/bin/sh", "-c", "node ./healthcheck.js http://localhost:${PORT}/ui/v2/login/healthy"] -ENTRYPOINT ["./entrypoint.sh"] diff --git a/login/dockerfiles/login-standalone.Dockerfile.dockerignore b/login/dockerfiles/login-standalone.Dockerfile.dockerignore deleted file mode 100644 index f876e1e9f1..0000000000 --- a/login/dockerfiles/login-standalone.Dockerfile.dockerignore +++ /dev/null @@ -1,17 +0,0 @@ -* - -!apps/login -apps/login/.next -apps/login/dist -apps/login/screenshots -apps/login/standalone -apps/login/.env*.local - -!scripts/entrypoint.sh -!scripts/healthcheck.js -!packages/zitadel-tailwind-config - -**/*.md -**/*.png -**/node_modules -**/.turbo diff --git a/login/dockerfiles/login-test-acceptance.Dockerfile b/login/dockerfiles/login-test-acceptance.Dockerfile deleted file mode 100644 index 7052484779..0000000000 --- a/login/dockerfiles/login-test-acceptance.Dockerfile +++ /dev/null @@ -1,8 +0,0 @@ -FROM login-pnpm AS login-test-acceptance-dependencies -COPY ./apps/login-test-acceptance/package.json ./apps/login-test-acceptance/package.json -RUN --mount=type=cache,id=pnpm,target=/pnpm/store \ - pnpm install --frozen-lockfile --filter=login-test-acceptance && \ - cd apps/login-test-acceptance && \ - pnpm exec playwright install --with-deps chromium -COPY ./apps/login-test-acceptance ./apps/login-test-acceptance -CMD ["bash", "-c", "cd apps/login-test-acceptance && pnpm test:acceptance test"] diff --git a/login/dockerfiles/login-test-acceptance.Dockerfile.dockerignore b/login/dockerfiles/login-test-acceptance.Dockerfile.dockerignore deleted file mode 100644 index cba55ae91e..0000000000 --- a/login/dockerfiles/login-test-acceptance.Dockerfile.dockerignore +++ /dev/null @@ -1,5 +0,0 @@ -* -!/apps/login-test-acceptance/*.json -!/apps/login-test-acceptance/*.ts -!/apps/login-test-acceptance/zitadel.yaml -!/apps/login-test-acceptance/tests diff --git a/login/dockerfiles/login-test-integration.Dockerfile b/login/dockerfiles/login-test-integration.Dockerfile deleted file mode 100644 index 0b55dc2b1a..0000000000 --- a/login/dockerfiles/login-test-integration.Dockerfile +++ /dev/null @@ -1,11 +0,0 @@ -FROM login-pnpm AS login-test-integration-dependencies -COPY ./apps/login-test-integration/package.json ./apps/login-test-integration/package.json -RUN --mount=type=cache,id=pnpm,target=/pnpm/store \ - pnpm install --frozen-lockfile --filter=login-test-integration -FROM cypress/factory:5.10.0 AS login-test-integration -WORKDIR /opt/app -COPY --from=login-test-integration-dependencies /build/apps/login-test-integration . -RUN npm install cypress -RUN npx cypress install -COPY ./apps/login-test-integration . -CMD ["npx", "cypress", "run"] diff --git a/login/dockerfiles/login-test-integration.Dockerfile.dockerignore b/login/dockerfiles/login-test-integration.Dockerfile.dockerignore deleted file mode 100644 index 947a4fdb57..0000000000 --- a/login/dockerfiles/login-test-integration.Dockerfile.dockerignore +++ /dev/null @@ -1,9 +0,0 @@ -* - -!/apps/login-test-integration -/apps/login-test-integration/core-mock - -**/*.md -**/*.png -**/node_modules -**/.turbo diff --git a/login/dockerfiles/login-test-unit.Dockerfile b/login/dockerfiles/login-test-unit.Dockerfile deleted file mode 100644 index d456a4fac4..0000000000 --- a/login/dockerfiles/login-test-unit.Dockerfile +++ /dev/null @@ -1,6 +0,0 @@ -FROM login-client AS login-test-unit -COPY apps/login/package.json ./apps/login/ -RUN --mount=type=cache,id=pnpm,target=/pnpm/store \ - pnpm install --frozen-lockfile --workspace-root --filter ./apps/login -COPY apps/login ./apps/login -RUN pnpm test:unit:standalone diff --git a/login/dockerfiles/login-test-unit.Dockerfile.dockerignore b/login/dockerfiles/login-test-unit.Dockerfile.dockerignore deleted file mode 100644 index 2263653c69..0000000000 --- a/login/dockerfiles/login-test-unit.Dockerfile.dockerignore +++ /dev/null @@ -1,13 +0,0 @@ -* - -!apps/login -apps/login/.next -apps/login/dist -apps/login/screenshots -apps/login/standalone -apps/login/.env*.local - -**/*.md -**/*.png -**/node_modules -**/.turbo diff --git a/login/dockerfiles/login-typescript-proto-client-out.Dockerfile b/login/dockerfiles/login-typescript-proto-client-out.Dockerfile deleted file mode 100644 index 3aa3c9d7d6..0000000000 --- a/login/dockerfiles/login-typescript-proto-client-out.Dockerfile +++ /dev/null @@ -1,5 +0,0 @@ -FROM scratch AS typescript-proto-client-out -COPY --from=typescript-proto-client /build/packages/zitadel-proto/zitadel /zitadel -COPY --from=typescript-proto-client /build/packages/zitadel-proto/google /google -COPY --from=typescript-proto-client /build/packages/zitadel-proto/protoc-gen-openapiv2 /protoc-gen-openapiv2 -COPY --from=typescript-proto-client /build/packages/zitadel-proto/validate /validate diff --git a/login/dockerfiles/login-typescript-proto-client-out.Dockerfile.dockerignore b/login/dockerfiles/login-typescript-proto-client-out.Dockerfile.dockerignore deleted file mode 100644 index 72e8ffc0db..0000000000 --- a/login/dockerfiles/login-typescript-proto-client-out.Dockerfile.dockerignore +++ /dev/null @@ -1 +0,0 @@ -* diff --git a/login/dockerfiles/proto-files.Dockerfile b/login/dockerfiles/proto-files.Dockerfile deleted file mode 100644 index f97f63a718..0000000000 --- a/login/dockerfiles/proto-files.Dockerfile +++ /dev/null @@ -1,8 +0,0 @@ -FROM bufbuild/buf:1.54.0 AS proto-files -RUN buf export https://github.com/envoyproxy/protoc-gen-validate.git --path validate --output /proto-files && \ - buf export https://github.com/grpc-ecosystem/grpc-gateway.git --path protoc-gen-openapiv2 --output /proto-files && \ - buf export https://github.com/googleapis/googleapis.git --path google/api/annotations.proto --path google/api/http.proto --path google/api/field_behavior.proto --output /proto-files && \ - buf export https://github.com/zitadel/zitadel.git --path ./proto/zitadel --output /proto-files - -FROM scratch -COPY --from=proto-files /proto-files / diff --git a/login/dockerfiles/proto-files.Dockerfile.dockerignore b/login/dockerfiles/proto-files.Dockerfile.dockerignore deleted file mode 100644 index 72e8ffc0db..0000000000 --- a/login/dockerfiles/proto-files.Dockerfile.dockerignore +++ /dev/null @@ -1 +0,0 @@ -* diff --git a/login/dockerfiles/typescript-proto-client.Dockerfile b/login/dockerfiles/typescript-proto-client.Dockerfile deleted file mode 100644 index ee0848f52d..0000000000 --- a/login/dockerfiles/typescript-proto-client.Dockerfile +++ /dev/null @@ -1,6 +0,0 @@ -FROM login-pnpm AS typescript-proto-client -COPY packages/zitadel-proto/package.json ./packages/zitadel-proto/ -RUN --mount=type=cache,id=pnpm,target=/pnpm/store \ - pnpm install --frozen-lockfile --workspace-root --filter zitadel-proto -COPY packages/zitadel-proto ./packages/zitadel-proto -RUN pnpm generate diff --git a/login/dockerfiles/typescript-proto-client.Dockerfile.dockerignore b/login/dockerfiles/typescript-proto-client.Dockerfile.dockerignore deleted file mode 100644 index e67848e8c3..0000000000 --- a/login/dockerfiles/typescript-proto-client.Dockerfile.dockerignore +++ /dev/null @@ -1,11 +0,0 @@ -* -!/packages/zitadel-proto/ -packages/zitadel-proto/google -packages/zitadel-proto/zitadel -packages/zitadel-proto/protoc-gen-openapiv2 -packages/zitadel-proto/validate - -**/*.md -**/*.png -**/node_modules -**/.turbo \ No newline at end of file diff --git a/login/meta.json b/login/meta.json deleted file mode 100644 index 2c443f76cf..0000000000 --- a/login/meta.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "name": "ZITADEL typescript Monorepo with Changesets", - "description": "ZITADEL typescript monorepo preconfigured to publish packages via Changesets" -} diff --git a/login/scripts/healthcheck.js b/login/scripts/healthcheck.js deleted file mode 100644 index c1a64c6e75..0000000000 --- a/login/scripts/healthcheck.js +++ /dev/null @@ -1,14 +0,0 @@ -const url = process.argv[2]; - -if (!url) { - console.error("❌ No URL provided as command line argument."); - process.exit(1); -} - -try { - const res = await fetch(url); - if (!res.ok) process.exit(1); - process.exit(0); -} catch (e) { - process.exit(1); -} diff --git a/login/scripts/run_or_skip.sh b/login/scripts/run_or_skip.sh deleted file mode 100755 index 4516eb01b1..0000000000 --- a/login/scripts/run_or_skip.sh +++ /dev/null @@ -1,67 +0,0 @@ -#!/usr/bin/env bash - -# Usage: ./run_or_skip.sh -# Example: ./run_or_skip.sh lint-force "img1;img2" - -set -euo pipefail - -if [ -z "$CACHE_DIR" ]; then - echo "CACHE_DIR is not set. Please set it to a valid directory." - exit 1 -fi - -MAKE_TARGET=$1 -IMAGES=$2 -IGNORE_RUN_CACHE=${IGNORE_RUN_CACHE:-false} - -CACHE_FILE="$CACHE_DIR/$MAKE_TARGET.digests" -mkdir -p "$CACHE_DIR" - -get_image_creation_dates() { - local values="" - for img in $(echo "$IMAGES"); do - local value=$(docker image inspect "$img" --format='{{.Created}}' 2>/dev/null || true) - if [[ -z $value ]]; then - docker pull "$img" >/dev/null 2>&1 || true - value=$(docker image inspect "$img" --format='{{.Created}}' 2>/dev/null || true) - fi - if [[ -z $value ]]; then - value=$(docker image inspect "$img" --format='{{.Created}}' 2>/dev/null || true) - fi - value=${value:-new-and-not-pullable-or-failed-to-build} - value="${img}@${value}" - values="${values}${value};" - done - values=${values%;} # Remove trailing semicolon - echo "$values" -} - -CACHE_FILE_CONTENT=$(cat "$CACHE_FILE" 2>/dev/null || echo "") -CACHED_STATUS=$(echo "$CACHE_FILE_CONTENT" | cut -d ';' -f1) -CACHED_IMAGE_CREATED_VALUES=$(echo "$CACHE_FILE_CONTENT" | cut -d ';' -f2-99) -CURRENT_IMAGE_CREATED_VALUES="$(get_image_creation_dates)" - if [[ "$CACHED_IMAGE_CREATED_VALUES" == "$CURRENT_IMAGE_CREATED_VALUES" ]]; then - if [[ "$IGNORE_RUN_CACHE" == "true" ]]; then - echo "\$IGNORE_RUN_CACHE=$IGNORE_RUN_CACHE - Running $MAKE_TARGET despite unchanged images." - else - echo "Skipping $MAKE_TARGET – all images unchanged, returning cached status $CACHED_STATUS" - exit $CACHED_STATUS - fi -fi -echo "Images have changed" -echo -echo "CACHED_IMAGE_CREATED_VALUES does not match CURRENT_IMAGE_CREATED_VALUES" -echo -echo "$CACHED_IMAGE_CREATED_VALUES" -echo -echo "$CURRENT_IMAGE_CREATED_VALUES" -echo -docker images -echo -echo "Running $MAKE_TARGET..." -set +e -make -j $MAKE_TARGET -STATUS=$? -set -e -echo "${STATUS};$(get_image_creation_dates)" > $CACHE_FILE -exit $STATUS diff --git a/login/test-setup.ts b/login/test-setup.ts deleted file mode 100644 index 5f766d62a8..0000000000 --- a/login/test-setup.ts +++ /dev/null @@ -1,2 +0,0 @@ -// Test setup file to handle jest-dom configuration -import "@testing-library/jest-dom"; diff --git a/package.json b/package.json index ab7352c78c..97a0943116 100644 --- a/package.json +++ b/package.json @@ -3,33 +3,10 @@ "private": true, "name": "zitadel-monorepo", "scripts": { - "generate": "pnpm exec turbo run generate", - "build": "pnpm exec turbo run build", - "build:client:standalone": "pnpm exec turbo run build:client:standalone", - "build:login:standalone": "pnpm exec turbo run build:login:standalone", - "build:packages": "pnpm exec turbo run build --filter=./login/packages/*", - "build:apps": "pnpm exec turbo run build --filter=./login/apps/*", - "build:console": "pnpm exec turbo run build --filter=console", - "test": "pnpm exec turbo run test", - "start": "pnpm exec turbo run start", - "start:built": "pnpm exec turbo run start:built", - "test:unit": "pnpm exec turbo run test:unit -- --passWithNoTests", - "test:unit:standalone": "pnpm exec turbo run test:unit:standalone -- --passWithNoTests", - "test:integration": "cd login/apps/login-test-integration && pnpm test:integration", - "test:integration:setup": "NODE_ENV=test pnpm exec turbo run test:integration:setup", - "test:acceptance": "cd login/apps/login-test-acceptance && pnpm test:acceptance", - "test:acceptance:setup": "cd login/apps/login-test-acceptance && pnpm test:acceptance:setup", - "dev": "pnpm exec turbo run dev --no-cache --continue", - "dev:local": "pnpm test:acceptance:setup", - "dev:console": "pnpm exec turbo run start --filter=console", - "lint": "pnpm exec turbo run lint", - "lint:fix": "pnpm exec turbo run lint:fix", - "clean": "pnpm exec turbo run clean && rm -rf node_modules", - "format:fix": "pnpm exec prettier --write \"**/*.{ts,tsx,md}\"", - "format": "pnpm exec prettier --check \"**/*.{ts,tsx,md}\"", - "changeset": "pnpm exec changeset", - "version-packages": "pnpm exec changeset version", - "release": "pnpm exec turbo run build --filter=login^... && pnpm exec changeset publish" + "changeset": "changeset", + "devcontainer": "devcontainer", + "devcontainer:lint-unit": "pnpm devcontainer up --config .devcontainer/turbo-lint-unit/devcontainer.json --workspace-folder . --remove-existing-container", + "devcontainer:integration:login": "pnpm devcontainer up --config .devcontainer/login-integration/devcontainer.json --workspace-folder . --remove-existing-container" }, "pnpm": { "overrides": { @@ -39,20 +16,8 @@ } }, "devDependencies": { - "@changesets/cli": "^2.29.2", - "@eslint/compat": "^1.3.1", - "@eslint/eslintrc": "^3.3.1", - "@vitejs/plugin-react": "^4.4.1", - "axios": "^1.8.4", - "dotenv": "^16.5.0", - "dotenv-cli": "^8.0.0", - "eslint": "9.30.1", - "prettier": "^3.5.3", - "prettier-plugin-organize-imports": "^4.1.0", - "tsup": "^8.4.0", - "turbo": "2.5.0", - "typescript": "^5.8.3", - "vite-tsconfig-paths": "^5.1.4", - "vitest": "^3.1.2" + "@changesets/cli": "^2.29.5", + "@devcontainers/cli": "^0.80.0", + "turbo": "2.5.5" } } diff --git a/login/.changeset/README.md b/packages/.changeset/README.md similarity index 100% rename from login/.changeset/README.md rename to packages/.changeset/README.md diff --git a/login/.changeset/config.json b/packages/.changeset/config.json similarity index 74% rename from login/.changeset/config.json rename to packages/.changeset/config.json index 3f2d313f66..6551b0ca8a 100644 --- a/login/.changeset/config.json +++ b/packages/.changeset/config.json @@ -6,6 +6,5 @@ "linked": [], "access": "public", "baseBranch": "main", - "updateInternalDependencies": "patch", - "ignore": ["@zitadel/login"] + "updateInternalDependencies": "patch" } diff --git a/login/packages/zitadel-client/.eslintrc.cjs b/packages/zitadel-client/.eslintrc.cjs similarity index 57% rename from login/packages/zitadel-client/.eslintrc.cjs rename to packages/zitadel-client/.eslintrc.cjs index 2aa38a6ac4..dc9f0a66c3 100644 --- a/login/packages/zitadel-client/.eslintrc.cjs +++ b/packages/zitadel-client/.eslintrc.cjs @@ -1,6 +1,6 @@ module.exports = { root: true, - extends: ["eslint:recommended", "@typescript-eslint/recommended"], + extends: ["eslint:recommended", "plugin:@typescript-eslint/recommended"], parser: "@typescript-eslint/parser", plugins: ["@typescript-eslint"], env: { @@ -11,4 +11,7 @@ module.exports = { ecmaVersion: 2022, sourceType: "module", }, + rules: { + "@typescript-eslint/no-unused-vars": ["error", { argsIgnorePattern: "^_" }] + } }; diff --git a/login/packages/zitadel-client/.gitignore b/packages/zitadel-client/.gitignore similarity index 100% rename from login/packages/zitadel-client/.gitignore rename to packages/zitadel-client/.gitignore diff --git a/login/packages/zitadel-client/CHANGELOG.md b/packages/zitadel-client/CHANGELOG.md similarity index 100% rename from login/packages/zitadel-client/CHANGELOG.md rename to packages/zitadel-client/CHANGELOG.md diff --git a/login/packages/zitadel-client/README.md b/packages/zitadel-client/README.md similarity index 100% rename from login/packages/zitadel-client/README.md rename to packages/zitadel-client/README.md diff --git a/packages/zitadel-client/knip.json b/packages/zitadel-client/knip.json new file mode 100644 index 0000000000..571d5f9dac --- /dev/null +++ b/packages/zitadel-client/knip.json @@ -0,0 +1,6 @@ +{ + "$schema": "https://unpkg.com/knip@5/schema.json", + "ignoreDependencies": [ + "@zitadel/proto" + ] +} \ No newline at end of file diff --git a/login/packages/zitadel-client/package.json b/packages/zitadel-client/package.json similarity index 80% rename from login/packages/zitadel-client/package.json rename to packages/zitadel-client/package.json index 3f140ad31a..0a9684b8c3 100644 --- a/login/packages/zitadel-client/package.json +++ b/packages/zitadel-client/package.json @@ -43,12 +43,11 @@ ], "sideEffects": false, "scripts": { - "build": "pnpm exec tsup", - "build:client:standalone": "pnpm build", - "test": "pnpm test:unit", - "test:unit": "pnpm exec vitest", - "test:unit:standalone": "pnpm test:unit", - "lint": "eslint \"src/**/*.ts*\"", + "build": "tsup", + "lint": "pnpm run '/^lint:check:.*$/'", + "lint:check:eslint": "eslint 'src/**/*.ts*'", + "lint:check:knip": "knip", + "test:unit": "vitest --run", "clean": "rm -rf .turbo && rm -rf node_modules && rm -rf dist" }, "dependencies": { @@ -56,15 +55,19 @@ "@connectrpc/connect": "^2.0.0", "@connectrpc/connect-node": "^2.0.0", "@connectrpc/connect-web": "^2.0.0", - "jose": "^5.3.0", - "@zitadel/proto": "workspace:*" + "@zitadel/proto": "latest", + "jose": "^5.3.0" }, "devDependencies": { "@bufbuild/protocompile": "^0.0.1", "@bufbuild/buf": "^1.53.0", + "@types/node": "^24.0.14", "@typescript-eslint/eslint-plugin": "^8.15.0", "@typescript-eslint/parser": "^8.15.0", "eslint": "^8.57.0", - "tsup": "^8.4.0" + "knip": "^5.61.3", + "tsup": "^8.4.0", + "typescript": "^5.8.3", + "vitest": "^2.0.0" } } diff --git a/login/packages/zitadel-client/src/helpers.ts b/packages/zitadel-client/src/helpers.ts similarity index 100% rename from login/packages/zitadel-client/src/helpers.ts rename to packages/zitadel-client/src/helpers.ts diff --git a/login/packages/zitadel-client/src/index.ts b/packages/zitadel-client/src/index.ts similarity index 100% rename from login/packages/zitadel-client/src/index.ts rename to packages/zitadel-client/src/index.ts diff --git a/login/packages/zitadel-client/src/interceptors.test.ts b/packages/zitadel-client/src/interceptors.test.ts similarity index 91% rename from login/packages/zitadel-client/src/interceptors.test.ts rename to packages/zitadel-client/src/interceptors.test.ts index a5100f866a..b43368ff19 100644 --- a/login/packages/zitadel-client/src/interceptors.test.ts +++ b/packages/zitadel-client/src/interceptors.test.ts @@ -24,7 +24,7 @@ describe("NewAuthorizationBearerInterceptor", () => { }; test("injects the authorization token", async () => { - const handler = vitest.fn((request: Int32Value, context: HandlerContext) => { + const handler = vitest.fn((request: Int32Value, _context: HandlerContext) => { return { value: request.value.toString() }; }); @@ -42,7 +42,7 @@ describe("NewAuthorizationBearerInterceptor", () => { }); test("do not overwrite the previous authorization token", async () => { - const handler = vitest.fn((request: Int32Value, context: HandlerContext) => { + const handler = vitest.fn((request: Int32Value, _context: HandlerContext) => { return { value: request.value.toString() }; }); diff --git a/login/packages/zitadel-client/src/interceptors.ts b/packages/zitadel-client/src/interceptors.ts similarity index 100% rename from login/packages/zitadel-client/src/interceptors.ts rename to packages/zitadel-client/src/interceptors.ts diff --git a/login/packages/zitadel-client/src/node.ts b/packages/zitadel-client/src/node.ts similarity index 100% rename from login/packages/zitadel-client/src/node.ts rename to packages/zitadel-client/src/node.ts diff --git a/login/packages/zitadel-client/src/v1.ts b/packages/zitadel-client/src/v1.ts similarity index 100% rename from login/packages/zitadel-client/src/v1.ts rename to packages/zitadel-client/src/v1.ts diff --git a/login/packages/zitadel-client/src/v2.ts b/packages/zitadel-client/src/v2.ts similarity index 100% rename from login/packages/zitadel-client/src/v2.ts rename to packages/zitadel-client/src/v2.ts diff --git a/login/packages/zitadel-client/src/v3alpha.ts b/packages/zitadel-client/src/v3alpha.ts similarity index 100% rename from login/packages/zitadel-client/src/v3alpha.ts rename to packages/zitadel-client/src/v3alpha.ts diff --git a/login/packages/zitadel-client/src/web.ts b/packages/zitadel-client/src/web.ts similarity index 100% rename from login/packages/zitadel-client/src/web.ts rename to packages/zitadel-client/src/web.ts diff --git a/login/packages/zitadel-client/tsconfig.json b/packages/zitadel-client/tsconfig.json similarity index 100% rename from login/packages/zitadel-client/tsconfig.json rename to packages/zitadel-client/tsconfig.json diff --git a/login/packages/zitadel-client/tsup.config.ts b/packages/zitadel-client/tsup.config.ts similarity index 100% rename from login/packages/zitadel-client/tsup.config.ts rename to packages/zitadel-client/tsup.config.ts diff --git a/login/packages/zitadel-client/turbo.json b/packages/zitadel-client/turbo.json similarity index 66% rename from login/packages/zitadel-client/turbo.json rename to packages/zitadel-client/turbo.json index b54d25e2ba..9085c5194e 100644 --- a/login/packages/zitadel-client/turbo.json +++ b/packages/zitadel-client/turbo.json @@ -4,9 +4,6 @@ "build": { "outputs": ["dist/**"], "dependsOn": ["@zitadel/proto#generate"] - }, - "build:client:standalone": { - "outputs": ["dist/**"] } } } diff --git a/login/packages/zitadel-proto/.gitignore b/packages/zitadel-proto/.gitignore similarity index 100% rename from login/packages/zitadel-proto/.gitignore rename to packages/zitadel-proto/.gitignore diff --git a/login/packages/zitadel-proto/CHANGELOG.md b/packages/zitadel-proto/CHANGELOG.md similarity index 100% rename from login/packages/zitadel-proto/CHANGELOG.md rename to packages/zitadel-proto/CHANGELOG.md diff --git a/login/packages/zitadel-proto/README.md b/packages/zitadel-proto/README.md similarity index 100% rename from login/packages/zitadel-proto/README.md rename to packages/zitadel-proto/README.md diff --git a/login/packages/zitadel-proto/buf.gen.yaml b/packages/zitadel-proto/buf.gen.yaml similarity index 100% rename from login/packages/zitadel-proto/buf.gen.yaml rename to packages/zitadel-proto/buf.gen.yaml diff --git a/login/packages/zitadel-proto/package.json b/packages/zitadel-proto/package.json similarity index 85% rename from login/packages/zitadel-proto/package.json rename to packages/zitadel-proto/package.json index db0aca7035..639b414792 100644 --- a/login/packages/zitadel-proto/package.json +++ b/packages/zitadel-proto/package.json @@ -14,7 +14,7 @@ ], "sideEffects": false, "scripts": { - "generate": "pnpm exec buf generate ../../../proto --path ../../../proto/zitadel", + "generate": "buf generate ../../proto --path ../../proto/zitadel", "clean": "rm -rf zitadel .turbo node_modules google protoc-gen-openapiv2 validate" }, "dependencies": { diff --git a/login/packages/zitadel-proto/turbo.json b/packages/zitadel-proto/turbo.json similarity index 100% rename from login/packages/zitadel-proto/turbo.json rename to packages/zitadel-proto/turbo.json diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f7a9bf2452..af5661494b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -14,415 +14,16 @@ importers: .: devDependencies: '@changesets/cli': - specifier: ^2.29.2 + specifier: ^2.29.5 version: 2.29.5 - '@eslint/compat': - specifier: ^1.3.1 - version: 1.3.1(eslint@9.30.1(jiti@1.21.7)) - '@eslint/eslintrc': - specifier: ^3.3.1 - version: 3.3.1 - '@vitejs/plugin-react': - specifier: ^4.4.1 - version: 4.6.0(vite@7.0.4(@types/node@22.16.4)(jiti@1.21.7)(less@4.1.3)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0)) - axios: - specifier: ^1.8.4 - version: 1.10.0(debug@4.4.1) - dotenv: - specifier: ^16.5.0 - version: 16.6.1 - dotenv-cli: - specifier: ^8.0.0 - version: 8.0.0 - eslint: - specifier: 9.30.1 - version: 9.30.1(jiti@1.21.7) - prettier: - specifier: ^3.5.3 - version: 3.6.2 - prettier-plugin-organize-imports: - specifier: ^4.1.0 - version: 4.1.0(prettier@3.6.2)(typescript@5.8.3) - tsup: - specifier: ^8.4.0 - version: 8.5.0(@swc/core@1.12.14)(jiti@1.21.7)(postcss@8.5.6)(typescript@5.8.3)(yaml@2.8.0) + '@devcontainers/cli': + specifier: ^0.80.0 + version: 0.80.0 turbo: - specifier: 2.5.0 - version: 2.5.0 - typescript: - specifier: ^5.8.3 - version: 5.8.3 - vite-tsconfig-paths: - specifier: ^5.1.4 - version: 5.1.4(typescript@5.8.3)(vite@7.0.4(@types/node@22.16.4)(jiti@1.21.7)(less@4.1.3)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0)) - vitest: - specifier: ^3.1.2 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.16.4)(jiti@1.21.7)(jsdom@26.1.0)(less@4.1.3)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0) + specifier: 2.5.5 + version: 2.5.5 - console: - dependencies: - '@angular/animations': - specifier: ^16.2.12 - version: 16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3)) - '@angular/cdk': - specifier: ^16.2.14 - version: 16.2.14(@angular/common@16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3))(rxjs@7.8.2))(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3))(rxjs@7.8.2) - '@angular/common': - specifier: ^16.2.12 - version: 16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3))(rxjs@7.8.2) - '@angular/compiler': - specifier: ^16.2.12 - version: 16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3)) - '@angular/core': - specifier: ^16.2.12 - version: 16.2.12(rxjs@7.8.2)(zone.js@0.13.3) - '@angular/forms': - specifier: ^16.2.12 - version: 16.2.12(@angular/common@16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3))(rxjs@7.8.2))(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3))(@angular/platform-browser@16.2.12(@angular/animations@16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3)))(@angular/common@16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3))(rxjs@7.8.2))(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3)))(rxjs@7.8.2) - '@angular/material': - specifier: ^16.2.14 - version: 16.2.14(@angular/animations@16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3)))(@angular/cdk@16.2.14(@angular/common@16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3))(rxjs@7.8.2))(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3))(rxjs@7.8.2))(@angular/common@16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3))(rxjs@7.8.2))(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3))(@angular/forms@16.2.12(@angular/common@16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3))(rxjs@7.8.2))(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3))(@angular/platform-browser@16.2.12(@angular/animations@16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3)))(@angular/common@16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3))(rxjs@7.8.2))(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3)))(rxjs@7.8.2))(@angular/platform-browser@16.2.12(@angular/animations@16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3)))(@angular/common@16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3))(rxjs@7.8.2))(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3)))(rxjs@7.8.2) - '@angular/material-moment-adapter': - specifier: ^16.2.14 - version: 16.2.14(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3))(@angular/material@16.2.14(@angular/animations@16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3)))(@angular/cdk@16.2.14(@angular/common@16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3))(rxjs@7.8.2))(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3))(rxjs@7.8.2))(@angular/common@16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3))(rxjs@7.8.2))(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3))(@angular/forms@16.2.12(@angular/common@16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3))(rxjs@7.8.2))(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3))(@angular/platform-browser@16.2.12(@angular/animations@16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3)))(@angular/common@16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3))(rxjs@7.8.2))(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3)))(rxjs@7.8.2))(@angular/platform-browser@16.2.12(@angular/animations@16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3)))(@angular/common@16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3))(rxjs@7.8.2))(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3)))(rxjs@7.8.2))(moment@2.30.1) - '@angular/platform-browser': - specifier: ^16.2.12 - version: 16.2.12(@angular/animations@16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3)))(@angular/common@16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3))(rxjs@7.8.2))(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3)) - '@angular/platform-browser-dynamic': - specifier: ^16.2.12 - version: 16.2.12(@angular/common@16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3))(rxjs@7.8.2))(@angular/compiler@16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3)))(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3))(@angular/platform-browser@16.2.12(@angular/animations@16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3)))(@angular/common@16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3))(rxjs@7.8.2))(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3))) - '@angular/router': - specifier: ^16.2.12 - version: 16.2.12(@angular/common@16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3))(rxjs@7.8.2))(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3))(@angular/platform-browser@16.2.12(@angular/animations@16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3)))(@angular/common@16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3))(rxjs@7.8.2))(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3)))(rxjs@7.8.2) - '@angular/service-worker': - specifier: ^16.2.12 - version: 16.2.12(@angular/common@16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3))(rxjs@7.8.2))(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3)) - '@bufbuild/protobuf': - specifier: ^2.2.2 - version: 2.6.0 - '@connectrpc/connect': - specifier: ^2.0.0 - version: 2.0.2(@bufbuild/protobuf@2.6.0) - '@connectrpc/connect-web': - specifier: ^2.0.0 - version: 2.0.2(@bufbuild/protobuf@2.6.0)(@connectrpc/connect@2.0.2(@bufbuild/protobuf@2.6.0)) - '@ctrl/ngx-codemirror': - specifier: ^6.1.0 - version: 6.1.0(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3))(@angular/forms@16.2.12(@angular/common@16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3))(rxjs@7.8.2))(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3))(@angular/platform-browser@16.2.12(@angular/animations@16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3)))(@angular/common@16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3))(rxjs@7.8.2))(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3)))(rxjs@7.8.2))(codemirror@5.65.19) - '@fortawesome/angular-fontawesome': - specifier: ^0.13.0 - version: 0.13.0(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3))(@fortawesome/fontawesome-svg-core@6.7.2) - '@fortawesome/fontawesome-svg-core': - specifier: ^6.7.2 - version: 6.7.2 - '@fortawesome/free-brands-svg-icons': - specifier: ^6.7.2 - version: 6.7.2 - '@ng-icons/core': - specifier: ^25.0.0 - version: 25.6.1 - '@ng-icons/heroicons': - specifier: ^25.0.0 - version: 25.6.1 - '@ngx-translate/core': - specifier: ^15.0.0 - version: 15.0.0(@angular/common@16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3))(rxjs@7.8.2))(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3))(rxjs@7.8.2) - '@tanstack/angular-query-experimental': - specifier: ^5.75.4 - version: 5.83.0(@angular/common@16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3))(rxjs@7.8.2))(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3)) - '@zitadel/client': - specifier: workspace:* - version: link:../login/packages/zitadel-client - '@zitadel/proto': - specifier: workspace:* - version: link:../login/packages/zitadel-proto - angular-oauth2-oidc: - specifier: ^15.0.1 - version: 15.0.1(@angular/common@16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3))(rxjs@7.8.2))(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3)) - angularx-qrcode: - specifier: ^16.0.2 - version: 16.0.2(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3)) - buffer: - specifier: ^6.0.3 - version: 6.0.3 - codemirror: - specifier: ^5.65.19 - version: 5.65.19 - file-saver: - specifier: ^2.0.5 - version: 2.0.5 - flag-icons: - specifier: ^7.3.2 - version: 7.5.0 - google-protobuf: - specifier: ^3.21.4 - version: 3.21.4 - grpc-web: - specifier: ^1.5.0 - version: 1.5.0 - i18n-iso-countries: - specifier: ^7.14.0 - version: 7.14.0 - libphonenumber-js: - specifier: ^1.12.6 - version: 1.12.10 - material-design-icons-iconfont: - specifier: ^6.7.0 - version: 6.7.0 - moment: - specifier: ^2.30.1 - version: 2.30.1 - ngx-color: - specifier: ^9.0.0 - version: 9.0.0(@angular/common@16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3))(rxjs@7.8.2))(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3)) - opentype.js: - specifier: ^1.3.4 - version: 1.3.4 - posthog-js: - specifier: ^1.232.7 - version: 1.257.0 - rxjs: - specifier: ^7.8.2 - version: 7.8.2 - tinycolor2: - specifier: ^1.6.0 - version: 1.6.0 - tslib: - specifier: ^2.7.0 - version: 2.8.1 - uuid: - specifier: ^10.0.0 - version: 10.0.0 - zone.js: - specifier: ~0.13.3 - version: 0.13.3 - devDependencies: - '@angular-devkit/build-angular': - specifier: ^16.2.2 - version: 16.2.16(@angular/compiler-cli@16.2.12(@angular/compiler@16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3)))(typescript@5.1.6))(@angular/service-worker@16.2.12(@angular/common@16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3))(rxjs@7.8.2))(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3)))(@swc/core@1.12.14)(@types/node@22.16.4)(html-webpack-plugin@5.6.3(webpack@5.94.0(@swc/core@1.12.14)(esbuild@0.18.17)))(karma@6.4.4)(lightningcss@1.30.1)(tailwindcss@3.4.14)(typescript@5.1.6) - '@angular-eslint/builder': - specifier: 18.3.0 - version: 18.3.0(eslint@8.57.1)(typescript@5.1.6) - '@angular-eslint/eslint-plugin': - specifier: 18.0.0 - version: 18.0.0(eslint@8.57.1)(typescript@5.1.6) - '@angular-eslint/eslint-plugin-template': - specifier: 18.0.0 - version: 18.0.0(eslint@8.57.1)(typescript@5.1.6) - '@angular-eslint/schematics': - specifier: 16.2.0 - version: 16.2.0(@angular/cli@16.2.16(chokidar@3.5.3))(@swc/core@1.12.14)(eslint@8.57.1)(typescript@5.1.6) - '@angular-eslint/template-parser': - specifier: 18.3.0 - version: 18.3.0(eslint@8.57.1)(typescript@5.1.6) - '@angular/cli': - specifier: ^16.2.15 - version: 16.2.16(chokidar@3.5.3) - '@angular/compiler-cli': - specifier: ^16.2.5 - version: 16.2.12(@angular/compiler@16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3)))(typescript@5.1.6) - '@angular/language-service': - specifier: ^18.2.4 - version: 18.2.13 - '@bufbuild/buf': - specifier: ^1.41.0 - version: 1.55.1 - '@netlify/framework-info': - specifier: ^9.8.13 - version: 9.9.3 - '@types/file-saver': - specifier: ^2.0.7 - version: 2.0.7 - '@types/google-protobuf': - specifier: ^3.15.3 - version: 3.15.12 - '@types/jasmine': - specifier: ~5.1.4 - version: 5.1.8 - '@types/jasminewd2': - specifier: ~2.0.13 - version: 2.0.13 - '@types/jsonwebtoken': - specifier: ^9.0.6 - version: 9.0.10 - '@types/node': - specifier: ^22.5.5 - version: 22.16.4 - '@types/opentype.js': - specifier: ^1.3.8 - version: 1.3.8 - '@types/qrcode': - specifier: ^1.5.2 - version: 1.5.5 - '@types/uuid': - specifier: ^10.0.0 - version: 10.0.0 - '@typescript-eslint/eslint-plugin': - specifier: ^5.62.0 - version: 5.62.0(@typescript-eslint/parser@8.37.0(eslint@8.57.1)(typescript@5.1.6))(eslint@8.57.1)(typescript@5.1.6) - '@typescript-eslint/parser': - specifier: ^8.35.1 - version: 8.37.0(eslint@8.57.1)(typescript@5.1.6) - eslint: - specifier: ^8.57.1 - version: 8.57.1 - jasmine-core: - specifier: ~5.6.0 - version: 5.6.0 - jasmine-spec-reporter: - specifier: ~7.0.0 - version: 7.0.0 - karma: - specifier: ^6.4.4 - version: 6.4.4 - karma-chrome-launcher: - specifier: ^3.2.0 - version: 3.2.0 - karma-coverage: - specifier: ^2.2.1 - version: 2.2.1 - karma-coverage-istanbul-reporter: - specifier: ^3.0.3 - version: 3.0.3 - karma-jasmine: - specifier: ^5.1.0 - version: 5.1.0(karma@6.4.4) - karma-jasmine-html-reporter: - specifier: ^2.1.0 - version: 2.1.0(jasmine-core@5.6.0)(karma-jasmine@5.1.0(karma@6.4.4))(karma@6.4.4) - prettier: - specifier: ^3.5.3 - version: 3.6.2 - prettier-plugin-organize-imports: - specifier: ^4.1.0 - version: 4.1.0(prettier@3.6.2)(typescript@5.1.6) - typescript: - specifier: '5.1' - version: 5.1.6 - - docs: - dependencies: - '@bufbuild/buf': - specifier: ^1.14.0 - version: 1.55.1 - '@docusaurus/core': - specifier: ^3.8.1 - version: 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17)(esbuild@0.25.6))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.8(@swc/helpers@0.5.17))(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(lightningcss@1.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) - '@docusaurus/faster': - specifier: ^3.8.1 - version: 3.8.1(@docusaurus/types@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17)(esbuild@0.25.6) - '@docusaurus/preset-classic': - specifier: ^3.8.1 - version: 3.8.1(@algolia/client-search@5.33.0)(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17)(esbuild@0.25.6))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.8(@swc/helpers@0.5.17))(@swc/core@1.12.14(@swc/helpers@0.5.17))(@types/react@19.1.2)(acorn@8.15.0)(esbuild@0.25.6)(lightningcss@1.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.3)(typescript@5.8.3) - '@docusaurus/theme-mermaid': - specifier: ^3.8.1 - version: 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17)(esbuild@0.25.6))(@docusaurus/plugin-content-docs@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17)(esbuild@0.25.6))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.8(@swc/helpers@0.5.17))(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(lightningcss@1.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.8(@swc/helpers@0.5.17))(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(lightningcss@1.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) - '@docusaurus/theme-search-algolia': - specifier: ^3.8.1 - version: 3.8.1(@algolia/client-search@5.33.0)(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17)(esbuild@0.25.6))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.8(@swc/helpers@0.5.17))(@swc/core@1.12.14(@swc/helpers@0.5.17))(@types/react@19.1.2)(acorn@8.15.0)(esbuild@0.25.6)(lightningcss@1.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.3)(typescript@5.8.3) - '@headlessui/react': - specifier: ^1.7.4 - version: 1.7.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@heroicons/react': - specifier: ^2.0.13 - version: 2.1.3(react@18.3.1) - '@inkeep/cxkit-docusaurus': - specifier: ^0.5.89 - version: 0.5.94(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(zod@3.23.8) - '@signalwire/docusaurus-plugin-llms-txt': - specifier: ^1.2.0 - version: 1.2.1(@docusaurus/core@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17)(esbuild@0.25.6))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.8(@swc/helpers@0.5.17))(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(lightningcss@1.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3)) - autoprefixer: - specifier: ^10.4.13 - version: 10.4.21(postcss@8.5.3) - clsx: - specifier: ^1.2.1 - version: 1.2.1 - docusaurus-plugin-image-zoom: - specifier: ^3.0.1 - version: 3.0.1(@docusaurus/theme-classic@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17)(esbuild@0.25.6))(@rspack/core@1.4.8(@swc/helpers@0.5.17))(@swc/core@1.12.14(@swc/helpers@0.5.17))(@types/react@19.1.2)(acorn@8.15.0)(esbuild@0.25.6)(lightningcss@1.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3)) - docusaurus-plugin-openapi-docs: - specifier: 4.4.0 - version: 4.4.0(@docusaurus/plugin-content-docs@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17)(esbuild@0.25.6))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.8(@swc/helpers@0.5.17))(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(lightningcss@1.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3))(@docusaurus/utils-validation@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@docusaurus/utils@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(encoding@0.1.13)(react@18.3.1) - docusaurus-theme-github-codeblock: - specifier: ^2.0.2 - version: 2.0.2(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - docusaurus-theme-openapi-docs: - specifier: 4.4.0 - version: 4.4.0(@docusaurus/theme-common@3.8.1(@docusaurus/plugin-content-docs@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17)(esbuild@0.25.6))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.8(@swc/helpers@0.5.17))(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(lightningcss@1.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3))(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@rspack/core@1.4.8(@swc/helpers@0.5.17))(@types/react@19.1.2)(docusaurus-plugin-openapi-docs@4.4.0(@docusaurus/plugin-content-docs@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17)(esbuild@0.25.6))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.8(@swc/helpers@0.5.17))(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(lightningcss@1.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3))(@docusaurus/utils-validation@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@docusaurus/utils@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(encoding@0.1.13)(react@18.3.1))(docusaurus-plugin-sass@0.2.6(@docusaurus/core@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17)(esbuild@0.25.6))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.8(@swc/helpers@0.5.17))(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(lightningcss@1.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3))(@rspack/core@1.4.8(@swc/helpers@0.5.17))(sass@1.89.2)(webpack@5.100.2(@swc/core@1.12.14(@swc/helpers@0.5.17))(esbuild@0.25.6)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.100.2(@swc/core@1.12.14(@swc/helpers@0.5.17))(esbuild@0.25.6)) - mdx-mermaid: - specifier: ^2.0.0 - version: 2.0.3(mermaid@11.8.1)(react@18.3.1)(typescript@5.8.3)(unist-util-visit@5.0.0) - postcss: - specifier: ^8.4.31 - version: 8.5.3 - raw-loader: - specifier: ^4.0.2 - version: 4.0.2(webpack@5.100.2(@swc/core@1.12.14(@swc/helpers@0.5.17))(esbuild@0.25.6)) - react: - specifier: ^18.2.0 - version: 18.3.1 - react-copy-to-clipboard: - specifier: ^5.1.0 - version: 5.1.0(react@18.3.1) - react-dom: - specifier: ^18.2.0 - version: 18.3.1(react@18.3.1) - react-google-charts: - specifier: ^5.2.1 - version: 5.2.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - react-player: - specifier: ^2.15.1 - version: 2.16.1(react@18.3.1) - devDependencies: - '@docusaurus/module-type-aliases': - specifier: ^3.8.1 - version: 3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/types': - specifier: ^3.8.1 - version: 3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - tailwindcss: - specifier: ^3.2.4 - version: 3.4.14 - - e2e: - dependencies: - '@types/pg': - specifier: ^8.11.6 - version: 8.15.4 - cypress-wait-until: - specifier: ^3.0.2 - version: 3.0.2 - jsonwebtoken: - specifier: ^9.0.2 - version: 9.0.2 - mochawesome: - specifier: ^7.1.3 - version: 7.1.3(mocha@11.7.1) - pg: - specifier: ^8.12.0 - version: 8.16.3 - prettier: - specifier: ^3.3.3 - version: 3.6.2 - typescript: - specifier: ^5.5.4 - version: 5.8.3 - uuid: - specifier: ^10.0.0 - version: 10.0.0 - wait-on: - specifier: ^7.2.0 - version: 7.2.0 - devDependencies: - '@types/node': - specifier: ^22.3.0 - version: 22.16.4 - cypress: - specifier: ^13.13.3 - version: 13.17.0 - - login/apps/login: + apps/login: dependencies: '@headlessui/react': specifier: ^2.1.9 @@ -430,6 +31,9 @@ importers: '@heroicons/react': specifier: 2.1.3 version: 2.1.3(react@19.1.0) + '@radix-ui/react-tooltip': + specifier: ^1.2.7 + version: 1.2.7(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) '@tailwindcss/forms': specifier: 0.5.7 version: 0.5.7(tailwindcss@3.4.14) @@ -494,93 +98,6 @@ importers: '@bufbuild/buf': specifier: ^1.53.0 version: 1.55.1 - '@testing-library/jest-dom': - specifier: ^6.6.3 - version: 6.6.3 - '@testing-library/react': - specifier: ^16.3.0 - version: 16.3.0(@testing-library/dom@10.4.0)(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@types/ms': - specifier: 2.1.0 - version: 2.1.0 - '@types/node': - specifier: ^22.14.1 - version: 22.16.4 - '@types/react': - specifier: 19.1.2 - version: 19.1.2 - '@types/react-dom': - specifier: 19.1.2 - version: 19.1.2(@types/react@19.1.2) - '@types/tinycolor2': - specifier: 1.4.3 - version: 1.4.3 - '@types/uuid': - specifier: ^10.0.0 - version: 10.0.0 - '@typescript-eslint/eslint-plugin': - specifier: ^7.0.0 - version: 7.18.0(@typescript-eslint/parser@8.37.0(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1)(typescript@5.8.3) - '@typescript-eslint/parser': - specifier: ^8.35.1 - version: 8.37.0(eslint@8.57.1)(typescript@5.8.3) - '@vercel/git-hooks': - specifier: 1.0.0 - version: 1.0.0 - autoprefixer: - specifier: 10.4.21 - version: 10.4.21(postcss@8.5.3) - eslint: - specifier: ^8.57.0 - version: 8.57.1 - eslint-config-next: - specifier: 15.4.0-canary.86 - version: 15.4.0-canary.86(eslint@8.57.1)(typescript@5.8.3) - eslint-config-prettier: - specifier: ^9.1.0 - version: 9.1.0(eslint@8.57.1) - grpc-tools: - specifier: 1.13.0 - version: 1.13.0(encoding@0.1.13) - jsdom: - specifier: ^26.1.0 - version: 26.1.0 - lint-staged: - specifier: 15.5.1 - version: 15.5.1 - make-dir-cli: - specifier: 4.0.0 - version: 4.0.0 - postcss: - specifier: 8.5.3 - version: 8.5.3 - prettier: - specifier: ^3.2.5 - version: 3.6.2 - prettier-plugin-organize-imports: - specifier: ^3.2.0 - version: 3.2.4(prettier@3.6.2)(typescript@5.8.3) - prettier-plugin-tailwindcss: - specifier: 0.6.11 - version: 0.6.11(prettier-plugin-organize-imports@3.2.4(prettier@3.6.2)(typescript@5.8.3))(prettier@3.6.2) - sass: - specifier: ^1.87.0 - version: 1.89.2 - tailwindcss: - specifier: 3.4.14 - version: 3.4.14 - ts-proto: - specifier: ^2.7.0 - version: 2.7.5 - typescript: - specifier: ^5.8.3 - version: 5.8.3 - vitest: - specifier: ^2.0.0 - version: 2.1.9(@types/node@22.16.4)(jsdom@26.1.0)(less@4.1.3)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1) - - login/apps/login-test-acceptance: - devDependencies: '@faker-js/faker': specifier: ^9.7.0 version: 9.9.0 @@ -596,51 +113,495 @@ importers: '@playwright/test': specifier: ^1.52.0 version: 1.54.1 - gaxios: - specifier: ^7.1.0 - version: 7.1.1 - typescript: - specifier: ^5.8.3 - version: 5.8.3 - - login/apps/login-test-integration: - devDependencies: + '@testing-library/jest-dom': + specifier: ^6.6.3 + version: 6.6.3 + '@testing-library/react': + specifier: ^16.3.0 + version: 16.3.0(@testing-library/dom@10.4.0)(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@types/ms': + specifier: 2.1.0 + version: 2.1.0 '@types/node': specifier: ^22.14.1 - version: 22.16.4 + version: 22.16.5 + '@types/react': + specifier: 19.1.2 + version: 19.1.2 + '@types/react-dom': + specifier: 19.1.2 + version: 19.1.2(@types/react@19.1.2) + '@types/tinycolor2': + specifier: 1.4.3 + version: 1.4.3 + '@types/uuid': + specifier: ^10.0.0 + version: 10.0.0 + '@typescript-eslint/eslint-plugin': + specifier: ^7.0.0 + version: 7.18.0(@typescript-eslint/parser@8.38.0(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1)(typescript@5.8.3) + '@typescript-eslint/parser': + specifier: ^8.35.1 + version: 8.38.0(eslint@8.57.1)(typescript@5.8.3) + '@vercel/git-hooks': + specifier: 1.0.0 + version: 1.0.0 + '@vitejs/plugin-react': + specifier: ^4.4.1 + version: 4.7.0(vite@5.4.19(@types/node@22.16.5)(less@4.1.3)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)) + autoprefixer: + specifier: 10.4.21 + version: 10.4.21(postcss@8.5.3) concurrently: specifier: ^9.1.2 version: 9.2.0 cypress: - specifier: ^14.3.2 - version: 14.5.1 + specifier: ^14.5.2 + version: 14.5.2 + dotenv-cli: + specifier: ^8.0.0 + version: 8.0.0 env-cmd: specifier: ^10.0.0 version: 10.1.0 + eslint: + specifier: ^8.57.0 + version: 8.57.1 + eslint-config-next: + specifier: 15.4.0-canary.86 + version: 15.4.0-canary.86(eslint@8.57.1)(typescript@5.8.3) + eslint-config-prettier: + specifier: ^9.1.0 + version: 9.1.2(eslint@8.57.1) + gaxios: + specifier: ^7.1.0 + version: 7.1.1 + grpc-tools: + specifier: 1.13.0 + version: 1.13.0(encoding@0.1.13) + jsdom: + specifier: ^26.1.0 + version: 26.1.0 + lint-staged: + specifier: 15.5.1 + version: 15.5.1 + make-dir-cli: + specifier: 4.0.0 + version: 4.0.0 nodemon: specifier: ^3.1.9 version: 3.1.10 + postcss: + specifier: 8.5.3 + version: 8.5.3 + prettier: + specifier: ^3.2.5 + version: 3.6.2 + prettier-plugin-organize-imports: + specifier: ^3.2.0 + version: 3.2.4(prettier@3.6.2)(typescript@5.8.3) + prettier-plugin-tailwindcss: + specifier: 0.6.11 + version: 0.6.11(prettier-plugin-organize-imports@3.2.4(prettier@3.6.2)(typescript@5.8.3))(prettier@3.6.2) + sass: + specifier: ^1.87.0 + version: 1.89.2 start-server-and-test: specifier: ^2.0.11 version: 2.0.12 + tailwindcss: + specifier: 3.4.14 + version: 3.4.14 + ts-proto: + specifier: ^2.7.0 + version: 2.7.5 typescript: specifier: ^5.8.3 version: 5.8.3 + vite-tsconfig-paths: + specifier: ^5.1.4 + version: 5.1.4(typescript@5.8.3)(vite@5.4.19(@types/node@22.16.5)(less@4.1.3)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)) + vitest: + specifier: ^2.0.0 + version: 2.1.9(@types/node@22.16.5)(jsdom@26.1.0)(less@4.1.3)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1) - login/packages/zitadel-client: + console: + dependencies: + '@angular/animations': + specifier: ^16.2.12 + version: 16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3)) + '@angular/cdk': + specifier: ^16.2.14 + version: 16.2.14(@angular/common@16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3))(rxjs@7.8.2))(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3))(rxjs@7.8.2) + '@angular/common': + specifier: ^16.2.12 + version: 16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3))(rxjs@7.8.2) + '@angular/compiler': + specifier: ^16.2.12 + version: 16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3)) + '@angular/core': + specifier: ^16.2.12 + version: 16.2.12(rxjs@7.8.2)(zone.js@0.13.3) + '@angular/forms': + specifier: ^16.2.12 + version: 16.2.12(@angular/common@16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3))(rxjs@7.8.2))(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3))(@angular/platform-browser@16.2.12(@angular/animations@16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3)))(@angular/common@16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3))(rxjs@7.8.2))(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3)))(rxjs@7.8.2) + '@angular/material': + specifier: ^16.2.14 + version: 16.2.14(@angular/animations@16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3)))(@angular/cdk@16.2.14(@angular/common@16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3))(rxjs@7.8.2))(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3))(rxjs@7.8.2))(@angular/common@16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3))(rxjs@7.8.2))(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3))(@angular/forms@16.2.12(@angular/common@16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3))(rxjs@7.8.2))(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3))(@angular/platform-browser@16.2.12(@angular/animations@16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3)))(@angular/common@16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3))(rxjs@7.8.2))(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3)))(rxjs@7.8.2))(@angular/platform-browser@16.2.12(@angular/animations@16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3)))(@angular/common@16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3))(rxjs@7.8.2))(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3)))(rxjs@7.8.2) + '@angular/material-moment-adapter': + specifier: ^16.2.14 + version: 16.2.14(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3))(@angular/material@16.2.14(@angular/animations@16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3)))(@angular/cdk@16.2.14(@angular/common@16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3))(rxjs@7.8.2))(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3))(rxjs@7.8.2))(@angular/common@16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3))(rxjs@7.8.2))(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3))(@angular/forms@16.2.12(@angular/common@16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3))(rxjs@7.8.2))(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3))(@angular/platform-browser@16.2.12(@angular/animations@16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3)))(@angular/common@16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3))(rxjs@7.8.2))(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3)))(rxjs@7.8.2))(@angular/platform-browser@16.2.12(@angular/animations@16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3)))(@angular/common@16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3))(rxjs@7.8.2))(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3)))(rxjs@7.8.2))(moment@2.30.1) + '@angular/platform-browser': + specifier: ^16.2.12 + version: 16.2.12(@angular/animations@16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3)))(@angular/common@16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3))(rxjs@7.8.2))(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3)) + '@angular/platform-browser-dynamic': + specifier: ^16.2.12 + version: 16.2.12(@angular/common@16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3))(rxjs@7.8.2))(@angular/compiler@16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3)))(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3))(@angular/platform-browser@16.2.12(@angular/animations@16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3)))(@angular/common@16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3))(rxjs@7.8.2))(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3))) + '@angular/router': + specifier: ^16.2.12 + version: 16.2.12(@angular/common@16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3))(rxjs@7.8.2))(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3))(@angular/platform-browser@16.2.12(@angular/animations@16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3)))(@angular/common@16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3))(rxjs@7.8.2))(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3)))(rxjs@7.8.2) + '@angular/service-worker': + specifier: ^16.2.12 + version: 16.2.12(@angular/common@16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3))(rxjs@7.8.2))(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3)) + '@bufbuild/protobuf': + specifier: ^2.2.2 + version: 2.6.1 + '@connectrpc/connect': + specifier: ^2.0.0 + version: 2.0.2(@bufbuild/protobuf@2.6.1) + '@connectrpc/connect-web': + specifier: ^2.0.0 + version: 2.0.2(@bufbuild/protobuf@2.6.1)(@connectrpc/connect@2.0.2(@bufbuild/protobuf@2.6.1)) + '@ctrl/ngx-codemirror': + specifier: ^6.1.0 + version: 6.1.0(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3))(@angular/forms@16.2.12(@angular/common@16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3))(rxjs@7.8.2))(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3))(@angular/platform-browser@16.2.12(@angular/animations@16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3)))(@angular/common@16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3))(rxjs@7.8.2))(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3)))(rxjs@7.8.2))(codemirror@5.65.19) + '@fortawesome/angular-fontawesome': + specifier: ^0.13.0 + version: 0.13.0(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3))(@fortawesome/fontawesome-svg-core@6.7.2) + '@fortawesome/fontawesome-svg-core': + specifier: ^6.7.2 + version: 6.7.2 + '@fortawesome/free-brands-svg-icons': + specifier: ^6.7.2 + version: 6.7.2 + '@ng-icons/core': + specifier: ^25.0.0 + version: 25.6.1 + '@ng-icons/heroicons': + specifier: ^25.0.0 + version: 25.6.1 + '@ngx-translate/core': + specifier: ^15.0.0 + version: 15.0.0(@angular/common@16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3))(rxjs@7.8.2))(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3))(rxjs@7.8.2) + '@tanstack/angular-query-experimental': + specifier: ^5.75.4 + version: 5.83.0(@angular/common@16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3))(rxjs@7.8.2))(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3)) + '@zitadel/client': + specifier: workspace:* + version: link:../packages/zitadel-client + '@zitadel/proto': + specifier: workspace:* + version: link:../packages/zitadel-proto + angular-oauth2-oidc: + specifier: ^15.0.1 + version: 15.0.1(@angular/common@16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3))(rxjs@7.8.2))(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3)) + angularx-qrcode: + specifier: ^16.0.2 + version: 16.0.2(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3)) + buffer: + specifier: ^6.0.3 + version: 6.0.3 + codemirror: + specifier: ^5.65.19 + version: 5.65.19 + file-saver: + specifier: ^2.0.5 + version: 2.0.5 + flag-icons: + specifier: ^7.3.2 + version: 7.5.0 + google-protobuf: + specifier: ^3.21.4 + version: 3.21.4 + grpc-web: + specifier: ^1.5.0 + version: 1.5.0 + i18n-iso-countries: + specifier: ^7.14.0 + version: 7.14.0 + libphonenumber-js: + specifier: ^1.12.6 + version: 1.12.10 + material-design-icons-iconfont: + specifier: ^6.7.0 + version: 6.7.0 + moment: + specifier: ^2.30.1 + version: 2.30.1 + ngx-color: + specifier: ^9.0.0 + version: 9.0.0(@angular/common@16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3))(rxjs@7.8.2))(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3)) + opentype.js: + specifier: ^1.3.4 + version: 1.3.4 + posthog-js: + specifier: ^1.232.7 + version: 1.257.1 + rxjs: + specifier: ^7.8.2 + version: 7.8.2 + tinycolor2: + specifier: ^1.6.0 + version: 1.6.0 + tslib: + specifier: ^2.7.0 + version: 2.8.1 + uuid: + specifier: ^10.0.0 + version: 10.0.0 + zone.js: + specifier: ~0.13.3 + version: 0.13.3 + devDependencies: + '@angular-devkit/build-angular': + specifier: ^16.2.2 + version: 16.2.16(@angular/compiler-cli@16.2.12(@angular/compiler@16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3)))(typescript@5.1.6))(@angular/service-worker@16.2.12(@angular/common@16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3))(rxjs@7.8.2))(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3)))(@swc/core@1.13.1)(@types/node@22.16.5)(html-webpack-plugin@5.6.3(webpack@5.94.0(@swc/core@1.13.1)(esbuild@0.18.17)))(karma@6.4.4)(lightningcss@1.30.1)(tailwindcss@3.4.14)(typescript@5.1.6) + '@angular-eslint/builder': + specifier: 18.3.0 + version: 18.3.0(eslint@8.57.1)(typescript@5.1.6) + '@angular-eslint/eslint-plugin': + specifier: 18.0.0 + version: 18.0.0(eslint@8.57.1)(typescript@5.1.6) + '@angular-eslint/eslint-plugin-template': + specifier: 18.0.0 + version: 18.0.0(eslint@8.57.1)(typescript@5.1.6) + '@angular-eslint/schematics': + specifier: 16.2.0 + version: 16.2.0(@angular/cli@16.2.16(chokidar@3.5.3))(@swc/core@1.13.1)(eslint@8.57.1)(typescript@5.1.6) + '@angular-eslint/template-parser': + specifier: 18.3.0 + version: 18.3.0(eslint@8.57.1)(typescript@5.1.6) + '@angular/cli': + specifier: ^16.2.15 + version: 16.2.16(chokidar@3.5.3) + '@angular/compiler-cli': + specifier: ^16.2.5 + version: 16.2.12(@angular/compiler@16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3)))(typescript@5.1.6) + '@angular/language-service': + specifier: ^18.2.4 + version: 18.2.13 + '@bufbuild/buf': + specifier: ^1.41.0 + version: 1.55.1 + '@netlify/framework-info': + specifier: ^9.8.13 + version: 9.9.3 + '@types/file-saver': + specifier: ^2.0.7 + version: 2.0.7 + '@types/google-protobuf': + specifier: ^3.15.3 + version: 3.15.12 + '@types/jasmine': + specifier: ~5.1.4 + version: 5.1.8 + '@types/jasminewd2': + specifier: ~2.0.13 + version: 2.0.13 + '@types/jsonwebtoken': + specifier: ^9.0.6 + version: 9.0.10 + '@types/node': + specifier: ^22.5.5 + version: 22.16.5 + '@types/opentype.js': + specifier: ^1.3.8 + version: 1.3.8 + '@types/qrcode': + specifier: ^1.5.2 + version: 1.5.5 + '@types/uuid': + specifier: ^10.0.0 + version: 10.0.0 + '@typescript-eslint/eslint-plugin': + specifier: ^5.62.0 + version: 5.62.0(@typescript-eslint/parser@8.38.0(eslint@8.57.1)(typescript@5.1.6))(eslint@8.57.1)(typescript@5.1.6) + '@typescript-eslint/parser': + specifier: ^8.35.1 + version: 8.38.0(eslint@8.57.1)(typescript@5.1.6) + eslint: + specifier: ^8.57.1 + version: 8.57.1 + jasmine-core: + specifier: ~5.6.0 + version: 5.6.0 + jasmine-spec-reporter: + specifier: ~7.0.0 + version: 7.0.0 + karma: + specifier: ^6.4.4 + version: 6.4.4 + karma-chrome-launcher: + specifier: ^3.2.0 + version: 3.2.0 + karma-coverage: + specifier: ^2.2.1 + version: 2.2.1 + karma-coverage-istanbul-reporter: + specifier: ^3.0.3 + version: 3.0.3 + karma-jasmine: + specifier: ^5.1.0 + version: 5.1.0(karma@6.4.4) + karma-jasmine-html-reporter: + specifier: ^2.1.0 + version: 2.1.0(jasmine-core@5.6.0)(karma-jasmine@5.1.0(karma@6.4.4))(karma@6.4.4) + prettier: + specifier: ^3.5.3 + version: 3.6.2 + prettier-plugin-organize-imports: + specifier: ^4.1.0 + version: 4.2.0(prettier@3.6.2)(typescript@5.1.6) + typescript: + specifier: '5.1' + version: 5.1.6 + + docs: + dependencies: + '@bufbuild/buf': + specifier: ^1.14.0 + version: 1.55.1 + '@docusaurus/core': + specifier: ^3.8.1 + version: 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.9(@swc/helpers@0.5.17))(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) + '@docusaurus/faster': + specifier: ^3.8.1 + version: 3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17) + '@docusaurus/preset-classic': + specifier: ^3.8.1 + version: 3.8.1(@algolia/client-search@5.34.0)(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.9(@swc/helpers@0.5.17))(@swc/core@1.13.1(@swc/helpers@0.5.17))(@types/react@19.1.2)(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.3)(typescript@5.8.3) + '@docusaurus/theme-mermaid': + specifier: ^3.8.1 + version: 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17))(@docusaurus/plugin-content-docs@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.9(@swc/helpers@0.5.17))(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.9(@swc/helpers@0.5.17))(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) + '@docusaurus/theme-search-algolia': + specifier: ^3.8.1 + version: 3.8.1(@algolia/client-search@5.34.0)(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.9(@swc/helpers@0.5.17))(@swc/core@1.13.1(@swc/helpers@0.5.17))(@types/react@19.1.2)(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.3)(typescript@5.8.3) + '@headlessui/react': + specifier: ^1.7.4 + version: 1.7.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@heroicons/react': + specifier: ^2.0.13 + version: 2.1.3(react@18.3.1) + '@inkeep/cxkit-docusaurus': + specifier: ^0.5.89 + version: 0.5.95(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(zod@3.25.76) + '@signalwire/docusaurus-plugin-llms-txt': + specifier: ^1.2.0 + version: 1.2.1(@docusaurus/core@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.9(@swc/helpers@0.5.17))(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3)) + autoprefixer: + specifier: ^10.4.13 + version: 10.4.21(postcss@8.5.3) + clsx: + specifier: ^1.2.1 + version: 1.2.1 + docusaurus-plugin-image-zoom: + specifier: ^3.0.1 + version: 3.0.1(@docusaurus/theme-classic@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17))(@rspack/core@1.4.9(@swc/helpers@0.5.17))(@swc/core@1.13.1(@swc/helpers@0.5.17))(@types/react@19.1.2)(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3)) + docusaurus-plugin-openapi-docs: + specifier: 4.4.0 + version: 4.4.0(@docusaurus/plugin-content-docs@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.9(@swc/helpers@0.5.17))(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3))(@docusaurus/utils-validation@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@docusaurus/utils@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(encoding@0.1.13)(react@18.3.1) + docusaurus-theme-github-codeblock: + specifier: ^2.0.2 + version: 2.0.2(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + docusaurus-theme-openapi-docs: + specifier: 4.4.0 + version: 4.4.0(@docusaurus/theme-common@3.8.1(@docusaurus/plugin-content-docs@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.9(@swc/helpers@0.5.17))(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3))(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@rspack/core@1.4.9(@swc/helpers@0.5.17))(@types/react@19.1.2)(docusaurus-plugin-openapi-docs@4.4.0(@docusaurus/plugin-content-docs@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.9(@swc/helpers@0.5.17))(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3))(@docusaurus/utils-validation@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@docusaurus/utils@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(encoding@0.1.13)(react@18.3.1))(docusaurus-plugin-sass@0.2.6(@docusaurus/core@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.9(@swc/helpers@0.5.17))(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3))(@rspack/core@1.4.9(@swc/helpers@0.5.17))(sass@1.89.2)(webpack@5.100.2(@swc/core@1.13.1(@swc/helpers@0.5.17))))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.100.2(@swc/core@1.13.1(@swc/helpers@0.5.17))) + mdx-mermaid: + specifier: ^2.0.0 + version: 2.0.3(mermaid@11.9.0)(react@18.3.1)(typescript@5.8.3)(unist-util-visit@5.0.0) + postcss: + specifier: ^8.4.31 + version: 8.5.3 + raw-loader: + specifier: ^4.0.2 + version: 4.0.2(webpack@5.100.2(@swc/core@1.13.1(@swc/helpers@0.5.17))) + react: + specifier: ^18.2.0 + version: 18.3.1 + react-copy-to-clipboard: + specifier: ^5.1.0 + version: 5.1.0(react@18.3.1) + react-dom: + specifier: ^18.2.0 + version: 18.3.1(react@18.3.1) + react-google-charts: + specifier: ^5.2.1 + version: 5.2.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react-player: + specifier: ^2.15.1 + version: 2.16.1(react@18.3.1) + devDependencies: + '@docusaurus/module-type-aliases': + specifier: ^3.8.1 + version: 3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/types': + specifier: ^3.8.1 + version: 3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + tailwindcss: + specifier: ^3.2.4 + version: 3.4.14 + + e2e: + dependencies: + '@types/pg': + specifier: ^8.11.6 + version: 8.15.4 + cypress-wait-until: + specifier: ^3.0.2 + version: 3.0.2 + jsonwebtoken: + specifier: ^9.0.2 + version: 9.0.2 + mochawesome: + specifier: ^7.1.3 + version: 7.1.3(mocha@11.7.1) + pg: + specifier: ^8.12.0 + version: 8.16.3 + prettier: + specifier: ^3.3.3 + version: 3.6.2 + typescript: + specifier: ^5.5.4 + version: 5.8.3 + uuid: + specifier: ^10.0.0 + version: 10.0.0 + wait-on: + specifier: ^7.2.0 + version: 7.2.0 + devDependencies: + '@types/node': + specifier: ^22.3.0 + version: 22.16.5 + cypress: + specifier: ^13.13.3 + version: 13.17.0 + + packages/zitadel-client: dependencies: '@bufbuild/protobuf': specifier: ^2.2.2 - version: 2.6.0 + version: 2.6.1 '@connectrpc/connect': specifier: ^2.0.0 - version: 2.0.2(@bufbuild/protobuf@2.6.0) + version: 2.0.2(@bufbuild/protobuf@2.6.1) '@connectrpc/connect-node': specifier: ^2.0.0 - version: 2.0.2(@bufbuild/protobuf@2.6.0)(@connectrpc/connect@2.0.2(@bufbuild/protobuf@2.6.0)) + version: 2.0.2(@bufbuild/protobuf@2.6.1)(@connectrpc/connect@2.0.2(@bufbuild/protobuf@2.6.1)) '@connectrpc/connect-web': specifier: ^2.0.0 - version: 2.0.2(@bufbuild/protobuf@2.6.0)(@connectrpc/connect@2.0.2(@bufbuild/protobuf@2.6.0)) + version: 2.0.2(@bufbuild/protobuf@2.6.1)(@connectrpc/connect@2.0.2(@bufbuild/protobuf@2.6.1)) '@zitadel/proto': specifier: workspace:* version: link:../zitadel-proto @@ -654,24 +615,36 @@ importers: '@bufbuild/protocompile': specifier: ^0.0.1 version: 0.0.1(@bufbuild/buf@1.55.1) + '@types/node': + specifier: ^24.0.14 + version: 24.1.0 '@typescript-eslint/eslint-plugin': specifier: ^8.15.0 - version: 8.37.0(@typescript-eslint/parser@8.37.0(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1)(typescript@5.8.3) + version: 8.38.0(@typescript-eslint/parser@8.38.0(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1)(typescript@5.8.3) '@typescript-eslint/parser': specifier: ^8.35.1 - version: 8.37.0(eslint@8.57.1)(typescript@5.8.3) + version: 8.38.0(eslint@8.57.1)(typescript@5.8.3) eslint: specifier: ^8.57.0 version: 8.57.1 + knip: + specifier: ^5.61.3 + version: 5.62.0(@types/node@24.1.0)(typescript@5.8.3) tsup: specifier: ^8.4.0 - version: 8.5.0(@swc/core@1.12.14)(jiti@1.21.7)(postcss@8.5.6)(typescript@5.8.3)(yaml@2.8.0) + version: 8.5.0(@swc/core@1.13.1)(jiti@2.4.2)(postcss@8.5.6)(typescript@5.8.3)(yaml@2.8.0) + typescript: + specifier: ^5.8.3 + version: 5.8.3 + vitest: + specifier: ^2.0.0 + version: 2.1.9(@types/node@24.1.0)(jsdom@26.1.0)(less@4.1.3)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1) - login/packages/zitadel-proto: + packages/zitadel-proto: dependencies: '@bufbuild/protobuf': specifier: ^2.2.2 - version: 2.6.0 + version: 2.6.1 devDependencies: '@bufbuild/buf': specifier: ^1.53.0 @@ -702,59 +675,59 @@ packages: '@algolia/client-search': '>= 4.9.1 < 6' algoliasearch: '>= 4.9.1 < 6' - '@algolia/client-abtesting@5.33.0': - resolution: {integrity: sha512-Pyv+iHkkq7BJWFKzdrXm/JSbcTGvrGqJnIMwHYYlKDjuEBWhYt/z4WDLP9MbFZ9cTKb4qe8OvzEmS/0ERW3ibg==} + '@algolia/client-abtesting@5.34.0': + resolution: {integrity: sha512-d6ardhDtQsnMpyr/rPrS3YuIE9NYpY4rftkC7Ap9tyuhZ/+V3E/LH+9uEewPguKzVqduApdwJzYq2k+vAXVEbQ==} engines: {node: '>= 14.0.0'} - '@algolia/client-analytics@5.33.0': - resolution: {integrity: sha512-qkRc7ovjWQQJng6U1yM5esLPNDB0leGCaOh3FEfeWRyLB0xnjLsBEUkKanYq9GrewPvi17l78nDhkqB2SYzTCw==} + '@algolia/client-analytics@5.34.0': + resolution: {integrity: sha512-WXIByjHNA106JO1Dj6b4viSX/yMN3oIB4qXr2MmyEmNq0MgfuPfPw8ayLRIZPa9Dp27hvM3G8MWJ4RG978HYFw==} engines: {node: '>= 14.0.0'} - '@algolia/client-common@5.33.0': - resolution: {integrity: sha512-Gq8Z4Fv0DkqDkf/bZl7ZwIF7PSCnRFwpyQoNDnUg+s4SwerXx6VwZJlIx/t5b9+l7vwWsjnKVivCfM4Ab5gw+g==} + '@algolia/client-common@5.34.0': + resolution: {integrity: sha512-JeN1XJLZIkkv6yK0KT93CIXXk+cDPUGNg5xeH4fN9ZykYFDWYRyqgaDo+qvg4RXC3WWkdQ+hogQuuCk4Y3Eotw==} engines: {node: '>= 14.0.0'} - '@algolia/client-insights@5.33.0': - resolution: {integrity: sha512-/tp1oWD3lpSXhAC4n8j0GMDbmN6pd+pATeO1GeURAFP5TVF+2Jz+NbQ1et0uCTzdazOfjEjSIv0fQSLo7bqSgA==} + '@algolia/client-insights@5.34.0': + resolution: {integrity: sha512-gdFlcQa+TWXJUsihHDlreFWniKPFIQ15i5oynCY4m9K3DCex5g5cVj9VG4Hsquxf2t6Y0yv8w6MvVTGDO8oRLw==} engines: {node: '>= 14.0.0'} - '@algolia/client-personalization@5.33.0': - resolution: {integrity: sha512-hZNSqe2BXkrBQ04t5NSlqsNl4u0QrFfhXHbjO5iZ14TWt5jyOdtFMBxF3Qc0o0sqTVYnFIp0xtUbEi+/HkGeyQ==} + '@algolia/client-personalization@5.34.0': + resolution: {integrity: sha512-g91NHhIZDkh1IUeNtsUd8V/ZxuBc2ByOfDqhCkoQY3Z/mZszhpn3Czn6AR5pE81fx793vMaiOZvQVB5QttArkQ==} engines: {node: '>= 14.0.0'} - '@algolia/client-query-suggestions@5.33.0': - resolution: {integrity: sha512-kpu2hCIR+848T0lcf3W1GCMe+HQp/LcHceIglA6Dyw6i+y9wH3w8kmXqIV2Svv6JQ9ojEqIL8Knk7NEvD3xIBg==} + '@algolia/client-query-suggestions@5.34.0': + resolution: {integrity: sha512-cvRApDfFrlJ3Vcn37U4Nd/7S6T8cx7FW3mVLJPqkkzixv8DQ/yV+x4VLirxOtGDdq3KohcIbIGWbg1QuyOZRvQ==} engines: {node: '>= 14.0.0'} - '@algolia/client-search@5.33.0': - resolution: {integrity: sha512-Z5SAqPLxF8KyE9YPO4tAdHrXyb87DUJ0lXhFrcrG+dl/AQT9nqycQhtqDqdcQnfZrj02PImSWZQpxQj34nGZKw==} + '@algolia/client-search@5.34.0': + resolution: {integrity: sha512-m9tK4IqJmn+flEPRtuxuHgiHmrKV0su5fuVwVpq8/es4DMjWMgX1a7Lg1PktvO8AbKaTp9kTtBAPnwXpuCwmEg==} engines: {node: '>= 14.0.0'} '@algolia/events@4.0.1': resolution: {integrity: sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ==} - '@algolia/ingestion@1.33.0': - resolution: {integrity: sha512-KNJI60N+twnDLiIY+oGO2Q+syS+yBNOmNdhsB5vCzzrhi3CYs+bufnJ67/BUUfnt+T5+3VlnkvUgDkGBmmZXmA==} + '@algolia/ingestion@1.34.0': + resolution: {integrity: sha512-2rxy4XoeRtIpzxEh5u5UgDC5HY4XbNdjzNgFx1eDrfFkSHpEVjirtLhISMy2N5uSFqYu1uUby5/NC1Soq8J7iw==} engines: {node: '>= 14.0.0'} - '@algolia/monitoring@1.33.0': - resolution: {integrity: sha512-47R0kMDTSj8Q7rCUgIRv5Xc518tCBBS0KIZ5oRKg+hspQaJmEO+fxwGLrIIwp5JiaK6y+5sbS7bhtaajelJhpg==} + '@algolia/monitoring@1.34.0': + resolution: {integrity: sha512-OJiDhlJX8ZdWAndc50Z6aUEW/YmnhFK2ul3rahMw5/c9Damh7+oY9SufoK2LimJejy+65Qka06YPG29v2G/vww==} engines: {node: '>= 14.0.0'} - '@algolia/recommend@5.33.0': - resolution: {integrity: sha512-HpeLoVQuv5kW9xL0RSq1exa8ueNwyx+9B02dzFonlQzKTaSedM0jiWo6m3nWpi1hChAKqjzkL40FkxrgyrWTSg==} + '@algolia/recommend@5.34.0': + resolution: {integrity: sha512-fzNQZAdVxu/Gnbavy8KW5gurApwdYcPW6+pjO7Pw8V5drCR3eSqnOxSvp79rhscDX8ezwqMqqK4F3Hsq+KpRzg==} engines: {node: '>= 14.0.0'} - '@algolia/requester-browser-xhr@5.33.0': - resolution: {integrity: sha512-uOqDkvY7s9c9rkaZ4+n69LkTmZ5ax3el+8u6ipvODfj1P3HzrGvMUVFy/nGSXxw+XITKcIRphPQcyqn15b02dA==} + '@algolia/requester-browser-xhr@5.34.0': + resolution: {integrity: sha512-gEI0xjzA/xvMpEdYmgQnf6AQKllhgKRtnEWmwDrnct+YPIruEHlx1dd7nRJTy/33MiYcCxkB4khXpNrHuqgp3Q==} engines: {node: '>= 14.0.0'} - '@algolia/requester-fetch@5.33.0': - resolution: {integrity: sha512-NzTEGjwjPhUXPsrjj9nXM43+jtBVeL6UgGNBTQKsxjpqJ3EEAQ2Kq5g7DRK6mVDTQiTBWvBLKChJpn4qxwtLsg==} + '@algolia/requester-fetch@5.34.0': + resolution: {integrity: sha512-5SwGOttpbACT4jXzfSJ3mnTcF46SVNSnZ1JjxC3qBa3qKi4U0CJGzuVVy3L798u8dG5H0SZ2MAB5v7180Gnqew==} engines: {node: '>= 14.0.0'} - '@algolia/requester-node-http@5.33.0': - resolution: {integrity: sha512-FhEE19ScAYuXL3VLj2I3KhL7683gZwZoa+BQZUEnA05vSbVBhCAqUBQgiVu7j2RF3VceqLX3+GEeY0bHs4y7eA==} + '@algolia/requester-node-http@5.34.0': + resolution: {integrity: sha512-409XlyIyEXrxyGjWxd0q5RASizHSRVUU0AXPCEdqnbcGEzbCgL1n7oYI8YxzE/RqZLha+PNwWCcTVn7EE5tyyQ==} engines: {node: '>= 14.0.0'} '@alloc/quick-lru@5.2.0': @@ -1814,8 +1787,8 @@ packages: engines: {node: '>=12'} hasBin: true - '@bufbuild/protobuf@2.6.0': - resolution: {integrity: sha512-6cuonJVNOIL7lTj5zgo/Rc2bKAo4/GvN+rKCrUj7GdEHRzCk8zKOfFwUsL9nAVk5rSIsRmlgcpLzTRysopEeeg==} + '@bufbuild/protobuf@2.6.1': + resolution: {integrity: sha512-DaG6XlyKpz08bmHY5SGX2gfIllaqtDJ/KwVoxsmP22COOLYwDBe7yD3DZGwXem/Xq7QOc9cuR7R3MpAv5CFfDw==} '@bufbuild/protocompile@0.0.1': resolution: {integrity: sha512-cOTMtjcWLcbjF17dPYgeMtVC5jZyS0bSjz3jy8kDPjOgjgSYMD2u2It7w8aCc2z23hTPIKl/2SNdMnz0Jzu3Xg==} @@ -2190,6 +2163,11 @@ packages: '@cypress/xvfb@1.2.4': resolution: {integrity: sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==} + '@devcontainers/cli@0.80.0': + resolution: {integrity: sha512-w2EaxgjyeVGyzfA/KUEZBhyXqu/5PyWNXcnrXsZOBrt3aN2zyGiHrXoG54TF6K0b5DSCF01Rt5fnIyrCeFzFKw==} + engines: {node: ^16.13.0 || >=18.0.0} + hasBin: true + '@discoveryjs/json-ext@0.5.7': resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==} engines: {node: '>=10.0.0'} @@ -2394,14 +2372,14 @@ packages: resolution: {integrity: sha512-P1ml0nvOmEFdmu0smSXOqTS1sxU5tqvnc0dA4MTKV39kye+bhQnjkIKEE18fNOvxjyB86k8esoCIFM3x4RykOQ==} engines: {node: '>=18.0'} - '@emnapi/core@1.4.4': - resolution: {integrity: sha512-A9CnAbC6ARNMKcIcrQwq6HeHCjpcBZ5wSx4U01WXCqEKlrzB9F9315WDNHkrs2xbx7YjjSxbUYxuN6EQzpcY2g==} + '@emnapi/core@1.4.5': + resolution: {integrity: sha512-XsLw1dEOpkSX/WucdqUhPWP7hDxSvZiY+fsUC14h+FtQ2Ifni4znbBt8punRX+Uj2JG/uDb8nEHVKvrVlvdZ5Q==} - '@emnapi/runtime@1.4.4': - resolution: {integrity: sha512-hHyapA4A3gPaDCNfiqyZUStTMqIkKRshqPIuDOXv1hcBnD4U3l8cP0T1HMCfGRxQ6V64TGCcoswChANyOAwbQg==} + '@emnapi/runtime@1.4.5': + resolution: {integrity: sha512-++LApOtY0pEEz1zrd9vy1/zXVaVJJ/EbAF3u0fXIzPJEDtnITsBGbbK0EkM72amhl/R5b+5xx0Y/QhcVOpuulg==} - '@emnapi/wasi-threads@1.0.3': - resolution: {integrity: sha512-8K5IFFsQqF9wQNJptGbS6FNKgUTsSRYnTqNCG1vPP8jFdjSv18n2mQfJpkt2Oibo9iBEzcDnDxNwKTzC7svlJw==} + '@emnapi/wasi-threads@1.0.4': + resolution: {integrity: sha512-PJR+bOmMOPH8AtcTGAyYNiuJ3/Fcoj2XN/gBEWzDIKh254XO+mM9XoXHk5GNEhodxeMznbg7BlRojVbKN+gC6g==} '@esbuild/aix-ppc64@0.21.5': resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} @@ -2409,8 +2387,8 @@ packages: cpu: [ppc64] os: [aix] - '@esbuild/aix-ppc64@0.25.6': - resolution: {integrity: sha512-ShbM/3XxwuxjFiuVBHA+d3j5dyac0aEVVq1oluIDf71hUw0aRF59dV/efUsIwFnR6m8JNM2FjZOzmaZ8yG61kw==} + '@esbuild/aix-ppc64@0.25.8': + resolution: {integrity: sha512-urAvrUedIqEiFR3FYSLTWQgLu5tb+m0qZw0NBEasUeo6wuqatkMDaRT+1uABiGXEu5vqgPd7FGE1BhsAIy9QVA==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] @@ -2427,8 +2405,8 @@ packages: cpu: [arm64] os: [android] - '@esbuild/android-arm64@0.25.6': - resolution: {integrity: sha512-hd5zdUarsK6strW+3Wxi5qWws+rJhCCbMiC9QZyzoxfk5uHRIE8T287giQxzVpEvCwuJ9Qjg6bEjcRJcgfLqoA==} + '@esbuild/android-arm64@0.25.8': + resolution: {integrity: sha512-OD3p7LYzWpLhZEyATcTSJ67qB5D+20vbtr6vHlHWSQYhKtzUYrETuWThmzFpZtFsBIxRvhO07+UgVA9m0i/O1w==} engines: {node: '>=18'} cpu: [arm64] os: [android] @@ -2445,8 +2423,8 @@ packages: cpu: [arm] os: [android] - '@esbuild/android-arm@0.25.6': - resolution: {integrity: sha512-S8ToEOVfg++AU/bHwdksHNnyLyVM+eMVAOf6yRKFitnwnbwwPNqKr3srzFRe7nzV69RQKb5DgchIX5pt3L53xg==} + '@esbuild/android-arm@0.25.8': + resolution: {integrity: sha512-RONsAvGCz5oWyePVnLdZY/HHwA++nxYWIX1atInlaW6SEkwq6XkP3+cb825EUcRs5Vss/lGh/2YxAb5xqc07Uw==} engines: {node: '>=18'} cpu: [arm] os: [android] @@ -2463,8 +2441,8 @@ packages: cpu: [x64] os: [android] - '@esbuild/android-x64@0.25.6': - resolution: {integrity: sha512-0Z7KpHSr3VBIO9A/1wcT3NTy7EB4oNC4upJ5ye3R7taCc2GUdeynSLArnon5G8scPwaU866d3H4BCrE5xLW25A==} + '@esbuild/android-x64@0.25.8': + resolution: {integrity: sha512-yJAVPklM5+4+9dTeKwHOaA+LQkmrKFX96BM0A/2zQrbS6ENCmxc4OVoBs5dPkCCak2roAD+jKCdnmOqKszPkjA==} engines: {node: '>=18'} cpu: [x64] os: [android] @@ -2481,8 +2459,8 @@ packages: cpu: [arm64] os: [darwin] - '@esbuild/darwin-arm64@0.25.6': - resolution: {integrity: sha512-FFCssz3XBavjxcFxKsGy2DYK5VSvJqa6y5HXljKzhRZ87LvEi13brPrf/wdyl/BbpbMKJNOr1Sd0jtW4Ge1pAA==} + '@esbuild/darwin-arm64@0.25.8': + resolution: {integrity: sha512-Jw0mxgIaYX6R8ODrdkLLPwBqHTtYHJSmzzd+QeytSugzQ0Vg4c5rDky5VgkoowbZQahCbsv1rT1KW72MPIkevw==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] @@ -2499,8 +2477,8 @@ packages: cpu: [x64] os: [darwin] - '@esbuild/darwin-x64@0.25.6': - resolution: {integrity: sha512-GfXs5kry/TkGM2vKqK2oyiLFygJRqKVhawu3+DOCk7OxLy/6jYkWXhlHwOoTb0WqGnWGAS7sooxbZowy+pK9Yg==} + '@esbuild/darwin-x64@0.25.8': + resolution: {integrity: sha512-Vh2gLxxHnuoQ+GjPNvDSDRpoBCUzY4Pu0kBqMBDlK4fuWbKgGtmDIeEC081xi26PPjn+1tct+Bh8FjyLlw1Zlg==} engines: {node: '>=18'} cpu: [x64] os: [darwin] @@ -2517,8 +2495,8 @@ packages: cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-arm64@0.25.6': - resolution: {integrity: sha512-aoLF2c3OvDn2XDTRvn8hN6DRzVVpDlj2B/F66clWd/FHLiHaG3aVZjxQX2DYphA5y/evbdGvC6Us13tvyt4pWg==} + '@esbuild/freebsd-arm64@0.25.8': + resolution: {integrity: sha512-YPJ7hDQ9DnNe5vxOm6jaie9QsTwcKedPvizTVlqWG9GBSq+BuyWEDazlGaDTC5NGU4QJd666V0yqCBL2oWKPfA==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] @@ -2535,8 +2513,8 @@ packages: cpu: [x64] os: [freebsd] - '@esbuild/freebsd-x64@0.25.6': - resolution: {integrity: sha512-2SkqTjTSo2dYi/jzFbU9Plt1vk0+nNg8YC8rOXXea+iA3hfNJWebKYPs3xnOUf9+ZWhKAaxnQNUf2X9LOpeiMQ==} + '@esbuild/freebsd-x64@0.25.8': + resolution: {integrity: sha512-MmaEXxQRdXNFsRN/KcIimLnSJrk2r5H8v+WVafRWz5xdSVmWLoITZQXcgehI2ZE6gioE6HirAEToM/RvFBeuhw==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] @@ -2553,8 +2531,8 @@ packages: cpu: [arm64] os: [linux] - '@esbuild/linux-arm64@0.25.6': - resolution: {integrity: sha512-b967hU0gqKd9Drsh/UuAm21Khpoh6mPBSgz8mKRq4P5mVK8bpA+hQzmm/ZwGVULSNBzKdZPQBRT3+WuVavcWsQ==} + '@esbuild/linux-arm64@0.25.8': + resolution: {integrity: sha512-WIgg00ARWv/uYLU7lsuDK00d/hHSfES5BzdWAdAig1ioV5kaFNrtK8EqGcUBJhYqotlUByUKz5Qo6u8tt7iD/w==} engines: {node: '>=18'} cpu: [arm64] os: [linux] @@ -2571,8 +2549,8 @@ packages: cpu: [arm] os: [linux] - '@esbuild/linux-arm@0.25.6': - resolution: {integrity: sha512-SZHQlzvqv4Du5PrKE2faN0qlbsaW/3QQfUUc6yO2EjFcA83xnwm91UbEEVx4ApZ9Z5oG8Bxz4qPE+HFwtVcfyw==} + '@esbuild/linux-arm@0.25.8': + resolution: {integrity: sha512-FuzEP9BixzZohl1kLf76KEVOsxtIBFwCaLupVuk4eFVnOZfU+Wsn+x5Ryam7nILV2pkq2TqQM9EZPsOBuMC+kg==} engines: {node: '>=18'} cpu: [arm] os: [linux] @@ -2589,8 +2567,8 @@ packages: cpu: [ia32] os: [linux] - '@esbuild/linux-ia32@0.25.6': - resolution: {integrity: sha512-aHWdQ2AAltRkLPOsKdi3xv0mZ8fUGPdlKEjIEhxCPm5yKEThcUjHpWB1idN74lfXGnZ5SULQSgtr5Qos5B0bPw==} + '@esbuild/linux-ia32@0.25.8': + resolution: {integrity: sha512-A1D9YzRX1i+1AJZuFFUMP1E9fMaYY+GnSQil9Tlw05utlE86EKTUA7RjwHDkEitmLYiFsRd9HwKBPEftNdBfjg==} engines: {node: '>=18'} cpu: [ia32] os: [linux] @@ -2607,8 +2585,8 @@ packages: cpu: [loong64] os: [linux] - '@esbuild/linux-loong64@0.25.6': - resolution: {integrity: sha512-VgKCsHdXRSQ7E1+QXGdRPlQ/e08bN6WMQb27/TMfV+vPjjTImuT9PmLXupRlC90S1JeNNW5lzkAEO/McKeJ2yg==} + '@esbuild/linux-loong64@0.25.8': + resolution: {integrity: sha512-O7k1J/dwHkY1RMVvglFHl1HzutGEFFZ3kNiDMSOyUrB7WcoHGf96Sh+64nTRT26l3GMbCW01Ekh/ThKM5iI7hQ==} engines: {node: '>=18'} cpu: [loong64] os: [linux] @@ -2625,8 +2603,8 @@ packages: cpu: [mips64el] os: [linux] - '@esbuild/linux-mips64el@0.25.6': - resolution: {integrity: sha512-WViNlpivRKT9/py3kCmkHnn44GkGXVdXfdc4drNmRl15zVQ2+D2uFwdlGh6IuK5AAnGTo2qPB1Djppj+t78rzw==} + '@esbuild/linux-mips64el@0.25.8': + resolution: {integrity: sha512-uv+dqfRazte3BzfMp8PAQXmdGHQt2oC/y2ovwpTteqrMx2lwaksiFZ/bdkXJC19ttTvNXBuWH53zy/aTj1FgGw==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] @@ -2643,8 +2621,8 @@ packages: cpu: [ppc64] os: [linux] - '@esbuild/linux-ppc64@0.25.6': - resolution: {integrity: sha512-wyYKZ9NTdmAMb5730I38lBqVu6cKl4ZfYXIs31Baf8aoOtB4xSGi3THmDYt4BTFHk7/EcVixkOV2uZfwU3Q2Jw==} + '@esbuild/linux-ppc64@0.25.8': + resolution: {integrity: sha512-GyG0KcMi1GBavP5JgAkkstMGyMholMDybAf8wF5A70CALlDM2p/f7YFE7H92eDeH/VBtFJA5MT4nRPDGg4JuzQ==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] @@ -2661,8 +2639,8 @@ packages: cpu: [riscv64] os: [linux] - '@esbuild/linux-riscv64@0.25.6': - resolution: {integrity: sha512-KZh7bAGGcrinEj4qzilJ4hqTY3Dg2U82c8bv+e1xqNqZCrCyc+TL9AUEn5WGKDzm3CfC5RODE/qc96OcbIe33w==} + '@esbuild/linux-riscv64@0.25.8': + resolution: {integrity: sha512-rAqDYFv3yzMrq7GIcen3XP7TUEG/4LK86LUPMIz6RT8A6pRIDn0sDcvjudVZBiiTcZCY9y2SgYX2lgK3AF+1eg==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] @@ -2679,8 +2657,8 @@ packages: cpu: [s390x] os: [linux] - '@esbuild/linux-s390x@0.25.6': - resolution: {integrity: sha512-9N1LsTwAuE9oj6lHMyyAM+ucxGiVnEqUdp4v7IaMmrwb06ZTEVCIs3oPPplVsnjPfyjmxwHxHMF8b6vzUVAUGw==} + '@esbuild/linux-s390x@0.25.8': + resolution: {integrity: sha512-Xutvh6VjlbcHpsIIbwY8GVRbwoviWT19tFhgdA7DlenLGC/mbc3lBoVb7jxj9Z+eyGqvcnSyIltYUrkKzWqSvg==} engines: {node: '>=18'} cpu: [s390x] os: [linux] @@ -2697,14 +2675,14 @@ packages: cpu: [x64] os: [linux] - '@esbuild/linux-x64@0.25.6': - resolution: {integrity: sha512-A6bJB41b4lKFWRKNrWoP2LHsjVzNiaurf7wyj/XtFNTsnPuxwEBWHLty+ZE0dWBKuSK1fvKgrKaNjBS7qbFKig==} + '@esbuild/linux-x64@0.25.8': + resolution: {integrity: sha512-ASFQhgY4ElXh3nDcOMTkQero4b1lgubskNlhIfJrsH5OKZXDpUAKBlNS0Kx81jwOBp+HCeZqmoJuihTv57/jvQ==} engines: {node: '>=18'} cpu: [x64] os: [linux] - '@esbuild/netbsd-arm64@0.25.6': - resolution: {integrity: sha512-IjA+DcwoVpjEvyxZddDqBY+uJ2Snc6duLpjmkXm/v4xuS3H+3FkLZlDm9ZsAbF9rsfP3zeA0/ArNDORZgrxR/Q==} + '@esbuild/netbsd-arm64@0.25.8': + resolution: {integrity: sha512-d1KfruIeohqAi6SA+gENMuObDbEjn22olAR7egqnkCD9DGBG0wsEARotkLgXDu6c4ncgWTZJtN5vcgxzWRMzcw==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] @@ -2721,14 +2699,14 @@ packages: cpu: [x64] os: [netbsd] - '@esbuild/netbsd-x64@0.25.6': - resolution: {integrity: sha512-dUXuZr5WenIDlMHdMkvDc1FAu4xdWixTCRgP7RQLBOkkGgwuuzaGSYcOpW4jFxzpzL1ejb8yF620UxAqnBrR9g==} + '@esbuild/netbsd-x64@0.25.8': + resolution: {integrity: sha512-nVDCkrvx2ua+XQNyfrujIG38+YGyuy2Ru9kKVNyh5jAys6n+l44tTtToqHjino2My8VAY6Lw9H7RI73XFi66Cg==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] - '@esbuild/openbsd-arm64@0.25.6': - resolution: {integrity: sha512-l8ZCvXP0tbTJ3iaqdNf3pjaOSd5ex/e6/omLIQCVBLmHTlfXW3zAxQ4fnDmPLOB1x9xrcSi/xtCWFwCZRIaEwg==} + '@esbuild/openbsd-arm64@0.25.8': + resolution: {integrity: sha512-j8HgrDuSJFAujkivSMSfPQSAa5Fxbvk4rgNAS5i3K+r8s1X0p1uOO2Hl2xNsGFppOeHOLAVgYwDVlmxhq5h+SQ==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] @@ -2745,14 +2723,14 @@ packages: cpu: [x64] os: [openbsd] - '@esbuild/openbsd-x64@0.25.6': - resolution: {integrity: sha512-hKrmDa0aOFOr71KQ/19JC7az1P0GWtCN1t2ahYAf4O007DHZt/dW8ym5+CUdJhQ/qkZmI1HAF8KkJbEFtCL7gw==} + '@esbuild/openbsd-x64@0.25.8': + resolution: {integrity: sha512-1h8MUAwa0VhNCDp6Af0HToI2TJFAn1uqT9Al6DJVzdIBAd21m/G0Yfc77KDM3uF3T/YaOgQq3qTJHPbTOInaIQ==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] - '@esbuild/openharmony-arm64@0.25.6': - resolution: {integrity: sha512-+SqBcAWoB1fYKmpWoQP4pGtx+pUUC//RNYhFdbcSA16617cchuryuhOCRpPsjCblKukAckWsV+aQ3UKT/RMPcA==} + '@esbuild/openharmony-arm64@0.25.8': + resolution: {integrity: sha512-r2nVa5SIK9tSWd0kJd9HCffnDHKchTGikb//9c7HX+r+wHYCpQrSgxhlY6KWV1nFo1l4KFbsMlHk+L6fekLsUg==} engines: {node: '>=18'} cpu: [arm64] os: [openharmony] @@ -2769,8 +2747,8 @@ packages: cpu: [x64] os: [sunos] - '@esbuild/sunos-x64@0.25.6': - resolution: {integrity: sha512-dyCGxv1/Br7MiSC42qinGL8KkG4kX0pEsdb0+TKhmJZgCUDBGmyo1/ArCjNGiOLiIAgdbWgmWgib4HoCi5t7kA==} + '@esbuild/sunos-x64@0.25.8': + resolution: {integrity: sha512-zUlaP2S12YhQ2UzUfcCuMDHQFJyKABkAjvO5YSndMiIkMimPmxA+BYSBikWgsRpvyxuRnow4nS5NPnf9fpv41w==} engines: {node: '>=18'} cpu: [x64] os: [sunos] @@ -2787,8 +2765,8 @@ packages: cpu: [arm64] os: [win32] - '@esbuild/win32-arm64@0.25.6': - resolution: {integrity: sha512-42QOgcZeZOvXfsCBJF5Afw73t4veOId//XD3i+/9gSkhSV6Gk3VPlWncctI+JcOyERv85FUo7RxuxGy+z8A43Q==} + '@esbuild/win32-arm64@0.25.8': + resolution: {integrity: sha512-YEGFFWESlPva8hGL+zvj2z/SaK+pH0SwOM0Nc/d+rVnW7GSTFlLBGzZkuSU9kFIGIo8q9X3ucpZhu8PDN5A2sQ==} engines: {node: '>=18'} cpu: [arm64] os: [win32] @@ -2805,8 +2783,8 @@ packages: cpu: [ia32] os: [win32] - '@esbuild/win32-ia32@0.25.6': - resolution: {integrity: sha512-4AWhgXmDuYN7rJI6ORB+uU9DHLq/erBbuMoAuB4VWJTu5KtCgcKYPynF0YI1VkBNuEfjNlLrFr9KZPJzrtLkrQ==} + '@esbuild/win32-ia32@0.25.8': + resolution: {integrity: sha512-hiGgGC6KZ5LZz58OL/+qVVoZiuZlUYlYHNAmczOm7bs2oE1XriPFi5ZHHrS8ACpV5EjySrnoCKmcbQMN+ojnHg==} engines: {node: '>=18'} cpu: [ia32] os: [win32] @@ -2823,8 +2801,8 @@ packages: cpu: [x64] os: [win32] - '@esbuild/win32-x64@0.25.6': - resolution: {integrity: sha512-NgJPHHbEpLQgDH2MjQu90pzW/5vvXIZ7KOnPyNBm92A6WgZ/7b6fJyUBjoumLqeOQQGqY2QjQxRo97ah4Sj0cA==} + '@esbuild/win32-x64@0.25.8': + resolution: {integrity: sha512-cn3Yr7+OaaZq1c+2pe+8yxC8E144SReCQjN6/2ynubzYjvyqZjTXfQJpAcQpsdJq3My7XADANiYGHoFC69pLQw==} engines: {node: '>=18'} cpu: [x64] os: [win32] @@ -2839,55 +2817,14 @@ packages: resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint/compat@1.3.1': - resolution: {integrity: sha512-k8MHony59I5EPic6EQTCNOuPoVBnoYXkP+20xvwFjN7t0qI3ImyvyBgg+hIVPwC8JaxVjjUZld+cLfBLFDLucg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.40 || 9 - peerDependenciesMeta: - eslint: - optional: true - - '@eslint/config-array@0.21.0': - resolution: {integrity: sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/config-helpers@0.3.0': - resolution: {integrity: sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/core@0.14.0': - resolution: {integrity: sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/core@0.15.1': - resolution: {integrity: sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/eslintrc@2.1.4': resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - '@eslint/eslintrc@3.3.1': - resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@8.57.1': resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - '@eslint/js@9.30.1': - resolution: {integrity: sha512-zXhuECFlyep42KZUhWjfvsmXGX39W8K8LFb8AWXM9gSV9dQB+MrJGLKvW6Zw0Ggnbpw0VHTtrhFXYe3Gym18jg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/object-schema@2.1.6': - resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/plugin-kit@0.3.3': - resolution: {integrity: sha512-1+WqvgNMhmlAambTvT3KPtCl/Ibr68VldY2XY40SL1CE0ZXiakFR/cbTspaF5HsnpDMvcYYoJHfl4980NBjGag==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@exodus/schemasafe@1.3.0': resolution: {integrity: sha512-5Aap/GaRupgNx/feGBwLLTVv8OQFfv3pq2lPRzPg9R+IOBnDgghTGW7l7EuVXOvg5cc/xSAlRW8rBrjIC3Nvqw==} @@ -3000,14 +2937,6 @@ packages: react-dom: '>=16.8.0' react-hook-form: ^7.0.0 - '@humanfs/core@0.19.1': - resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} - engines: {node: '>=18.18.0'} - - '@humanfs/node@0.16.6': - resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} - engines: {node: '>=18.18.0'} - '@humanwhocodes/config-array@0.13.0': resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==} engines: {node: '>=10.10.0'} @@ -3021,14 +2950,6 @@ packages: resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} deprecated: Use @eslint/object-schema instead - '@humanwhocodes/retry@0.3.1': - resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} - engines: {node: '>=18.18'} - - '@humanwhocodes/retry@0.4.3': - resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} - engines: {node: '>=18.18'} - '@iconify/types@2.0.0': resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} @@ -3157,32 +3078,32 @@ packages: cpu: [x64] os: [win32] - '@inkeep/cxkit-color-mode@0.5.94': - resolution: {integrity: sha512-Ysfdz/1Ec4n+LB2FKKOQrEuu+Cs76t3Is6CTTb8N33fhFSt91/eJfbSjs4EJcXfiCoKqxg7lnV0eUuOgPoZVIA==} + '@inkeep/cxkit-color-mode@0.5.95': + resolution: {integrity: sha512-31VZO+NQ2EQDzmKJFToLDRne5FKs05El/AGpakU420nzbpamTqgTyDEF/BLips+E9hJM6VBKHu0tgUQvc/ipRg==} - '@inkeep/cxkit-docusaurus@0.5.94': - resolution: {integrity: sha512-b3oVROwh405f/zDhFrTwGcxhvOfObK1yRUFY6u2BbNMX4t+zCFjnpH+PU5tYApuGEwAlPCMjKYZZ+1z/i4gcwg==} + '@inkeep/cxkit-docusaurus@0.5.95': + resolution: {integrity: sha512-6ayt9lNFLvjyY8J03XjPMwjOVC/vsQu3O0AzkOq/D+I+sD6CAlZq52aA7JHOQhd6F+CjoDySmhbOwmM5BSuQcw==} peerDependencies: react: '>=16.8.0' react-dom: '>=16.8.0' - '@inkeep/cxkit-primitives@0.5.94': - resolution: {integrity: sha512-sAH8opbRP7ChfuYyjWorPMLenjCt/bu4BLNZZN2LhHZHRdjKPwV78u3zcSTuXyh6WgzDEz8ot+J+mtEG6OxjkA==} + '@inkeep/cxkit-primitives@0.5.95': + resolution: {integrity: sha512-3/r7qtcmUqXr/fhUfTPlnsw3gWdVqRWuDzqIca2MFB7V1FOjRGE5tq4nMj22QgmgJAztBtARsT0wXjVfjont0w==} peerDependencies: react: '>=17.0.0' react-dom: '>=17.0.0' - '@inkeep/cxkit-react@0.5.94': - resolution: {integrity: sha512-cUArEuSity2WGK52gFNnH4F8k4W6J5lTBmV2HjAfYTFvMdNyuxTHLJwlUs59r7WhoDm/7C8H7MqwZ24JQhpr0w==} + '@inkeep/cxkit-react@0.5.95': + resolution: {integrity: sha512-M/zaGOxnuIe/K+myETt5OvduQ8i4ncUGQ+CL+bcbKJH13wfuaqa2PveIMmF/uOhskCl1DYHmTj5x5R5cGpR7lw==} - '@inkeep/cxkit-styled@0.5.94': - resolution: {integrity: sha512-TdYQZUMT8iXDJl4c/ADgoeRGsSRpunBgOeWLNsD9bthjRa5bDkBJeoVlJs8ngrKimMn4QYsdOWeVW0HzoX4rJg==} + '@inkeep/cxkit-styled@0.5.95': + resolution: {integrity: sha512-5FKiMh3MikqbUW51LaeDYE1X9aTT0Gu12Wm/5IQpjMP/gjJR3WJf1868JMkRpN9UR0hngq85/LRmDo8UW3wvGg==} - '@inkeep/cxkit-theme@0.5.94': - resolution: {integrity: sha512-PuYEAZYpkY8y0cffM+Fncs7nl3vx23nLgtC7fhCASq9ag8B+OliKt/6ja/LZpZPCKwL9eemle/gKALtDU01wSw==} + '@inkeep/cxkit-theme@0.5.95': + resolution: {integrity: sha512-PbVJEP2sx4ox2puEfGom2c4alQkdo6RpfMrkAYbt6VpfJx2+Hb65+QU7FlFR+Fy0QMqlOrIS2Ki9Wl/jk/HX+Q==} - '@inkeep/cxkit-types@0.5.94': - resolution: {integrity: sha512-p3MkWHkgOY8a1Tzz9nxIOsHN9w9NBKZ1zjfvc3rmQ75D0yxx8tM20pAe1zx6eFfbePPgjlHqBkwZHSxfjJtaoA==} + '@inkeep/cxkit-types@0.5.95': + resolution: {integrity: sha512-UCRBGKWjkR10wPVf0fUlnp59I3q0Uo0xF+IsoWfbr8ksxXKoCw5P1+bNeXYUZpbtRpi/Fjq15TXdbOy1pIUvUA==} '@isaacs/cliui@8.0.2': resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} @@ -3398,30 +3319,33 @@ packages: '@types/react': '>=16' react: '>=16' - '@mermaid-js/parser@0.6.1': - resolution: {integrity: sha512-lCQNpV8R4lgsGcjX5667UiuDLk2micCtjtxR1YKbBXvN5w2v+FeLYoHrTSSrjwXdMcDYvE4ZBPvKT31dfeSmmA==} + '@mermaid-js/parser@0.6.2': + resolution: {integrity: sha512-+PO02uGF6L6Cs0Bw8RpGhikVvMWEysfAyl27qTlroUB8jSWr1lL0Sf6zi78ZxlSnmgSY2AMMKVgghnN9jTtwkQ==} - '@module-federation/error-codes@0.16.0': - resolution: {integrity: sha512-TfmA45b8vvISniGudMg8jjIy1q3tLPon0QN/JdFp5f8AJ8/peICN5b+dkEQnWsAVg2fEusYhk9dO7z3nUeJM8A==} + '@module-federation/error-codes@0.17.0': + resolution: {integrity: sha512-+pZ12frhaDqh4Xs/MQj4Vu4CAjnJTiEb8Z6fqPfn/TLHh4YLWMOzpzxGuMFDHqXwMb3o8FRAUhNB0eX2ZmhwTA==} - '@module-federation/runtime-core@0.16.0': - resolution: {integrity: sha512-5SECQowG4hlUVBRk/y6bnYLfxbsl5NcMmqn043WPe7NDOhGQWbTuYibJ3Bk+ZBv5U4uYLEmXipBGDc1FKsHklQ==} + '@module-federation/runtime-core@0.17.0': + resolution: {integrity: sha512-MYwDDevYnBB9gXFfNOmJVIX5XZcbCHd0dral7gT7yVmlwOhbuGOLlm2dh2icwwdCYHA9AFDCfU9l1nJR4ex/ng==} - '@module-federation/runtime-tools@0.16.0': - resolution: {integrity: sha512-OzmXNluXBQ2E6znzX4m9CJt1MFHVGmbN8c8MSKcYIDcLzLSKBQAiaz9ZUMhkyWx2YrPgD134glyPEqJrc+fY8A==} + '@module-federation/runtime-tools@0.17.0': + resolution: {integrity: sha512-t4QcKfhmwOHedwByDKUlTQVw4+gPotySYPyNa8GFrBSr1F6wcGdGyOhzP+PdgpiJLIM03cB6V+IKGGHE28SfDQ==} - '@module-federation/runtime@0.16.0': - resolution: {integrity: sha512-6o84WI8Qhc9O3HwPLx89kTvOSkyUOHQr73R/zr0I04sYhlMJgw5xTwXeGE7bQAmNgbJclzW9Kh7JTP7+3o3CHg==} + '@module-federation/runtime@0.17.0': + resolution: {integrity: sha512-eMtrtCSSV6neJpMmQ8WdFpYv93raSgsG5RiAPsKUuSCXfZ5D+yzvleZ+gPcEpFT9HokmloxAn0jep50/1upTQw==} - '@module-federation/sdk@0.16.0': - resolution: {integrity: sha512-UXJW1WWuDoDmScX0tpISjl4xIRPzAiN62vg9etuBdAEUM+ja9rz/zwNZaByiUPFS2aqlj2RHenCRvIapE8mYEg==} + '@module-federation/sdk@0.17.0': + resolution: {integrity: sha512-tjrNaYdDocHZsWu5iXlm83lwEK8A64r4PQB3/kY1cW1iOvggR2RESLAWPxRJXC2cLF8fg8LDKOBdgERZW1HPFA==} - '@module-federation/webpack-bundler-runtime@0.16.0': - resolution: {integrity: sha512-yqIDQTelJZP0Rxml0OXv4Er8Kbdxy7NFh6PCzPwDFWI1SkiokJ3uXQJBvtlxZ3lOnCDYOzdHstqa8sJG4JP02Q==} + '@module-federation/webpack-bundler-runtime@0.17.0': + resolution: {integrity: sha512-o8XtXwqTDlqLgcALOfObcCbqXvUcSDHIEXrkcb4W+I8GJY7IqV0+x6rX4mJ3f59tca9qOF8zsZsOA6BU93Pvgw==} '@napi-rs/wasm-runtime@0.2.12': resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==} + '@napi-rs/wasm-runtime@1.0.1': + resolution: {integrity: sha512-KVlQ/jgywZpixGCKMNwxStmmbYEMyokZpCf2YuIChhfJA2uqfAKNEM8INz7zzTo55iEXfBhIIs3VqYyqzDLj8g==} + '@netlify/framework-info@9.9.3': resolution: {integrity: sha512-kPTF5yemdmadP/+qMDcc3p10NkZKXHXGm2BCFvB192paCNxQrSJz+qb56SO+kvSn9exg+HvhGJ0gfIcVwPjzWw==} engines: {node: ^14.14.0 || >=16.0.0} @@ -3636,6 +3560,101 @@ packages: '@otplib/plugin-thirty-two@12.0.1': resolution: {integrity: sha512-MtT+uqRso909UkbrrYpJ6XFjj9D+x2Py7KjTO9JDPhL0bJUYVu5kFP4TFZW4NFAywrAtFRxOVY261u0qwb93gA==} + '@oxc-resolver/binding-android-arm-eabi@11.6.0': + resolution: {integrity: sha512-UJTf5uZs919qavt9Btvbzkr3eaUu4d+FXBri8AB2BtOezriaTTUvArab2K9fdACQ4yFggTD5ews1l19V/6SW2Q==} + cpu: [arm] + os: [android] + + '@oxc-resolver/binding-android-arm64@11.6.0': + resolution: {integrity: sha512-v17j1WLEAIlyc+6JOWPXcky7dkU3fN8nHTP8KSK05zkkBO0t28R3Q0udmNBiJtVSnw4EFB/fy/3Mu2ItpG6bVQ==} + cpu: [arm64] + os: [android] + + '@oxc-resolver/binding-darwin-arm64@11.6.0': + resolution: {integrity: sha512-ZrU+qd5AKe8s7PZDLCHY23UpbGn1RAkcNd4JYjOTnX22XEjSqLvyC6pCMngTyfgGVJ4zXFubBkRzt/k3xOjNlQ==} + cpu: [arm64] + os: [darwin] + + '@oxc-resolver/binding-darwin-x64@11.6.0': + resolution: {integrity: sha512-qBIlX0X0RSxQHcXQnFpBGKxrDVtj7OdpWFGmrcR3NcndVjZ/wJRPST5uTTM83NfsHyuUeOi/vRZjmDrthvhnSQ==} + cpu: [x64] + os: [darwin] + + '@oxc-resolver/binding-freebsd-x64@11.6.0': + resolution: {integrity: sha512-tTyMlHHNhbkq/oEP/fM8hPZ6lqntHIz6EfOt577/lslrwxC5a/ii0lOOHjPuQtkurpyUBWYPs7Z17EgrZulc4Q==} + cpu: [x64] + os: [freebsd] + + '@oxc-resolver/binding-linux-arm-gnueabihf@11.6.0': + resolution: {integrity: sha512-tYinHy5k9/rujo21mG2jZckJJD7fsceNDl5HOl/eh5NPjSt2vXQv181PVKeITw3+3i+gI1d666w5EtgpiCegRA==} + cpu: [arm] + os: [linux] + + '@oxc-resolver/binding-linux-arm-musleabihf@11.6.0': + resolution: {integrity: sha512-aOlGlSiT9fBgSyiIWvSxbyzaBx3XrgCy6UJRrqBkIvMO9D7W90JmV0RsiLua4w43zJSSrfuQQWqmFCwgIib3Iw==} + cpu: [arm] + os: [linux] + + '@oxc-resolver/binding-linux-arm64-gnu@11.6.0': + resolution: {integrity: sha512-EZ/OuxZA9qQoAANBDb9V4krfYXU3MC+LZ9qY+cE0yMYMIxm7NT5AdR0OaRQqfa3tWIbina1VF7FaMR6rpKvmlA==} + cpu: [arm64] + os: [linux] + + '@oxc-resolver/binding-linux-arm64-musl@11.6.0': + resolution: {integrity: sha512-NpF7sID4NnPetpqDk2eOu6TPUt381Qlpos8nGDcSkAluqSsSGFOPfETEB5VbJeqNVQbepEQX9mOxZygFpW0+nA==} + cpu: [arm64] + os: [linux] + + '@oxc-resolver/binding-linux-ppc64-gnu@11.6.0': + resolution: {integrity: sha512-Sqn9Ha4rxCCpjpfkFi9f9y9phsaBnseaKw+JqHgBQoNMToe+/20A1jwIu9OX+484UuLpduM+wLydgngjnoi7Dg==} + cpu: [ppc64] + os: [linux] + + '@oxc-resolver/binding-linux-riscv64-gnu@11.6.0': + resolution: {integrity: sha512-eFoNcPhImp1FLAQf5U3Nlph4WNWEsdWohSThSTtKPrX+jhPZiVsj3iBC9gjaRwq2Ez4QhP1x7/PSL6mtKnS6rw==} + cpu: [riscv64] + os: [linux] + + '@oxc-resolver/binding-linux-riscv64-musl@11.6.0': + resolution: {integrity: sha512-WQw3CT10aJg7SIc/X1QPrh6lTx2wOLg5IaCu/+Mqlxf1nZBEW3+tV/+y3PzXG0MCRhq7FDTiHaW8MBVAwBineQ==} + cpu: [riscv64] + os: [linux] + + '@oxc-resolver/binding-linux-s390x-gnu@11.6.0': + resolution: {integrity: sha512-p5qcPr/EtGJ2PpeeArL3ifZU/YljWLypeu38+e19z2dyPv8Aoby8tjM+D1VTI8+suMwTkseyove/uu6zIUiqRw==} + cpu: [s390x] + os: [linux] + + '@oxc-resolver/binding-linux-x64-gnu@11.6.0': + resolution: {integrity: sha512-/9M/ieoY5v54k3UjtF9Vw43WQ4bBfed+qRL1uIpFbZcO2qi5aXwVMYnjSd/BoaRtDs5JFV9iOjzHwpw0zdOYZA==} + cpu: [x64] + os: [linux] + + '@oxc-resolver/binding-linux-x64-musl@11.6.0': + resolution: {integrity: sha512-HMtWWHTU7zbwceTFZPAPMMhhWR1nNO2OR60r6i55VprCMvttTWPQl7uLP0AUtAPoU9B/2GqP48rzOuaaKhHnYw==} + cpu: [x64] + os: [linux] + + '@oxc-resolver/binding-wasm32-wasi@11.6.0': + resolution: {integrity: sha512-rDAwr2oqmnG/6LSZJwvO3Bmt/RC3/Q6myyaUmg3P7GhZDyFPrWJONB7NFhPwU2Q4JIpA73ST4LBdhzmGxMTmrw==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + + '@oxc-resolver/binding-win32-arm64-msvc@11.6.0': + resolution: {integrity: sha512-COzy8weljZo2lObWl6ZzW6ypDx1v1rtLdnt7JPjTUARikK1gMzlz9kouQhCtCegNFILx2L2oWw7714fnchqujw==} + cpu: [arm64] + os: [win32] + + '@oxc-resolver/binding-win32-ia32-msvc@11.6.0': + resolution: {integrity: sha512-p2tMRdi91CovjLBApDPD/uEy1/5r7U6iVkfagLYDytgvj6nJ1EAxLUdXbhoe6//50IvDC/5I51nGCdxmOUiXlQ==} + cpu: [ia32] + os: [win32] + + '@oxc-resolver/binding-win32-x64-msvc@11.6.0': + resolution: {integrity: sha512-p6b9q5TACd/y39kDK2HENXqd4lThoVrTkxdvizqd5/VwyHcoSd0cDcIEhHpxvfjc83VsODCBgB/zcjp//TlaqA==} + cpu: [x64] + os: [win32] + '@parcel/watcher-android-arm64@2.5.1': resolution: {integrity: sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==} engines: {node: '>= 10.0.0'} @@ -4274,6 +4293,19 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-tooltip@1.2.7': + resolution: {integrity: sha512-Ap+fNYwKTYJ9pzqW+Xe2HtMRbQ/EeWkj2qykZ6SuEV4iS/o1bZI5ssJbk4D2r8XuDuOBVz/tIx2JObtuqU+5Zw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/react-use-callback-ref@1.1.0': resolution: {integrity: sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==} peerDependencies: @@ -4413,6 +4445,19 @@ packages: '@types/react-dom': optional: true + '@radix-ui/react-visually-hidden@1.2.3': + resolution: {integrity: sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + '@radix-ui/rect@1.1.0': resolution: {integrity: sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg==} @@ -4477,8 +4522,8 @@ packages: react-redux: optional: true - '@rolldown/pluginutils@1.0.0-beta.19': - resolution: {integrity: sha512-3FL3mnMbPu0muGOCaKAhhFEYmqv9eTfPSJRJmANrCwtgK8VuxpsZDGK+m0LYAGoyO8+0j5uRe4PeyPDK1yA/hA==} + '@rolldown/pluginutils@1.0.0-beta.27': + resolution: {integrity: sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==} '@rollup/rollup-android-arm-eabi@4.45.1': resolution: {integrity: sha512-NEySIFvMY0ZQO+utJkgoMiCAjMrGvnbDLHvcmlA33UXJpYBCvlBEbMMtV837uCkS+plG2umfhn0T5mMAxGrlRA==} @@ -4580,60 +4625,60 @@ packages: cpu: [x64] os: [win32] - '@rspack/binding-darwin-arm64@1.4.8': - resolution: {integrity: sha512-PQRNjC3Fc0avpx8Gk+sT5P+HAXxTSzmBA8lU7QLlmbW5GGXO2taVhNstbZ4oxyIX5uDVZpQ2yQ2E0zXirK6/UQ==} + '@rspack/binding-darwin-arm64@1.4.9': + resolution: {integrity: sha512-P0O10aXEaLLrwKXK7muSXl64wGJsLGbJEE97zeFe0mFVFo44m3iVC+KVpRpBFBrXhnL1ylCYsu2mS/dTJ+970g==} cpu: [arm64] os: [darwin] - '@rspack/binding-darwin-x64@1.4.8': - resolution: {integrity: sha512-ZnPZbo1dhhbfevxSS99y8w02xuEbxyiV1HaUie/S8jzy9DPmk+4Br+DddufnibPNU85e3BZKjp+HDFMYkdn6cg==} + '@rspack/binding-darwin-x64@1.4.9': + resolution: {integrity: sha512-eCbjVEkrSpFzLYye8Xd3SJgoaJ+GXCEVXJNLIqqt+BwxAknuVcHOHWFtppCw5/FcPWZkB03fWMah7aW8/ZqDyg==} cpu: [x64] os: [darwin] - '@rspack/binding-linux-arm64-gnu@1.4.8': - resolution: {integrity: sha512-mJK9diM4Gd8RIGO90AZnl27WwUuAOoRplPQv9G+Vxu2baCt1xE1ccf8PntIJ70/rMgsUdnmkR5qQBaGxhAMJvA==} + '@rspack/binding-linux-arm64-gnu@1.4.9': + resolution: {integrity: sha512-OTsco8WagOax9o6W66i//GjgrjhNFFOXhcS/vl81t7Hx5APEpEXX+pnccirH0e67Gs5sNlm/uLVS1cyA/B77Sg==} cpu: [arm64] os: [linux] - '@rspack/binding-linux-arm64-musl@1.4.8': - resolution: {integrity: sha512-+n9QxeDDZKwVB4D6cwpNRJzsCeuwNqd/fwwbMQVTctJ+GhIHlUPsE8y5tXN7euU7kDci81wMBBFlt6LtXNcssA==} + '@rspack/binding-linux-arm64-musl@1.4.9': + resolution: {integrity: sha512-vxnh8TwTX5tquZz8naGd1NIBOESyKAPRemHZUWfAnK1p4WzM+dbTkGeIU7Z1fUzF/AXEbdRQ/omWlvp5nCOOZA==} cpu: [arm64] os: [linux] - '@rspack/binding-linux-x64-gnu@1.4.8': - resolution: {integrity: sha512-rEypDlbIfv9B/DcZ2vYVWs56wo5VWE5oj/TvM9JT+xuqwvVWsN/A2TPMiU6QBgOKGXat3EM/MEgx8NhNZUpkXg==} + '@rspack/binding-linux-x64-gnu@1.4.9': + resolution: {integrity: sha512-MitSilaS23e7EPNqYT9PEr2Zomc51GZSaCRCXscNOica5V/oAVBcEMUFbrNoD4ugohDXM68RvK0kVyFmfYuW+Q==} cpu: [x64] os: [linux] - '@rspack/binding-linux-x64-musl@1.4.8': - resolution: {integrity: sha512-o9OsvJ7olH0JPU9exyIaYTNQ+aaR5CNAiinkxr+LkV2i3DMIi/+pDVveDiodYjVhzZjWfsP/z8QPO4c6Z06bEw==} + '@rspack/binding-linux-x64-musl@1.4.9': + resolution: {integrity: sha512-fdBLz3RPvEEaz91IHXP4pMDNh9Nfl6nkYDmmLBJRu4yHi97j1BEeymrq3lKssy/1kDR70t6T47ZjfRJIgM6nYg==} cpu: [x64] os: [linux] - '@rspack/binding-wasm32-wasi@1.4.8': - resolution: {integrity: sha512-hF5gqT0aQ66VUclM2A9MSB6zVdEJqzp++TAXaShBK/eVBI0R4vWrMfJ2TOdzEsSbg4gXgeG4swURpHva3PKbcA==} + '@rspack/binding-wasm32-wasi@1.4.9': + resolution: {integrity: sha512-yWd5llZHBCsA0S5W0UGuXdQQ5zkZC4PQbOQS7XiblBII9RIMZZKJV/3AsYAHUeskTBPnwYMQsm8QCV52BNAE9A==} cpu: [wasm32] - '@rspack/binding-win32-arm64-msvc@1.4.8': - resolution: {integrity: sha512-umD0XzesJq4nnStv9/2/VOmzNUWHfLMIjeHmiHYHpc7iVC0SkXgIdc6Ac7c+g2q7/V3/MFxL66Y60oy7lQE3fg==} + '@rspack/binding-win32-arm64-msvc@1.4.9': + resolution: {integrity: sha512-3+oG19ye2xOmVGGKHao0EXmvPaiGvaFnxJRQ6tc6T7MSxhOvvDhQ1zmx+9X/wXKv/iytAHXMuoLGLHwdGd7GJg==} cpu: [arm64] os: [win32] - '@rspack/binding-win32-ia32-msvc@1.4.8': - resolution: {integrity: sha512-Uu+F/sxz7GgIMbuCCZVOD1HPjoHQdyrFHi/TE2EmuZzs9Ji9a9mtNJNrKc8+h9YFpaLeade7cbMDjRu4MHxiVA==} + '@rspack/binding-win32-ia32-msvc@1.4.9': + resolution: {integrity: sha512-l9K68LNP2j2QnCFYz17Rea7wdk04m4jnGB6CyRrS0iuanTn+Hvz3wgAn1fqADJxE4dtX+wNbTPOWJr0SrVHccw==} cpu: [ia32] os: [win32] - '@rspack/binding-win32-x64-msvc@1.4.8': - resolution: {integrity: sha512-BVkOfJDZnexHNpGgc/sWENyGrsle1jUQTeUEdSyNYsu4Elsgk/T9gnGK8xyLRd2c6k20M5FN38t0TumCp4DscQ==} + '@rspack/binding-win32-x64-msvc@1.4.9': + resolution: {integrity: sha512-2i4+/E5HjqobNBA86DuqQfqw6mW/jsHGUzUfgwKEKW8I6wLU0Gz7dUcz0fExvr8W5I8f/ccOfqR2bPGnxJ8vNw==} cpu: [x64] os: [win32] - '@rspack/binding@1.4.8': - resolution: {integrity: sha512-VKE+2InUdudBUOn3xMZfK9a6KlOwmSifA0Nupjsh7N9/brcBfJtJGSDCnfrIKCq54FF+QAUCgcNAS0DB4/tZmw==} + '@rspack/binding@1.4.9': + resolution: {integrity: sha512-9EY8OMCNZrwCupQMZccMgrTxWGUQvZGFrLFw/rxfTt+uT4fS4CAbNwHVFxsnROaRd+EE6EXfUpUYu66j6vd4qA==} - '@rspack/core@1.4.8': - resolution: {integrity: sha512-ARHuZ+gx3P//RIUKSjk/riQUn/D5tCwCWbfgeM5pk/Ti2JsgVnqiP9Sksge8JovVPf7b6Zgw73Cq5FpX4aOXeQ==} + '@rspack/core@1.4.9': + resolution: {integrity: sha512-fHEGOzVcyESVfprFTqgeJ7vAnmkmY/nbljaeGsJY4zLmROmkbGTh4xgLEY3O5nEukLfEFbdLapvBqYb5tE/fmA==} engines: {node: '>=16.0.0'} peerDependencies: '@swc/helpers': '>=0.5.1' @@ -4787,68 +4832,68 @@ packages: resolution: {integrity: sha512-LnhVjMWyMQV9ZmeEy26maJk+8HTIbd59cH4F2MJ439k9DqejRisfFNGAPvRYlKETuh9LrImlS8aKsBgKjMA8WA==} engines: {node: '>=14'} - '@swc/core-darwin-arm64@1.12.14': - resolution: {integrity: sha512-HNukQoOKgMsHSETj8vgGGKK3SEcH7Cz6k4bpntCxBKNkO3sH7RcBTDulWGGHJfZaDNix7Rw2ExUVWtLZlzkzXg==} + '@swc/core-darwin-arm64@1.13.1': + resolution: {integrity: sha512-zO6SW/jSMTUORPm6dUZFPUwf+EFWZsaXWMGXadRG6akCofYpoQb8pcY2QZkVr43z8TMka6BtXpyoD/DJ0iOPHQ==} engines: {node: '>=10'} cpu: [arm64] os: [darwin] - '@swc/core-darwin-x64@1.12.14': - resolution: {integrity: sha512-4Ttf3Obtk3MvFrR0e04qr6HfXh4L1Z+K3dRej63TAFuYpo+cPXeOZdPUddAW73lSUGkj+61IHnGPoXD3OQYy4Q==} + '@swc/core-darwin-x64@1.13.1': + resolution: {integrity: sha512-8RjaTZYxrlYKE5PgzZYWSOT4mAsyhIuh30Nu4dnn/2r0Ef68iNCbvX4ynGnFMhOIhqunjQbJf+mJKpwTwdHXhw==} engines: {node: '>=10'} cpu: [x64] os: [darwin] - '@swc/core-linux-arm-gnueabihf@1.12.14': - resolution: {integrity: sha512-zhJOH2KWjtQpzJ27Xjw/RKLVOa1aiEJC2b70xbCwEX6ZTVAl8tKbhkZ3GMphhfVmLJ9gf/2UQR58oxVnsXqX5Q==} + '@swc/core-linux-arm-gnueabihf@1.13.1': + resolution: {integrity: sha512-jEqK6pECs2m4BpL2JA/4CCkq04p6iFOEtVNXTisO+lJ3zwmxlnIEm9UfJZG6VSu8GS9MHRKGB0ieZ1tEdN1qDA==} engines: {node: '>=10'} cpu: [arm] os: [linux] - '@swc/core-linux-arm64-gnu@1.12.14': - resolution: {integrity: sha512-akUAe1YrBqZf1EDdUxahQ8QZnJi8Ts6Ya0jf6GBIMvnXL4Y6QIuvKTRwfNxy7rJ+x9zpzP1Vlh14ZZkSKZ1EGA==} + '@swc/core-linux-arm64-gnu@1.13.1': + resolution: {integrity: sha512-PbkuIOYXO/gQbWQ7NnYIwm59ygNqmUcF8LBeoKvxhx1VtOwE+9KiTfoplOikkPLhMiTzKsd8qentTslbITIg+Q==} engines: {node: '>=10'} cpu: [arm64] os: [linux] - '@swc/core-linux-arm64-musl@1.12.14': - resolution: {integrity: sha512-ZkOOIpSMXuPAjfOXEIAEQcrPOgLi6CaXvA5W+GYnpIpFG21Nd0qb0WbwFRv4K8BRtl993Q21v0gPpOaFHU+wdA==} + '@swc/core-linux-arm64-musl@1.13.1': + resolution: {integrity: sha512-JaqFdBCarIBKiMu5bbAp+kWPMNGg97ej+7KzbKOzWP5pRptqKi86kCDZT3WmjPe8hNG6dvBwbm7Y8JNry5LebQ==} engines: {node: '>=10'} cpu: [arm64] os: [linux] - '@swc/core-linux-x64-gnu@1.12.14': - resolution: {integrity: sha512-71EPPccwJiJUxd2aMwNlTfom2mqWEWYGdbeTju01tzSHsEuD7E6ePlgC3P3ngBqB3urj41qKs87z7zPOswT5Iw==} + '@swc/core-linux-x64-gnu@1.13.1': + resolution: {integrity: sha512-t4cLkku10YECDaakWUH0452WJHIZtrLPRwezt6BdoMntVMwNjvXRX7C8bGuYcKC3YxRW7enZKFpozLhQIQ37oA==} engines: {node: '>=10'} cpu: [x64] os: [linux] - '@swc/core-linux-x64-musl@1.12.14': - resolution: {integrity: sha512-nImF1hZJqKTcl0WWjHqlelOhvuB9rU9kHIw/CmISBUZXogjLIvGyop1TtJNz0ULcz2Oxr3Q2YpwfrzsgvgbGkA==} + '@swc/core-linux-x64-musl@1.13.1': + resolution: {integrity: sha512-fSMwZOaG+3ukUucbEbzz9GhzGhUhXoCPqHe9qW0/Vc2IZRp538xalygKyZynYweH5d9EHux1aj3+IO8/xBaoiA==} engines: {node: '>=10'} cpu: [x64] os: [linux] - '@swc/core-win32-arm64-msvc@1.12.14': - resolution: {integrity: sha512-sABFQFxSuStFoxvEWZUHWYldtB1B4A9eDNFd4Ty50q7cemxp7uoscFoaCqfXSGNBwwBwpS5EiPB6YN4y6hqmLQ==} + '@swc/core-win32-arm64-msvc@1.13.1': + resolution: {integrity: sha512-tweCXK/79vAwj1NhAsYgICy8T1z2QEairmN2BFEBYFBFNMEB1iI1YlXwBkBtuihRvgZrTh1ORusKa4jLYzLCZA==} engines: {node: '>=10'} cpu: [arm64] os: [win32] - '@swc/core-win32-ia32-msvc@1.12.14': - resolution: {integrity: sha512-KBznRB02NASkpepRdWIK4f1AvmaJCDipKWdW1M1xV9QL2tE4aySJFojVuG1+t0tVDkjRfwcZjycQfRoJ4RjD7Q==} + '@swc/core-win32-ia32-msvc@1.13.1': + resolution: {integrity: sha512-zi7hO9D+2R2yQN9D7T10/CAI9KhuXkNkz8tcJOW6+dVPtAk/gsIC5NoGPELjgrAlLL9CS38ZQpLDslLfpP15ng==} engines: {node: '>=10'} cpu: [ia32] os: [win32] - '@swc/core-win32-x64-msvc@1.12.14': - resolution: {integrity: sha512-SymoP2CJHzrYaFKjWvuQljcF7BkTpzaS1vpywv7K9EzdTb5N8qPDvNd+PhWUqBz9JHBhbJxpaeTDQBXF/WWPmw==} + '@swc/core-win32-x64-msvc@1.13.1': + resolution: {integrity: sha512-KubYjzqs/nz3H69ncX/XHKsC8c1xqc7UvonQAj26BhbL22HBsqdAaVutZ+Obho6RMpd3F5qQ95ldavUTWskRrw==} engines: {node: '>=10'} cpu: [x64] os: [win32] - '@swc/core@1.12.14': - resolution: {integrity: sha512-CJSn2vstd17ddWIHBsjuD4OQnn9krQfaq6EO+w9YfId5DKznyPmzxAARlOXG99cC8/3Kli8ysKy6phL43bSr0w==} + '@swc/core@1.13.1': + resolution: {integrity: sha512-jEKKErLC6uwSqA+p6bmZR08usZM5Fpc+HdEu5CAzvye0q43yf1si1kjhHEa9XMkz0A2SAaal3eKCg/YYmtOsCA==} engines: {node: '>=10'} peerDependencies: '@swc/helpers': '>=0.5.17' @@ -4865,68 +4910,68 @@ packages: '@swc/helpers@0.5.17': resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==} - '@swc/html-darwin-arm64@1.12.14': - resolution: {integrity: sha512-qbZBSd2oalqBxGfVwpgT9I7gaCleL05XjuatMZIca94QhvLp0+FhCNqujrdq6Ggcrlk8IVoxtsVS5GTeDH5jAw==} + '@swc/html-darwin-arm64@1.13.1': + resolution: {integrity: sha512-PkzUL/dj5KtcMRSbCMy4ZYTql/92rCBw6fjFt5QvdJCITPC/MQcgEMWWFjj6iHbAAkSv4cJDTtEyZdRKTaKGsw==} engines: {node: '>=10'} cpu: [arm64] os: [darwin] - '@swc/html-darwin-x64@1.12.14': - resolution: {integrity: sha512-ekxCbFri6wGlh48sGSZmKgDqq3viGU29Vqw9MWBGuPFJ1S2PchoLan9ex94Za84sasn6Xirf/ylzDhqZQ9611A==} + '@swc/html-darwin-x64@1.13.1': + resolution: {integrity: sha512-W0CpvqgPQYtaP5fLG1DIKQkfpygVYQzU0+b62nxbDhv5d2p+n7moHocym7xCM3oJnXAzqAklQlUvQlcrVycFuw==} engines: {node: '>=10'} cpu: [x64] os: [darwin] - '@swc/html-linux-arm-gnueabihf@1.12.14': - resolution: {integrity: sha512-xV7J8fC1U4f3H0bpeBckCTHTG8oqGFOfWxgLk5//1ZBtCAncRzrdjNkZ1kOd0bsUBFj438wW+aJ/VtrMQiBhZQ==} + '@swc/html-linux-arm-gnueabihf@1.13.1': + resolution: {integrity: sha512-zWAZddBDO0/8FKyAm5QYJae3H0ihDdK6Mq/Bu4VUuTkFU64mz5i5WAhAHSQg57SyDywMNefBTLp2Lc7yo0SdSA==} engines: {node: '>=10'} cpu: [arm] os: [linux] - '@swc/html-linux-arm64-gnu@1.12.14': - resolution: {integrity: sha512-wjUyMqxYSp/NGEXwdyEVfE/P/1DNt090KGEM/UbH55i1oyIYqq4T+FJacn7ITtypJp4lYQ7s7Bb5bB/BX+TZ1w==} + '@swc/html-linux-arm64-gnu@1.13.1': + resolution: {integrity: sha512-72Iap52NSQ3AOyOwJ3NiOLJ1wkyYdYxM9WMVhEtxB21lRDRvtVRtrFS/ssXM29hTt6kKQQeqjEbk36ZDRJdJew==} engines: {node: '>=10'} cpu: [arm64] os: [linux] - '@swc/html-linux-arm64-musl@1.12.14': - resolution: {integrity: sha512-odpXvMMKZ6dhCPxbWmr6P2QJzE2RcSdZdgmleFF+CMNEc8tG6UHrIpc5Vezcf5vUc4OGseqAFjFM+ZcDBKj4rg==} + '@swc/html-linux-arm64-musl@1.13.1': + resolution: {integrity: sha512-3eSwAcTxE3g9pyn3Htm4qLCZdumKP4/vAYub/a32L9arqio/DXNoizHAu7H1qyXUX9UH1iTaryPLXwpsrMR+Bg==} engines: {node: '>=10'} cpu: [arm64] os: [linux] - '@swc/html-linux-x64-gnu@1.12.14': - resolution: {integrity: sha512-oLqGIB9u7X+SI0Zu2kxAOgAzEOr53n030esUcXzwGRn0BzCxAF2NaQav9HwKrCboQfK3SDtVGx/7Hy7metgacA==} + '@swc/html-linux-x64-gnu@1.13.1': + resolution: {integrity: sha512-z+L1ilgzTulBCr3mLys9BktHbCaEsr9Hk1tKnwnPZ67IPA/ti4BZVVogAt32vB6EL2svEOnG6af1HUvTE+MRPw==} engines: {node: '>=10'} cpu: [x64] os: [linux] - '@swc/html-linux-x64-musl@1.12.14': - resolution: {integrity: sha512-90eIBQ2x73DgfHNuG7X8Us2yx3gSnUUYWXm5qc76qOg1KgwLzNYzFOMks7D6R8IwwWxTZLiS3ty9MnTMlkSLXg==} + '@swc/html-linux-x64-musl@1.13.1': + resolution: {integrity: sha512-bWfR4BWq61BWdYU7dyrBfwND5OAUd03Z7Y3gsYHqj9sFxPz2VVMkJ6gqjmR9MJseHNj/2Z5Baqzutqlo+WtQjg==} engines: {node: '>=10'} cpu: [x64] os: [linux] - '@swc/html-win32-arm64-msvc@1.12.14': - resolution: {integrity: sha512-rnVKeOnnhBAiNOqrUf3KsJGaJe+dy0Dq+Ghia4E6Xr2nmBLV+lXgurFeFS8yPNBJrGvRB7Z0JG8siSBJULdYrA==} + '@swc/html-win32-arm64-msvc@1.13.1': + resolution: {integrity: sha512-/O+3sjnpvNW8uDD1vdCddDJ8GtsOE3ihjdV6dpSBW++Z7kj5j4QKyayU+T3bBxUsW56kiMk6iv7AhYhmUdRnHA==} engines: {node: '>=10'} cpu: [arm64] os: [win32] - '@swc/html-win32-ia32-msvc@1.12.14': - resolution: {integrity: sha512-ERuyVbpgh5GQApyawrbx9mPkTsd+XfSbPUEbF75WbhY04C0sBMqmncA5u3ezpaKTQZP0A/ZPJoTRXcNqh4tADw==} + '@swc/html-win32-ia32-msvc@1.13.1': + resolution: {integrity: sha512-SFkBGorkSs1xW2RlRI4Kk/N11Pah7/NjKQhHhY0ogbP0yp8ivMXE50tY8efL+6uOi2MF+jjXJfCNhm5yNDwTvA==} engines: {node: '>=10'} cpu: [ia32] os: [win32] - '@swc/html-win32-x64-msvc@1.12.14': - resolution: {integrity: sha512-ji7lXLL5Os5SQfnF0YKprhnrSki+4OgkkjPYNcjoYs6gFfXg+U9h2p88uSx8K6OkmbUkkAQ2xRHzAYCQFo39BQ==} + '@swc/html-win32-x64-msvc@1.13.1': + resolution: {integrity: sha512-xAe6n6J15vx9ZIksBPtyG5e+gkZCC6QZ/9g9ufilGkcO/tSGA4yHacwSrXnurRkhqhk8I9idw9x3iBfoNkAofA==} engines: {node: '>=10'} cpu: [x64] os: [win32] - '@swc/html@1.12.14': - resolution: {integrity: sha512-UmIz+HiWgn63XkIv8ihUgOQTFijcbNtvwVdWdpbqvpbaXQGI6mS0DQz+T9ZxnlndDJkW0J5l1zkOxw39w4bU2w==} + '@swc/html@1.13.1': + resolution: {integrity: sha512-Yj3p6uouxVzvcLdJpXzWyvQp1Y5x8MTpN6Toq8XL4UE6i1EkILSgbXFX59c+Dm0UIyQdlZNrSJjRPhAJ425hZw==} engines: {node: '>=14'} '@swc/types@0.1.23': @@ -5038,9 +5083,6 @@ packages: '@types/bonjour@3.5.13': resolution: {integrity: sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==} - '@types/chai@5.2.2': - resolution: {integrity: sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==} - '@types/codemirror@5.60.16': resolution: {integrity: sha512-V/yHdamffSS075jit+fDxaOAmdP2liok8NSNJnAZfDJErzOheuygHZEhAJrfmk5TEyM32MhkZjwo/idX791yxw==} @@ -5149,9 +5191,6 @@ packages: '@types/debug@4.1.12': resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} - '@types/deep-eql@4.0.2': - resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} - '@types/eslint-scope@3.7.7': resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} @@ -5194,8 +5233,10 @@ packages: '@types/history@4.7.11': resolution: {integrity: sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==} - '@types/hoist-non-react-statics@3.3.6': - resolution: {integrity: sha512-lPByRJUer/iN/xa4qpyL0qmL11DqNW81iU/IG1S3uvRUq4oKagz8VCxZjiWkumgt66YT3vOdDgZ0o32sGKtCEw==} + '@types/hoist-non-react-statics@3.3.7': + resolution: {integrity: sha512-PQTyIulDkIDro8P+IHbKCsw7U2xxBYflVzW/FgWdCAePD9xGSidgA76/GeJ6lBKoblyhf9pBY763gbrN+1dI8g==} + peerDependencies: + '@types/react': '*' '@types/html-minifier-terser@6.1.0': resolution: {integrity: sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==} @@ -5260,11 +5301,14 @@ packages: '@types/node@17.0.45': resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==} - '@types/node@18.19.119': - resolution: {integrity: sha512-d0F6m9itIPaKnrvEMlzE48UjwZaAnFW7Jwibacw9MNdqadjKNpUm9tfJYDwmShJmgqcoqYUX3EMKO1+RWiuuNg==} + '@types/node@18.19.120': + resolution: {integrity: sha512-WtCGHFXnVI8WHLxDAt5TbnCM4eSE+nI0QN2NJtwzcgMhht2eNz6V9evJrk+lwC8bCY8OWV5Ym8Jz7ZEyGnKnMA==} - '@types/node@22.16.4': - resolution: {integrity: sha512-PYRhNtZdm2wH/NT2k/oAJ6/f2VD2N2Dag0lGlx2vWgMSJXGNmlce5MiTQzoWAiIJtso30mjnfQCOKVH+kAQC/g==} + '@types/node@22.16.5': + resolution: {integrity: sha512-bJFoMATwIGaxxx8VJPeM8TonI8t579oRvgAuT8zFugJsJZgzqv0Fu8Mhp68iecjzG7cnN3mO2dJQ5uUM2EFrgQ==} + + '@types/node@24.1.0': + resolution: {integrity: sha512-ut5FthK5moxFKH2T1CUOC6ctR67rQRvvHdFLCD2Ql6KXmMuCrjsSsRI9UsLCm9M18BMwClv4pn327UvB7eeO1w==} '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} @@ -5392,23 +5436,23 @@ packages: typescript: optional: true - '@typescript-eslint/eslint-plugin@8.37.0': - resolution: {integrity: sha512-jsuVWeIkb6ggzB+wPCsR4e6loj+rM72ohW6IBn2C+5NCvfUVY8s33iFPySSVXqtm5Hu29Ne/9bnA0JmyLmgenA==} + '@typescript-eslint/eslint-plugin@8.38.0': + resolution: {integrity: sha512-CPoznzpuAnIOl4nhj4tRr4gIPj5AfKgkiJmGQDaq+fQnRJTYlcBjbX3wbciGmpoPf8DREufuPRe1tNMZnGdanA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: '@typescript-eslint/parser': ^8.35.1 eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/parser@8.37.0': - resolution: {integrity: sha512-kVIaQE9vrN9RLCQMQ3iyRlVJpTiDUY6woHGb30JDkfJErqrQEmtdWH3gV0PBAfGZgQXoqzXOO0T3K6ioApbbAA==} + '@typescript-eslint/parser@8.38.0': + resolution: {integrity: sha512-Zhy8HCvBUEfBECzIl1PKqF4p11+d0aUJS1GeUiuqK9WmOug8YCmC4h4bjyBvMyAMI9sbRczmrYL5lKg/YMbrcQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/project-service@8.37.0': - resolution: {integrity: sha512-BIUXYsbkl5A1aJDdYJCBAo8rCEbAvdquQ8AnLb6z5Lp1u3x5PNgSSx9A/zqYc++Xnr/0DVpls8iQ2cJs/izTXA==} + '@typescript-eslint/project-service@8.38.0': + resolution: {integrity: sha512-dbK7Jvqcb8c9QfH01YB6pORpqX1mn5gDZc9n63Ak/+jD67oWXn3Gs0M6vddAN+eDXBCS5EmNWzbSxsn9SzFWWg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <5.9.0' @@ -5425,12 +5469,12 @@ packages: resolution: {integrity: sha512-+Ncj0Q6DT8ZHYNp8h5RndW4Siv52kiPpHEz/i8Sj2rh2y8ZCc5pKSHSslk+eZi0Bdj+/+swNOmDNcL2CrlaEnA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/scope-manager@8.37.0': - resolution: {integrity: sha512-0vGq0yiU1gbjKob2q691ybTg9JX6ShiVXAAfm2jGf3q0hdP6/BruaFjL/ManAR/lj05AvYCH+5bbVo0VtzmjOA==} + '@typescript-eslint/scope-manager@8.38.0': + resolution: {integrity: sha512-WJw3AVlFFcdT9Ri1xs/lg8LwDqgekWXWhH3iAF+1ZM+QPd7oxQ6jvtW/JPwzAScxitILUIFs0/AnQ/UWHzbATQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.37.0': - resolution: {integrity: sha512-1/YHvAVTimMM9mmlPvTec9NP4bobA1RkDbMydxG8omqwJJLEW/Iy2C4adsAESIXU3WGLXFHSZUU+C9EoFWl4Zg==} + '@typescript-eslint/tsconfig-utils@8.38.0': + resolution: {integrity: sha512-Lum9RtSE3EroKk/bYns+sPOodqb2Fv50XOl/gMviMKNvanETUuUcC9ObRbzrJ4VSd2JalPqgSAavwrPiPvnAiQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <5.9.0' @@ -5455,8 +5499,8 @@ packages: typescript: optional: true - '@typescript-eslint/type-utils@8.37.0': - resolution: {integrity: sha512-SPkXWIkVZxhgwSwVq9rqj/4VFo7MnWwVaRNznfQDc/xPYHjXnPfLWn+4L6FF1cAz6e7dsqBeMawgl7QjUMj4Ow==} + '@typescript-eslint/type-utils@8.38.0': + resolution: {integrity: sha512-c7jAvGEZVf0ao2z+nnz8BUaHZD09Agbh+DY7qvBQqLiz8uJzRgVPj5YvOh8I8uEiH8oIUGIfHzMwUcGVco/SJg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -5474,8 +5518,8 @@ packages: resolution: {integrity: sha512-xpU1rMQfnnNZxpHN6YUfr18sGOMcpC9hvt54fupcU6N1qMCagEtkRt1U15x086oJAgAITJGa67454ffAoCxv/w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/types@8.37.0': - resolution: {integrity: sha512-ax0nv7PUF9NOVPs+lmQ7yIE7IQmAf8LGcXbMvHX5Gm+YJUYNAl340XkGnrimxZ0elXyoQJuN5sbg6C4evKA4SQ==} + '@typescript-eslint/types@8.38.0': + resolution: {integrity: sha512-wzkUfX3plUqij4YwWaJyqhiPE5UCRVlFpKn1oCRn2O1bJ592XxWJj8ROQ3JD5MYXLORW84063z3tZTb/cs4Tyw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@typescript-eslint/typescript-estree@5.62.0': @@ -5505,8 +5549,8 @@ packages: typescript: optional: true - '@typescript-eslint/typescript-estree@8.37.0': - resolution: {integrity: sha512-zuWDMDuzMRbQOM+bHyU4/slw27bAUEcKSKKs3hcv2aNnc/tvE/h7w60dwVw8vnal2Pub6RT1T7BI8tFZ1fE+yg==} + '@typescript-eslint/typescript-estree@8.38.0': + resolution: {integrity: sha512-fooELKcAKzxux6fA6pxOflpNS0jc+nOQEEOipXFNjSlBS6fqrJOVY/whSn70SScHrcJ2LDsxWrneFoWYSVfqhQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <5.9.0' @@ -5529,8 +5573,8 @@ packages: peerDependencies: eslint: ^8.57.0 || ^9.0.0 - '@typescript-eslint/utils@8.37.0': - resolution: {integrity: sha512-TSFvkIW6gGjN2p6zbXo20FzCABbyUAuq6tBvNRGsKdsSQ6a7rnV6ADfZ7f4iI3lIiXc4F4WWvtUfDw9CJ9pO5A==} + '@typescript-eslint/utils@8.38.0': + resolution: {integrity: sha512-hHcMA86Hgt+ijJlrD8fX0j1j8w4C92zue/8LOPAFioIno+W0+L7KqE8QZKCcPGc/92Vs9x36w/4MPTJhqXdyvg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -5548,8 +5592,8 @@ packages: resolution: {integrity: sha512-ej06rfct0kalfJgIR8nTR7dF1mgfF83hkylrYas7IAElHfgw4zx99BUGa6VrnHZ1PkxdJBp5PgcO2FmmlOoaRQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/visitor-keys@8.37.0': - resolution: {integrity: sha512-YzfhzcTnZVPiLfP/oeKtDp2evwvHLMe0LOy7oe+hb9KKIumLNohYS9Hgp1ifwpu42YWxhZE8yieggz6JpqO/1w==} + '@typescript-eslint/visitor-keys@8.38.0': + resolution: {integrity: sha512-pWrTcoFNWuwHlA9CvlfSsGWs14JxfN1TH25zM5L7o0pRLhsoZkDnTsXfQRJBEWJoV5DL0jf+Z+sxiud+K0mq1g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@ungap/structured-clone@1.3.0': @@ -5685,18 +5729,15 @@ packages: peerDependencies: vite: ^3.0.0 || ^4.0.0 - '@vitejs/plugin-react@4.6.0': - resolution: {integrity: sha512-5Kgff+m8e2PB+9j51eGHEpn5kUzRKH2Ry0qGoe8ItJg7pqnkPrYPkDQZGgGmTa0EGarHrkjLvOdU3b1fzI8otQ==} + '@vitejs/plugin-react@4.7.0': + resolution: {integrity: sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: - vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0-beta.0 + vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 '@vitest/expect@2.1.9': resolution: {integrity: sha512-UJCIkTBenHeKT1TTlKMJWy1laZewsRIzYighyYiJKZreqtdxSos/S1t+ktRMQWu2CKqaarrkeszJx1cgC5tGZw==} - '@vitest/expect@3.2.4': - resolution: {integrity: sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==} - '@vitest/mocker@2.1.9': resolution: {integrity: sha512-tVL6uJgoUdi6icpxmdrn5YNo3g3Dxv+IHJBr0GXHaEdTcw3F+cPKnsXFhli6nO+f/6SDKPHEK1UN+k+TQv0Ehg==} peerDependencies: @@ -5708,47 +5749,21 @@ packages: vite: optional: true - '@vitest/mocker@3.2.4': - resolution: {integrity: sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==} - peerDependencies: - msw: ^2.4.9 - vite: ^5.0.0 || ^6.0.0 || ^7.0.0-0 - peerDependenciesMeta: - msw: - optional: true - vite: - optional: true - '@vitest/pretty-format@2.1.9': resolution: {integrity: sha512-KhRIdGV2U9HOUzxfiHmY8IFHTdqtOhIzCpd8WRdJiE7D/HUcZVD0EgQCVjm+Q9gkUXWgBvMmTtZgIG48wq7sOQ==} - '@vitest/pretty-format@3.2.4': - resolution: {integrity: sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==} - '@vitest/runner@2.1.9': resolution: {integrity: sha512-ZXSSqTFIrzduD63btIfEyOmNcBmQvgOVsPNPe0jYtESiXkhd8u2erDLnMxmGrDCwHCCHE7hxwRDCT3pt0esT4g==} - '@vitest/runner@3.2.4': - resolution: {integrity: sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==} - '@vitest/snapshot@2.1.9': resolution: {integrity: sha512-oBO82rEjsxLNJincVhLhaxxZdEtV0EFHMK5Kmx5sJ6H9L183dHECjiefOAdnqpIgT5eZwT04PoggUnW88vOBNQ==} - '@vitest/snapshot@3.2.4': - resolution: {integrity: sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==} - '@vitest/spy@2.1.9': resolution: {integrity: sha512-E1B35FwzXXTs9FHNK6bDszs7mtydNi5MIfUWpceJ8Xbfb1gBMscAnwLbEu+B44ed6W3XjL9/ehLPHR1fkf1KLQ==} - '@vitest/spy@3.2.4': - resolution: {integrity: sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==} - '@vitest/utils@2.1.9': resolution: {integrity: sha512-v0psaMSkNJ3A2NMrUEHFRzJtDPFn+/VWZ5WxImB21T9fjucJRmS7xCS3ppEnARb9y11OAzaD+P2Ps+b+BGX5iQ==} - '@vitest/utils@3.2.4': - resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==} - '@webassemblyjs/ast@1.14.1': resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==} @@ -5814,32 +5829,32 @@ packages: resolution: {integrity: sha512-aiATs7pSutzda/rq8fnuPwTglyVwjM22bNnK2ZgjrpAjQHSSl3lztd2f9evst1W/qnC58DRz7T7QndUDumAR4Q==} engines: {node: '>=14.15.0'} - '@zag-js/core@1.18.3': - resolution: {integrity: sha512-FuB4ClNyob6Fqx57mEWbPui59uU1x9I6MvTyJunnPjJMWr1M0bxsgrqkePoEzt+osel8qLMyaa1oHaxszSNxKQ==} + '@zag-js/core@1.19.0': + resolution: {integrity: sha512-f1h4q/quCnz6X+mxEsDUSBDrUu6d3EO00X+DztdewU6KVBBW6ZYIIHtSRYT4FSsSV/Wi4OuhxwUKtlXDervhVg==} - '@zag-js/dom-query@1.18.3': - resolution: {integrity: sha512-mPj2xvjxXyB++aGoIIZZ0cCbMu+nfLvks/Q2fe6SgfSaTdGw8jvJtp4F5Qs3Q+MOHbIZRnAqYyBLv56qav3AeA==} + '@zag-js/dom-query@1.19.0': + resolution: {integrity: sha512-h8TyG79w9AsCKWqAGJ5Uvk/qYfyfCry5F+3K/+uCdkIFTDiuAoNU6TitHwKaYvVsvD8WmOrNHNfZR8X3UwVakw==} - '@zag-js/focus-trap@1.18.3': - resolution: {integrity: sha512-EhAJb7xIHaUYP+WxlmN2SKEvsqTWih0FUX4Jf+rh2xr4v/dd/09ki+/yQjtTxVrKshCGe4LxCGeiws7mTkOZrA==} + '@zag-js/focus-trap@1.19.0': + resolution: {integrity: sha512-3Csc+Mot+uclRL9wqapHvRyT09Ga5Zhul0v8HmHER+YxQM011ZmobrvwPd87izKdiyVcEc4QhlsFmqbF++jzQQ==} - '@zag-js/presence@1.18.3': - resolution: {integrity: sha512-7trktNiKRKr/Z4mXdfk7bQIN17tiQFAIMZ7odjurpOfRNYxmrZ67v7y2I55rxatbMY4x+tMZcgaUSrmTbu8vBw==} + '@zag-js/presence@1.19.0': + resolution: {integrity: sha512-w0T42WDrdkmkZ+5WlkycVHQlBlR+bEb7l8XeCrrrGd3czemU3pGXfH5Ns394hkjOF1/qlwKyG0VwbQ5RZlWvHA==} - '@zag-js/react@1.18.3': - resolution: {integrity: sha512-iuQLdAjDeIWu8VStdWtdTnTaLi8d8AeiLqMdEWebn98JoKvbmMfy9qR2jV3/xwG+XWt1a0GDvl7D1SmP97iThw==} + '@zag-js/react@1.19.0': + resolution: {integrity: sha512-XCwg3YWqlvDo3+jFIkrjJJF8wX8sG+2MjyXnakwjUqnHMxx0ZMOpVNkQTGiy378NDnfbnEnZTNSwzZUJAyXyqQ==} peerDependencies: react: '>=18.0.0' react-dom: '>=18.0.0' - '@zag-js/store@1.18.3': - resolution: {integrity: sha512-9Df5Zr1pi9B7+2/OFdhyVDOkUaFUWLqgyKYx+DGaHh1LC6QbPJKoOsQ1zr23Q8G4//Dh1vNnES1SXojJA5+Nlg==} + '@zag-js/store@1.19.0': + resolution: {integrity: sha512-yPvmf+COJdebxzIFnh0xa2eVfP7LETHPycmTET5MyrRlWVqDK2+51w0wcXk3LBsmanTC1kvndD2ZlIXHxrJ/AA==} - '@zag-js/types@1.18.3': - resolution: {integrity: sha512-M99ji5nha2/C2IQFkTkIA4SMR5w9rE0havAN55P8qpVtFzbcncCkSUZ4O0J2I4pA+NnJpCF5TcT1t7WnsyWlZQ==} + '@zag-js/types@1.19.0': + resolution: {integrity: sha512-4oJPNGO00+fmIElaJayHSW8nuc0Dgb//u639BsHn3GzW1gsekfHcn8ZmNsBBp7yOBhrEBYpe9qp6YpKQYsmFcQ==} - '@zag-js/utils@1.18.3': - resolution: {integrity: sha512-yS8M286qUp6gf4d4tnnsNehdGIlI0Feuug9QiWkWSTbAUNmGJyh5cmjNxNSuLWVCPMREC89BIIWq09s113zPig==} + '@zag-js/utils@1.19.0': + resolution: {integrity: sha512-wFMIOs3vePtVtEr9nmipZoCi6YLf2diWX+q+rbUfKKwMvejiP++lWpoU7oZEB/C6B9yoE77AF+OyjDQyqQaqRg==} '@zkochan/js-yaml@0.0.6': resolution: {integrity: sha512-nzvgl3VfhcELQ8LyVrYOru+UtAy1nrygk2+AGbTm8a5YcO6o8lSjAT+pfg3vJWxIoZKOUhrK6UU7xW/+00kQrg==} @@ -5967,8 +5982,8 @@ packages: peerDependencies: algoliasearch: '>= 3.1 < 6' - algoliasearch@5.33.0: - resolution: {integrity: sha512-WdgSkmyTec5n2W2FA2/7Q7TCSajCV0X6w57u3H5GHnw0UCp/G5xb33/Jx1FX3uMtz17P3wGEzMCP82d0LJqMow==} + algoliasearch@5.34.0: + resolution: {integrity: sha512-wioVnf/8uuG8Bmywhk5qKIQ3wzCCtmdvicPRb0fa3kKYGGoewfgDqLEaET1MV2NbTc3WGpPv+AgauLVBp1nB9A==} engines: {node: '>= 14.0.0'} allof-merge@0.6.6: @@ -6736,8 +6751,8 @@ packages: resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} engines: {node: '>= 0.6'} - compression@1.8.0: - resolution: {integrity: sha512-k6WLKfunuqCYD3t6AsuPGvQWaKwuLLh2/xHNcX4qE+vIfDNXpSqnrhwA7O53R7WVQUnt8dVAIW+YHr7xTgOgGA==} + compression@1.8.1: + resolution: {integrity: sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==} engines: {node: '>= 0.8.0'} compute-gcd@1.2.1: @@ -7039,8 +7054,8 @@ packages: engines: {node: ^16.0.0 || ^18.0.0 || >=20.0.0} hasBin: true - cypress@14.5.1: - resolution: {integrity: sha512-vYBeZKW3UAtxwv5mFuSlOBCYhyO0H86TeDKRJ7TgARyHiREIaiDjeHtqjzrXRFrdz9KnNavqlm+z+hklC7v8XQ==} + cypress@14.5.2: + resolution: {integrity: sha512-O4E4CEBqDHLDrJD/dfStHPcM+8qFgVVZ89Li7xDU0yL/JxO/V0PEcfF2I8aGa7uA2MGNLkNUAnghPM83UcHOJw==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true @@ -7571,8 +7586,8 @@ packages: engines: {node: '>=0.10.0'} hasBin: true - electron-to-chromium@1.5.183: - resolution: {integrity: sha512-vCrDBYjQCAEefWGjlK3EpoSKfKbT10pR4XXPdn65q7snuNOZnthoVpBfZPykmDapOKfoD+MMIPG8ZjKyyc9oHA==} + electron-to-chromium@1.5.189: + resolution: {integrity: sha512-y9D1ntS1ruO/pZ/V2FtLE+JXLQe28XoRpZ7QCCo0T8LdQladzdcOVQZH/IWLVJvCw12OGMb6hYOeOAjntCmJRQ==} emoji-regex@10.4.0: resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==} @@ -7727,8 +7742,8 @@ packages: engines: {node: '>=12'} hasBin: true - esbuild@0.25.6: - resolution: {integrity: sha512-GVuzuUwtdsghE3ocJ9Bs8PNoF13HNQ5TXbEi2AhvVb8xU1Iwt9Fos9FEamfoee+u/TOsn7GUWc04lz46n2bbTg==} + esbuild@0.25.8: + resolution: {integrity: sha512-vVC0USHGtMi8+R4Kz8rt6JhEWLxsv9Rnu/lGYbPR8u47B+DCBksq9JarW0zOO7bs37hyOK1l2/oqtbciutL5+Q==} engines: {node: '>=18'} hasBin: true @@ -7769,8 +7784,8 @@ packages: typescript: optional: true - eslint-config-prettier@9.1.0: - resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} + eslint-config-prettier@9.1.2: + resolution: {integrity: sha512-iI1f+D2ViGn+uvv5HuHVUamg8ll4tN+JRHGc6IJi4TP9Kl976C57fzPXgseXNs8v0iA8aSJpHsTWjDb9QJamGQ==} hasBin: true peerDependencies: eslint: '>=7.0.0' @@ -7870,20 +7885,6 @@ packages: deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. hasBin: true - eslint@9.30.1: - resolution: {integrity: sha512-zmxXPNMOXmwm9E0yQLi5uqXHs7uq2UIiqEKo3Gq+3fwo1XrJ+hijAZImyF7hclW3E6oHz43Yk3RP8at6OTKflQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - hasBin: true - peerDependencies: - jiti: '*' - peerDependenciesMeta: - jiti: - optional: true - - espree@10.4.0: - resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - espree@9.6.1: resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -8080,6 +8081,9 @@ packages: resolution: {integrity: sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==} engines: {node: '>=0.8.0'} + fd-package-json@2.0.0: + resolution: {integrity: sha512-jKmm9YtsNXN789RS/0mSzOC1NUq9mkVd65vbSSVsKdjGvYXBuE4oWe2QOEoFeRmJg+lPuZxpmrfFclNhoRMneQ==} + fd-slicer@1.1.0: resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} @@ -8113,10 +8117,6 @@ packages: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} engines: {node: ^10.12.0 || >=12.0.0} - file-entry-cache@8.0.0: - resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} - engines: {node: '>=16.0.0'} - file-loader@6.2.0: resolution: {integrity: sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==} engines: {node: '>= 10.13.0'} @@ -8175,10 +8175,6 @@ packages: resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} engines: {node: ^10.12.0 || >=12.0.0} - flat-cache@4.0.1: - resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} - engines: {node: '>=16'} - flat@5.0.2: resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} hasBin: true @@ -8216,18 +8212,23 @@ packages: resolution: {integrity: sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==} engines: {node: '>= 14.17'} - form-data@3.0.3: - resolution: {integrity: sha512-q5YBMeWy6E2Un0nMGWMgI65MAKtaylxfNJGJxpGh45YDciZB4epbWpaAfImil6CPAPTYB4sh0URQNDRIZG5F2w==} + form-data@3.0.4: + resolution: {integrity: sha512-f0cRzm6dkyVYV3nPoooP8XlccPQukegwhAnpoLcXy+X+A8KfpGOoXwDr9FLZd3wzgLaBGQBE3lY93Zm/i1JvIQ==} engines: {node: '>= 6'} - form-data@4.0.3: - resolution: {integrity: sha512-qsITQPfmvMOSAdeyZ+12I1c+CKSstAFAwu+97zrnWAbIr5u8wfsExUzCesVLC8NgHuRUqNN4Zy6UPWUTRGslcA==} + form-data@4.0.4: + resolution: {integrity: sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==} engines: {node: '>= 6'} format@0.2.2: resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==} engines: {node: '>=0.4.x'} + formatly@0.2.4: + resolution: {integrity: sha512-lIN7GpcvX/l/i24r/L9bnJ0I8Qn01qijWpQpDDvTLL29nKqSaJJu4h20+7VJ6m2CAhQ2/En/GbxDiHCzq/0MyA==} + engines: {node: '>=18.3.0'} + hasBin: true + formdata-node@4.4.1: resolution: {integrity: sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==} engines: {node: '>= 12.20'} @@ -8281,8 +8282,8 @@ packages: resolution: {integrity: sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - fs-monkey@1.0.6: - resolution: {integrity: sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg==} + fs-monkey@1.1.0: + resolution: {integrity: sha512-QMUezzXWII9EV5aTFXW1UBVUO77wYPpjqIF8/AviUCThNeSYZykpoTixUeaNNBwmCev0AMDWMAni+f8Hxb1IFw==} fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} @@ -8423,10 +8424,6 @@ packages: resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} engines: {node: '>=8'} - globals@14.0.0: - resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} - engines: {node: '>=18'} - globals@15.15.0: resolution: {integrity: sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==} engines: {node: '>=18'} @@ -9265,6 +9262,10 @@ packages: resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==} hasBin: true + jiti@2.4.2: + resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} + hasBin: true + joi@17.13.3: resolution: {integrity: sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==} @@ -9282,9 +9283,6 @@ packages: js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - js-tokens@9.0.1: - resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==} - js-yaml@3.14.1: resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} hasBin: true @@ -9468,6 +9466,14 @@ packages: resolution: {integrity: sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==} engines: {node: '>= 8'} + knip@5.62.0: + resolution: {integrity: sha512-hfTUVzmrMNMT1khlZfAYmBABeehwWUUrizLQoLamoRhSFkygsGIXWx31kaWKBgEaIVL77T3Uz7IxGvSw+CvQ6A==} + engines: {node: '>=18.18.0'} + hasBin: true + peerDependencies: + '@types/node': '>=18' + typescript: '>=5.0.4' + kolorist@1.8.0: resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==} @@ -9841,6 +9847,11 @@ packages: engines: {node: '>= 18'} hasBin: true + marked@16.1.1: + resolution: {integrity: sha512-ij/2lXfCRT71L6u0M29tJPhP0bM5shLL3u5BePhFwPELj2blMJ6GDtD7PfJhRLhJ/c2UwrK17ySVcDzy2YHjHQ==} + engines: {node: '>= 20'} + hasBin: true + material-colors@1.2.6: resolution: {integrity: sha512-6qE4B9deFBIa9YSpOc9O0Sgc43zTeVYbgDT5veRKSlB2+ZuHNoVVxA1L/ckMUayV9Ay9y7Z/SZCLcGteW9i7bg==} @@ -10001,8 +10012,8 @@ packages: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} - mermaid@11.8.1: - resolution: {integrity: sha512-VSXJLqP1Sqw5sGr273mhvpPRhXwE6NlmMSqBZQw+yZJoAJkOIPPn/uT3teeCBx60Fkt5zEI3FrH2eVT0jXRDzw==} + mermaid@11.9.0: + resolution: {integrity: sha512-YdPXn9slEwO0omQfQIsW6vS84weVQftIyyTGAZCwM//MGhPzL1+l6vO6bkf0wnP4tHigH1alZ5Ooy3HXI2gOag==} methods@1.1.2: resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} @@ -10433,8 +10444,8 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - napi-postinstall@0.3.0: - resolution: {integrity: sha512-M7NqKyhODKV1gRLdkwE7pDsZP2/SC2a2vHkOYh9MCpKMbWVfyVfUw5MaH83Fv6XMjxr5jryUp3IDDL9rlxsTeA==} + napi-postinstall@0.3.2: + resolution: {integrity: sha512-tWVJxJHmBWLy69PvO96TZMZDrzmw5KeiZBz3RHmiM2XZ9grBJ2WgMAFVVg25nqp3ZjTFUs2Ftw1JhscL3Teliw==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} hasBin: true @@ -10754,8 +10765,8 @@ packages: resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} engines: {node: '>= 0.8'} - on-headers@1.0.2: - resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==} + on-headers@1.1.0: + resolution: {integrity: sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==} engines: {node: '>= 0.8'} once@1.4.0: @@ -10822,6 +10833,9 @@ packages: resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} engines: {node: '>= 0.4'} + oxc-resolver@11.6.0: + resolution: {integrity: sha512-Yj3Wy+zLljtFL8ByKOljaPhiXjJWVe875p5MHaT5VAHoEmzeg1BuswM8s/E7ErpJ3s0fsXJfUYJE4v1bl7N65g==} + p-cancelable@3.0.0: resolution: {integrity: sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==} engines: {node: '>=12.20'} @@ -11085,8 +11099,8 @@ packages: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} - picomatch@4.0.2: - resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} + picomatch@4.0.3: + resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} engines: {node: '>=12'} pidtree@0.6.0: @@ -11617,8 +11631,8 @@ packages: resolution: {integrity: sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==} engines: {node: '>=0.10.0'} - posthog-js@1.257.0: - resolution: {integrity: sha512-Ujg9RGtWVCu+4tmlRpALSy2ZOZI6JtieSYXIDDdgMWm167KYKvTtbMPHdoBaPWcNu0Km+1hAIBnQFygyn30KhA==} + posthog-js@1.257.1: + resolution: {integrity: sha512-29kk3IO/LkPQ8E1cds6a2sWr5iN4BovgL+EMzRK9hQXbI6D3FJnQ7zLU6EUpktt6pHnqGpfO3BTEcflcDYkHBg==} peerDependencies: '@rrweb/types': 2.0.0-alpha.17 rrweb-snapshot: 2.0.0-alpha.17 @@ -11660,12 +11674,12 @@ packages: '@volar/vue-typescript': optional: true - prettier-plugin-organize-imports@4.1.0: - resolution: {integrity: sha512-5aWRdCgv645xaa58X8lOxzZoiHAldAPChljr/MT0crXVOWTZ+Svl4hIWlz+niYSlO6ikE5UXkN1JrRvIP2ut0A==} + prettier-plugin-organize-imports@4.2.0: + resolution: {integrity: sha512-Zdy27UhlmyvATZi67BTnLcKTo8fm6Oik59Sz6H64PgZJVs6NJpPD1mT240mmJn62c98/QaL+r3kx9Q3gRpDajg==} peerDependencies: prettier: '>=2.0' typescript: '>=2.9' - vue-tsc: ^2.1.0 + vue-tsc: ^2.1.0 || 3 peerDependenciesMeta: vue-tsc: optional: true @@ -12744,6 +12758,10 @@ packages: resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} + smol-toml@1.4.1: + resolution: {integrity: sha512-CxdwHXyYTONGHThDbq5XdwbFsuY4wlClRGejfE2NtwUtiHYsP1QtNsHb/hnj31jKYSchztJsaA8pSQoVzkfCFg==} + engines: {node: '>= 18'} + snake-case@3.0.4: resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} @@ -12984,8 +13002,9 @@ packages: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} - strip-literal@3.0.0: - resolution: {integrity: sha512-TcccoMhJOM3OebGhSBEmp3UZ2SfDMZUEBdRA/9ynfLi8yYajyWX3JiXArcJt4Umh4vISpspkQIY8ZZoCqjbviA==} + strip-json-comments@5.0.2: + resolution: {integrity: sha512-4X2FR3UwhNUE9G49aIsJW5hRRR3GXGTBTZRMfv568O60ojM8HcWjV/VxAxCDW3SUND33O6ZY66ZuRcdkj73q2g==} + engines: {node: '>=14.16'} strong-log-transformer@2.1.0: resolution: {integrity: sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA==} @@ -13200,18 +13219,10 @@ packages: resolution: {integrity: sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==} engines: {node: '>=14.0.0'} - tinyrainbow@2.0.0: - resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} - engines: {node: '>=14.0.0'} - tinyspy@3.0.2: resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==} engines: {node: '>=14.0.0'} - tinyspy@4.0.3: - resolution: {integrity: sha512-t2T/WLB2WRgZ9EpE4jgPJ9w+i66UZfDc8wHh0xrwiRNN+UwH98GIJkTeZqX9rg0i0ptwzqW+uYeIF0T4F8LR7A==} - engines: {node: '>=14.0.0'} - tldts-core@6.1.86: resolution: {integrity: sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==} @@ -13375,38 +13386,38 @@ packages: tunnel-agent@0.6.0: resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} - turbo-darwin-64@2.5.0: - resolution: {integrity: sha512-fP1hhI9zY8hv0idym3hAaXdPi80TLovmGmgZFocVAykFtOxF+GlfIgM/l4iLAV9ObIO4SUXPVWHeBZQQ+Hpjag==} + turbo-darwin-64@2.5.5: + resolution: {integrity: sha512-RYnTz49u4F5tDD2SUwwtlynABNBAfbyT2uU/brJcyh5k6lDLyNfYKdKmqd3K2ls4AaiALWrFKVSBsiVwhdFNzQ==} cpu: [x64] os: [darwin] - turbo-darwin-arm64@2.5.0: - resolution: {integrity: sha512-p9sYq7kXH7qeJwIQE86cOWv/xNqvow846l6c/qWc26Ib1ci5W7V0sI5thsrP3eH+VA0d+SHalTKg5SQXgNQBWA==} + turbo-darwin-arm64@2.5.5: + resolution: {integrity: sha512-Tk+ZeSNdBobZiMw9aFypQt0DlLsWSFWu1ymqsAdJLuPoAH05qCfYtRxE1pJuYHcJB5pqI+/HOxtJoQ40726Btw==} cpu: [arm64] os: [darwin] - turbo-linux-64@2.5.0: - resolution: {integrity: sha512-1iEln2GWiF3iPPPS1HQJT6ZCFXynJPd89gs9SkggH2EJsj3eRUSVMmMC8y6d7bBbhBFsiGGazwFIYrI12zs6uQ==} + turbo-linux-64@2.5.5: + resolution: {integrity: sha512-2/XvMGykD7VgsvWesZZYIIVXMlgBcQy+ZAryjugoTcvJv8TZzSU/B1nShcA7IAjZ0q7OsZ45uP2cOb8EgKT30w==} cpu: [x64] os: [linux] - turbo-linux-arm64@2.5.0: - resolution: {integrity: sha512-bKBcbvuQHmsX116KcxHJuAcppiiBOfivOObh2O5aXNER6mce7YDDQJy00xQQNp1DhEfcSV2uOsvb3O3nN2cbcA==} + turbo-linux-arm64@2.5.5: + resolution: {integrity: sha512-DW+8CjCjybu0d7TFm9dovTTVg1VRnlkZ1rceO4zqsaLrit3DgHnN4to4uwyuf9s2V/BwS3IYcRy+HG9BL596Iw==} cpu: [arm64] os: [linux] - turbo-windows-64@2.5.0: - resolution: {integrity: sha512-9BCo8oQ7BO7J0K913Czbc3tw8QwLqn2nTe4E47k6aVYkM12ASTScweXPTuaPFP5iYXAT6z5Dsniw704Ixa5eGg==} + turbo-windows-64@2.5.5: + resolution: {integrity: sha512-q5p1BOy8ChtSZfULuF1BhFMYIx6bevXu4fJ+TE/hyNfyHJIfjl90Z6jWdqAlyaFLmn99X/uw+7d6T/Y/dr5JwQ==} cpu: [x64] os: [win32] - turbo-windows-arm64@2.5.0: - resolution: {integrity: sha512-OUHCV+ueXa3UzfZ4co/ueIHgeq9B2K48pZwIxKSm5VaLVuv8M13MhM7unukW09g++dpdrrE1w4IOVgxKZ0/exg==} + turbo-windows-arm64@2.5.5: + resolution: {integrity: sha512-AXbF1KmpHUq3PKQwddMGoKMYhHsy5t1YBQO8HZ04HLMR0rWv9adYlQ8kaeQJTko1Ay1anOBFTqaxfVOOsu7+1Q==} cpu: [arm64] os: [win32] - turbo@2.5.0: - resolution: {integrity: sha512-PvSRruOsitjy6qdqwIIyolv99+fEn57gP6gn4zhsHTEcCYgXPhv6BAxzAjleS8XKpo+Y582vTTA9nuqYDmbRuA==} + turbo@2.5.5: + resolution: {integrity: sha512-eZ7wI6KjtT1eBqCnh2JPXWNUAxtoxxfi6VdBdZFvil0ychCOTxbm7YLRBi1JSt7U3c+u3CLxpoPxLdvr/Npr3A==} hasBin: true tweetnacl@0.14.5: @@ -13495,6 +13506,9 @@ packages: undici-types@6.21.0: resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + undici-types@7.8.0: + resolution: {integrity: sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==} + unicode-canonical-property-names-ecmascript@2.0.1: resolution: {integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==} engines: {node: '>=4'} @@ -13808,11 +13822,6 @@ packages: engines: {node: ^18.0.0 || >=20.0.0} hasBin: true - vite-node@3.2.4: - resolution: {integrity: sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==} - engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} - hasBin: true - vite-tsconfig-paths@5.1.4: resolution: {integrity: sha512-cYj0LRuLV2c2sMqhqhGpaO3LretdtMn/BVX4cPLanIZuwwrkVl+lK84E/miEXkCHWXuq65rhNN4rXsBcOB3S4w==} peerDependencies: @@ -13880,46 +13889,6 @@ packages: terser: optional: true - vite@7.0.4: - resolution: {integrity: sha512-SkaSguuS7nnmV7mfJ8l81JGBFV7Gvzp8IzgE8A8t23+AxuNX61Q5H1Tpz5efduSN7NHC8nQXD3sKQKZAu5mNEA==} - engines: {node: ^20.19.0 || >=22.12.0} - hasBin: true - peerDependencies: - '@types/node': ^20.19.0 || >=22.12.0 - jiti: '>=1.21.0' - less: ^4.0.0 - lightningcss: ^1.21.0 - sass: ^1.70.0 - sass-embedded: ^1.70.0 - stylus: '>=0.54.8' - sugarss: ^5.0.0 - terser: ^5.16.0 - tsx: ^4.8.1 - yaml: ^2.4.2 - peerDependenciesMeta: - '@types/node': - optional: true - jiti: - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - sass-embedded: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - tsx: - optional: true - yaml: - optional: true - vitest@2.1.9: resolution: {integrity: sha512-MSmPM9REYqDGBI8439mA4mWhV5sKmDlBKWIYbA3lRb2PTHACE0mgKwA8yQ2xq9vxDTuk4iPrECBAEW2aoFXY0Q==} engines: {node: ^18.0.0 || >=20.0.0} @@ -13945,34 +13914,6 @@ packages: jsdom: optional: true - vitest@3.2.4: - resolution: {integrity: sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==} - engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} - hasBin: true - peerDependencies: - '@edge-runtime/vm': '*' - '@types/debug': ^4.1.12 - '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 - '@vitest/browser': 3.2.4 - '@vitest/ui': 3.2.4 - happy-dom: '*' - jsdom: '*' - peerDependenciesMeta: - '@edge-runtime/vm': - optional: true - '@types/debug': - optional: true - '@types/node': - optional: true - '@vitest/browser': - optional: true - '@vitest/ui': - optional: true - happy-dom: - optional: true - jsdom: - optional: true - void-elements@2.0.1: resolution: {integrity: sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung==} engines: {node: '>=0.10.0'} @@ -14019,6 +13960,10 @@ packages: engines: {node: '>=12.0.0'} hasBin: true + walk-up-path@4.0.0: + resolution: {integrity: sha512-3hu+tD8YzSLGuFYtPRb48vdhKMi0KQV5sn+uWr8+7dMEq/2G/dtLrdDinkLjqq5TIbIBjYJ4Ax/n3YiaW7QM8A==} + engines: {node: 20 || >=22} + warning@4.0.3: resolution: {integrity: sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==} @@ -14405,9 +14350,18 @@ packages: resolution: {integrity: sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==} engines: {node: '>=12.20'} + zod-validation-error@3.5.3: + resolution: {integrity: sha512-OT5Y8lbUadqVZCsnyFaTQ4/O2mys4tj7PqhdbBCp7McPwvIEKfPtdA6QfPeFQK2/Rz5LgwmAXRJTugBNBi0btw==} + engines: {node: '>=18.0.0'} + peerDependencies: + zod: ^3.25.0 || ^4.0.0 + zod@3.23.8: resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} + zod@3.25.76: + resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} + zone.js@0.13.3: resolution: {integrity: sha512-MKPbmZie6fASC/ps4dkmIhaT5eonHkEt6eAy80K42tAm0G2W+AahLJjbfi6X9NPdciOE9GRFTTM8u2IiF6O3ww==} @@ -14418,112 +14372,112 @@ snapshots: '@adobe/css-tools@4.4.3': {} - '@algolia/autocomplete-core@1.17.9(@algolia/client-search@5.33.0)(algoliasearch@5.33.0)(search-insights@2.17.3)': + '@algolia/autocomplete-core@1.17.9(@algolia/client-search@5.34.0)(algoliasearch@5.34.0)(search-insights@2.17.3)': dependencies: - '@algolia/autocomplete-plugin-algolia-insights': 1.17.9(@algolia/client-search@5.33.0)(algoliasearch@5.33.0)(search-insights@2.17.3) - '@algolia/autocomplete-shared': 1.17.9(@algolia/client-search@5.33.0)(algoliasearch@5.33.0) + '@algolia/autocomplete-plugin-algolia-insights': 1.17.9(@algolia/client-search@5.34.0)(algoliasearch@5.34.0)(search-insights@2.17.3) + '@algolia/autocomplete-shared': 1.17.9(@algolia/client-search@5.34.0)(algoliasearch@5.34.0) transitivePeerDependencies: - '@algolia/client-search' - algoliasearch - search-insights - '@algolia/autocomplete-plugin-algolia-insights@1.17.9(@algolia/client-search@5.33.0)(algoliasearch@5.33.0)(search-insights@2.17.3)': + '@algolia/autocomplete-plugin-algolia-insights@1.17.9(@algolia/client-search@5.34.0)(algoliasearch@5.34.0)(search-insights@2.17.3)': dependencies: - '@algolia/autocomplete-shared': 1.17.9(@algolia/client-search@5.33.0)(algoliasearch@5.33.0) + '@algolia/autocomplete-shared': 1.17.9(@algolia/client-search@5.34.0)(algoliasearch@5.34.0) search-insights: 2.17.3 transitivePeerDependencies: - '@algolia/client-search' - algoliasearch - '@algolia/autocomplete-preset-algolia@1.17.9(@algolia/client-search@5.33.0)(algoliasearch@5.33.0)': + '@algolia/autocomplete-preset-algolia@1.17.9(@algolia/client-search@5.34.0)(algoliasearch@5.34.0)': dependencies: - '@algolia/autocomplete-shared': 1.17.9(@algolia/client-search@5.33.0)(algoliasearch@5.33.0) - '@algolia/client-search': 5.33.0 - algoliasearch: 5.33.0 + '@algolia/autocomplete-shared': 1.17.9(@algolia/client-search@5.34.0)(algoliasearch@5.34.0) + '@algolia/client-search': 5.34.0 + algoliasearch: 5.34.0 - '@algolia/autocomplete-shared@1.17.9(@algolia/client-search@5.33.0)(algoliasearch@5.33.0)': + '@algolia/autocomplete-shared@1.17.9(@algolia/client-search@5.34.0)(algoliasearch@5.34.0)': dependencies: - '@algolia/client-search': 5.33.0 - algoliasearch: 5.33.0 + '@algolia/client-search': 5.34.0 + algoliasearch: 5.34.0 - '@algolia/client-abtesting@5.33.0': + '@algolia/client-abtesting@5.34.0': dependencies: - '@algolia/client-common': 5.33.0 - '@algolia/requester-browser-xhr': 5.33.0 - '@algolia/requester-fetch': 5.33.0 - '@algolia/requester-node-http': 5.33.0 + '@algolia/client-common': 5.34.0 + '@algolia/requester-browser-xhr': 5.34.0 + '@algolia/requester-fetch': 5.34.0 + '@algolia/requester-node-http': 5.34.0 - '@algolia/client-analytics@5.33.0': + '@algolia/client-analytics@5.34.0': dependencies: - '@algolia/client-common': 5.33.0 - '@algolia/requester-browser-xhr': 5.33.0 - '@algolia/requester-fetch': 5.33.0 - '@algolia/requester-node-http': 5.33.0 + '@algolia/client-common': 5.34.0 + '@algolia/requester-browser-xhr': 5.34.0 + '@algolia/requester-fetch': 5.34.0 + '@algolia/requester-node-http': 5.34.0 - '@algolia/client-common@5.33.0': {} + '@algolia/client-common@5.34.0': {} - '@algolia/client-insights@5.33.0': + '@algolia/client-insights@5.34.0': dependencies: - '@algolia/client-common': 5.33.0 - '@algolia/requester-browser-xhr': 5.33.0 - '@algolia/requester-fetch': 5.33.0 - '@algolia/requester-node-http': 5.33.0 + '@algolia/client-common': 5.34.0 + '@algolia/requester-browser-xhr': 5.34.0 + '@algolia/requester-fetch': 5.34.0 + '@algolia/requester-node-http': 5.34.0 - '@algolia/client-personalization@5.33.0': + '@algolia/client-personalization@5.34.0': dependencies: - '@algolia/client-common': 5.33.0 - '@algolia/requester-browser-xhr': 5.33.0 - '@algolia/requester-fetch': 5.33.0 - '@algolia/requester-node-http': 5.33.0 + '@algolia/client-common': 5.34.0 + '@algolia/requester-browser-xhr': 5.34.0 + '@algolia/requester-fetch': 5.34.0 + '@algolia/requester-node-http': 5.34.0 - '@algolia/client-query-suggestions@5.33.0': + '@algolia/client-query-suggestions@5.34.0': dependencies: - '@algolia/client-common': 5.33.0 - '@algolia/requester-browser-xhr': 5.33.0 - '@algolia/requester-fetch': 5.33.0 - '@algolia/requester-node-http': 5.33.0 + '@algolia/client-common': 5.34.0 + '@algolia/requester-browser-xhr': 5.34.0 + '@algolia/requester-fetch': 5.34.0 + '@algolia/requester-node-http': 5.34.0 - '@algolia/client-search@5.33.0': + '@algolia/client-search@5.34.0': dependencies: - '@algolia/client-common': 5.33.0 - '@algolia/requester-browser-xhr': 5.33.0 - '@algolia/requester-fetch': 5.33.0 - '@algolia/requester-node-http': 5.33.0 + '@algolia/client-common': 5.34.0 + '@algolia/requester-browser-xhr': 5.34.0 + '@algolia/requester-fetch': 5.34.0 + '@algolia/requester-node-http': 5.34.0 '@algolia/events@4.0.1': {} - '@algolia/ingestion@1.33.0': + '@algolia/ingestion@1.34.0': dependencies: - '@algolia/client-common': 5.33.0 - '@algolia/requester-browser-xhr': 5.33.0 - '@algolia/requester-fetch': 5.33.0 - '@algolia/requester-node-http': 5.33.0 + '@algolia/client-common': 5.34.0 + '@algolia/requester-browser-xhr': 5.34.0 + '@algolia/requester-fetch': 5.34.0 + '@algolia/requester-node-http': 5.34.0 - '@algolia/monitoring@1.33.0': + '@algolia/monitoring@1.34.0': dependencies: - '@algolia/client-common': 5.33.0 - '@algolia/requester-browser-xhr': 5.33.0 - '@algolia/requester-fetch': 5.33.0 - '@algolia/requester-node-http': 5.33.0 + '@algolia/client-common': 5.34.0 + '@algolia/requester-browser-xhr': 5.34.0 + '@algolia/requester-fetch': 5.34.0 + '@algolia/requester-node-http': 5.34.0 - '@algolia/recommend@5.33.0': + '@algolia/recommend@5.34.0': dependencies: - '@algolia/client-common': 5.33.0 - '@algolia/requester-browser-xhr': 5.33.0 - '@algolia/requester-fetch': 5.33.0 - '@algolia/requester-node-http': 5.33.0 + '@algolia/client-common': 5.34.0 + '@algolia/requester-browser-xhr': 5.34.0 + '@algolia/requester-fetch': 5.34.0 + '@algolia/requester-node-http': 5.34.0 - '@algolia/requester-browser-xhr@5.33.0': + '@algolia/requester-browser-xhr@5.34.0': dependencies: - '@algolia/client-common': 5.33.0 + '@algolia/client-common': 5.34.0 - '@algolia/requester-fetch@5.33.0': + '@algolia/requester-fetch@5.34.0': dependencies: - '@algolia/client-common': 5.33.0 + '@algolia/client-common': 5.34.0 - '@algolia/requester-node-http@5.33.0': + '@algolia/requester-node-http@5.34.0': dependencies: - '@algolia/client-common': 5.33.0 + '@algolia/client-common': 5.34.0 '@alloc/quick-lru@5.2.0': {} @@ -14544,11 +14498,11 @@ snapshots: transitivePeerDependencies: - chokidar - '@angular-devkit/build-angular@16.2.16(@angular/compiler-cli@16.2.12(@angular/compiler@16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3)))(typescript@5.1.6))(@angular/service-worker@16.2.12(@angular/common@16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3))(rxjs@7.8.2))(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3)))(@swc/core@1.12.14)(@types/node@22.16.4)(html-webpack-plugin@5.6.3(webpack@5.94.0(@swc/core@1.12.14)(esbuild@0.18.17)))(karma@6.4.4)(lightningcss@1.30.1)(tailwindcss@3.4.14)(typescript@5.1.6)': + '@angular-devkit/build-angular@16.2.16(@angular/compiler-cli@16.2.12(@angular/compiler@16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3)))(typescript@5.1.6))(@angular/service-worker@16.2.12(@angular/common@16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3))(rxjs@7.8.2))(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3)))(@swc/core@1.13.1)(@types/node@22.16.5)(html-webpack-plugin@5.6.3(webpack@5.94.0(@swc/core@1.13.1)(esbuild@0.18.17)))(karma@6.4.4)(lightningcss@1.30.1)(tailwindcss@3.4.14)(typescript@5.1.6)': dependencies: '@ampproject/remapping': 2.2.1 '@angular-devkit/architect': 0.1602.16(chokidar@3.5.3) - '@angular-devkit/build-webpack': 0.1602.16(chokidar@3.5.3)(webpack-dev-server@4.15.1(webpack@5.94.0(@swc/core@1.12.14)(esbuild@0.18.17)))(webpack@5.94.0(@swc/core@1.12.14)(esbuild@0.18.17)) + '@angular-devkit/build-webpack': 0.1602.16(chokidar@3.5.3)(webpack-dev-server@4.15.1(webpack@5.94.0(@swc/core@1.13.1)(esbuild@0.18.17)))(webpack@5.94.0(@swc/core@1.13.1)(esbuild@0.18.17)) '@angular-devkit/core': 16.2.16(chokidar@3.5.3) '@angular/compiler-cli': 16.2.12(@angular/compiler@16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3)))(typescript@5.1.6) '@babel/core': 7.22.9 @@ -14562,17 +14516,17 @@ snapshots: '@babel/runtime': 7.22.6 '@babel/template': 7.22.5 '@discoveryjs/json-ext': 0.5.7 - '@ngtools/webpack': 16.2.16(@angular/compiler-cli@16.2.12(@angular/compiler@16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3)))(typescript@5.1.6))(typescript@5.1.6)(webpack@5.94.0(@swc/core@1.12.14)(esbuild@0.18.17)) - '@vitejs/plugin-basic-ssl': 1.0.1(vite@4.5.5(@types/node@22.16.4)(less@4.1.3)(lightningcss@1.30.1)(sass@1.64.1)(terser@5.19.2)) + '@ngtools/webpack': 16.2.16(@angular/compiler-cli@16.2.12(@angular/compiler@16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3)))(typescript@5.1.6))(typescript@5.1.6)(webpack@5.94.0(@swc/core@1.13.1)(esbuild@0.18.17)) + '@vitejs/plugin-basic-ssl': 1.0.1(vite@4.5.5(@types/node@22.16.5)(less@4.1.3)(lightningcss@1.30.1)(sass@1.64.1)(terser@5.19.2)) ansi-colors: 4.1.3 autoprefixer: 10.4.14(postcss@8.4.31) - babel-loader: 9.1.3(@babel/core@7.22.9)(webpack@5.94.0(@swc/core@1.12.14)(esbuild@0.18.17)) + babel-loader: 9.1.3(@babel/core@7.22.9)(webpack@5.94.0(@swc/core@1.13.1)(esbuild@0.18.17)) babel-plugin-istanbul: 6.1.1 browserslist: 4.25.1 chokidar: 3.5.3 - copy-webpack-plugin: 11.0.0(webpack@5.94.0(@swc/core@1.12.14)(esbuild@0.18.17)) + copy-webpack-plugin: 11.0.0(webpack@5.94.0(@swc/core@1.13.1)(esbuild@0.18.17)) critters: 0.0.20 - css-loader: 6.8.1(webpack@5.94.0(@swc/core@1.12.14)(esbuild@0.18.17)) + css-loader: 6.8.1(webpack@5.94.0(@swc/core@1.13.1)(esbuild@0.18.17)) esbuild-wasm: 0.18.17 fast-glob: 3.3.1 guess-parser: 0.4.22(typescript@5.1.6) @@ -14581,11 +14535,11 @@ snapshots: jsonc-parser: 3.2.0 karma-source-map-support: 1.4.0 less: 4.1.3 - less-loader: 11.1.0(less@4.1.3)(webpack@5.94.0(@swc/core@1.12.14)(esbuild@0.18.17)) - license-webpack-plugin: 4.0.2(webpack@5.94.0(@swc/core@1.12.14)(esbuild@0.18.17)) + less-loader: 11.1.0(less@4.1.3)(webpack@5.94.0(@swc/core@1.13.1)(esbuild@0.18.17)) + license-webpack-plugin: 4.0.2(webpack@5.94.0(@swc/core@1.13.1)(esbuild@0.18.17)) loader-utils: 3.2.1 magic-string: 0.30.1 - mini-css-extract-plugin: 2.7.6(webpack@5.94.0(@swc/core@1.12.14)(esbuild@0.18.17)) + mini-css-extract-plugin: 2.7.6(webpack@5.94.0(@swc/core@1.13.1)(esbuild@0.18.17)) mrmime: 1.0.1 open: 8.4.2 ora: 5.4.1 @@ -14593,25 +14547,25 @@ snapshots: picomatch: 2.3.1 piscina: 4.0.0 postcss: 8.4.31 - postcss-loader: 7.3.3(postcss@8.4.31)(typescript@5.1.6)(webpack@5.94.0(@swc/core@1.12.14)(esbuild@0.18.17)) + postcss-loader: 7.3.3(postcss@8.4.31)(typescript@5.1.6)(webpack@5.94.0(@swc/core@1.13.1)(esbuild@0.18.17)) resolve-url-loader: 5.0.0 rxjs: 7.8.1 sass: 1.64.1 - sass-loader: 13.3.2(sass@1.64.1)(webpack@5.94.0(@swc/core@1.12.14)(esbuild@0.18.17)) + sass-loader: 13.3.2(sass@1.64.1)(webpack@5.94.0(@swc/core@1.13.1)(esbuild@0.18.17)) semver: 7.5.4 - source-map-loader: 4.0.1(webpack@5.94.0(@swc/core@1.12.14)(esbuild@0.18.17)) + source-map-loader: 4.0.1(webpack@5.94.0(@swc/core@1.13.1)(esbuild@0.18.17)) source-map-support: 0.5.21 terser: 5.19.2 text-table: 0.2.0 tree-kill: 1.2.2 tslib: 2.6.1 typescript: 5.1.6 - vite: 4.5.5(@types/node@22.16.4)(less@4.1.3)(lightningcss@1.30.1)(sass@1.64.1)(terser@5.19.2) - webpack: 5.94.0(@swc/core@1.12.14)(esbuild@0.25.6) - webpack-dev-middleware: 6.1.2(webpack@5.94.0(@swc/core@1.12.14)(esbuild@0.18.17)) - webpack-dev-server: 4.15.1(webpack@5.94.0(@swc/core@1.12.14)(esbuild@0.18.17)) + vite: 4.5.5(@types/node@22.16.5)(less@4.1.3)(lightningcss@1.30.1)(sass@1.64.1)(terser@5.19.2) + webpack: 5.94.0(@swc/core@1.13.1)(esbuild@0.18.17) + webpack-dev-middleware: 6.1.2(webpack@5.94.0(@swc/core@1.13.1)(esbuild@0.18.17)) + webpack-dev-server: 4.15.1(webpack@5.94.0(@swc/core@1.13.1)(esbuild@0.18.17)) webpack-merge: 5.9.0 - webpack-subresource-integrity: 5.1.0(html-webpack-plugin@5.6.3(webpack@5.94.0(@swc/core@1.12.14)(esbuild@0.18.17)))(webpack@5.94.0(@swc/core@1.12.14)(esbuild@0.18.17)) + webpack-subresource-integrity: 5.1.0(html-webpack-plugin@5.6.3(webpack@5.94.0(@swc/core@1.13.1)(esbuild@0.18.17)))(webpack@5.94.0(@swc/core@1.13.1)(esbuild@0.18.17)) optionalDependencies: '@angular/service-worker': 16.2.12(@angular/common@16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3))(rxjs@7.8.2))(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3)) esbuild: 0.18.17 @@ -14635,12 +14589,12 @@ snapshots: - utf-8-validate - webpack-cli - '@angular-devkit/build-webpack@0.1602.16(chokidar@3.5.3)(webpack-dev-server@4.15.1(webpack@5.94.0(@swc/core@1.12.14)(esbuild@0.18.17)))(webpack@5.94.0(@swc/core@1.12.14)(esbuild@0.18.17))': + '@angular-devkit/build-webpack@0.1602.16(chokidar@3.5.3)(webpack-dev-server@4.15.1(webpack@5.94.0(@swc/core@1.13.1)(esbuild@0.18.17)))(webpack@5.94.0(@swc/core@1.13.1)(esbuild@0.18.17))': dependencies: '@angular-devkit/architect': 0.1602.16(chokidar@3.5.3) rxjs: 7.8.1 - webpack: 5.94.0(@swc/core@1.12.14)(esbuild@0.25.6) - webpack-dev-server: 4.15.1(webpack@5.94.0(@swc/core@1.12.14)(esbuild@0.18.17)) + webpack: 5.94.0(@swc/core@1.13.1)(esbuild@0.18.17) + webpack-dev-server: 4.15.1(webpack@5.94.0(@swc/core@1.13.1)(esbuild@0.18.17)) transitivePeerDependencies: - chokidar @@ -14720,14 +14674,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@angular-eslint/schematics@16.2.0(@angular/cli@16.2.16(chokidar@3.5.3))(@swc/core@1.12.14)(eslint@8.57.1)(typescript@5.1.6)': + '@angular-eslint/schematics@16.2.0(@angular/cli@16.2.16(chokidar@3.5.3))(@swc/core@1.13.1)(eslint@8.57.1)(typescript@5.1.6)': dependencies: '@angular-eslint/eslint-plugin': 16.2.0(eslint@8.57.1)(typescript@5.1.6) '@angular-eslint/eslint-plugin-template': 16.2.0(eslint@8.57.1)(typescript@5.1.6) '@angular/cli': 16.2.16(chokidar@3.5.3) - '@nx/devkit': 16.5.1(nx@16.5.1(@swc/core@1.12.14)) + '@nx/devkit': 16.5.1(nx@16.5.1(@swc/core@1.13.1)) ignore: 5.2.4 - nx: 16.5.1(@swc/core@1.12.14) + nx: 16.5.1(@swc/core@1.13.1) strip-json-comments: 3.1.1 tmp: 0.2.1 transitivePeerDependencies: @@ -16470,12 +16424,12 @@ snapshots: '@bufbuild/buf-win32-arm64': 1.55.1 '@bufbuild/buf-win32-x64': 1.55.1 - '@bufbuild/protobuf@2.6.0': {} + '@bufbuild/protobuf@2.6.1': {} '@bufbuild/protocompile@0.0.1(@bufbuild/buf@1.55.1)': dependencies: '@bufbuild/buf': 1.55.1 - '@bufbuild/protobuf': 2.6.0 + '@bufbuild/protobuf': 2.6.1 fflate: 0.8.2 '@changesets/apply-release-plan@7.0.12': @@ -16639,19 +16593,19 @@ snapshots: '@colors/colors@1.5.0': {} - '@connectrpc/connect-node@2.0.2(@bufbuild/protobuf@2.6.0)(@connectrpc/connect@2.0.2(@bufbuild/protobuf@2.6.0))': + '@connectrpc/connect-node@2.0.2(@bufbuild/protobuf@2.6.1)(@connectrpc/connect@2.0.2(@bufbuild/protobuf@2.6.1))': dependencies: - '@bufbuild/protobuf': 2.6.0 - '@connectrpc/connect': 2.0.2(@bufbuild/protobuf@2.6.0) + '@bufbuild/protobuf': 2.6.1 + '@connectrpc/connect': 2.0.2(@bufbuild/protobuf@2.6.1) - '@connectrpc/connect-web@2.0.2(@bufbuild/protobuf@2.6.0)(@connectrpc/connect@2.0.2(@bufbuild/protobuf@2.6.0))': + '@connectrpc/connect-web@2.0.2(@bufbuild/protobuf@2.6.1)(@connectrpc/connect@2.0.2(@bufbuild/protobuf@2.6.1))': dependencies: - '@bufbuild/protobuf': 2.6.0 - '@connectrpc/connect': 2.0.2(@bufbuild/protobuf@2.6.0) + '@bufbuild/protobuf': 2.6.1 + '@connectrpc/connect': 2.0.2(@bufbuild/protobuf@2.6.1) - '@connectrpc/connect@2.0.2(@bufbuild/protobuf@2.6.0)': + '@connectrpc/connect@2.0.2(@bufbuild/protobuf@2.6.1)': dependencies: - '@bufbuild/protobuf': 2.6.0 + '@bufbuild/protobuf': 2.6.1 '@csstools/cascade-layer-name-parser@2.0.5(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)': dependencies: @@ -16932,7 +16886,7 @@ snapshots: combined-stream: 1.0.8 extend: 3.0.2 forever-agent: 0.6.1 - form-data: 4.0.3 + form-data: 4.0.4 http-signature: 1.4.0 is-typedarray: 1.0.0 isstream: 0.1.2 @@ -16952,16 +16906,18 @@ snapshots: transitivePeerDependencies: - supports-color + '@devcontainers/cli@0.80.0': {} + '@discoveryjs/json-ext@0.5.7': {} '@docsearch/css@3.9.0': {} - '@docsearch/react@3.9.0(@algolia/client-search@5.33.0)(@types/react@19.1.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.3)': + '@docsearch/react@3.9.0(@algolia/client-search@5.34.0)(@types/react@19.1.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.3)': dependencies: - '@algolia/autocomplete-core': 1.17.9(@algolia/client-search@5.33.0)(algoliasearch@5.33.0)(search-insights@2.17.3) - '@algolia/autocomplete-preset-algolia': 1.17.9(@algolia/client-search@5.33.0)(algoliasearch@5.33.0) + '@algolia/autocomplete-core': 1.17.9(@algolia/client-search@5.34.0)(algoliasearch@5.34.0)(search-insights@2.17.3) + '@algolia/autocomplete-preset-algolia': 1.17.9(@algolia/client-search@5.34.0)(algoliasearch@5.34.0) '@docsearch/css': 3.9.0 - algoliasearch: 5.33.0 + algoliasearch: 5.34.0 optionalDependencies: '@types/react': 19.1.2 react: 18.3.1 @@ -16970,7 +16926,7 @@ snapshots: transitivePeerDependencies: - '@algolia/client-search' - '@docusaurus/babel@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@docusaurus/babel@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/core': 7.28.0 '@babel/generator': 7.28.0 @@ -16983,7 +16939,7 @@ snapshots: '@babel/runtime-corejs3': 7.28.0 '@babel/traverse': 7.28.0 '@docusaurus/logger': 3.8.1 - '@docusaurus/utils': 3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils': 3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) babel-plugin-dynamic-import-node: 2.3.3 fs-extra: 11.3.0 tslib: 2.8.1 @@ -16997,34 +16953,34 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/bundler@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17)(esbuild@0.25.6))(@rspack/core@1.4.8(@swc/helpers@0.5.17))(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(lightningcss@1.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3)': + '@docusaurus/bundler@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17))(@rspack/core@1.4.9(@swc/helpers@0.5.17))(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3)': dependencies: '@babel/core': 7.28.0 - '@docusaurus/babel': 3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/babel': 3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@docusaurus/cssnano-preset': 3.8.1 '@docusaurus/logger': 3.8.1 - '@docusaurus/types': 3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils': 3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - babel-loader: 9.2.1(@babel/core@7.28.0)(webpack@5.100.2(@swc/core@1.12.14(@swc/helpers@0.5.17))(esbuild@0.25.6)) + '@docusaurus/types': 3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils': 3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + babel-loader: 9.2.1(@babel/core@7.28.0)(webpack@5.100.2(@swc/core@1.13.1(@swc/helpers@0.5.17))) clean-css: 5.3.3 - copy-webpack-plugin: 11.0.0(webpack@5.100.2(@swc/core@1.12.14(@swc/helpers@0.5.17))(esbuild@0.25.6)) - css-loader: 6.11.0(@rspack/core@1.4.8(@swc/helpers@0.5.17))(webpack@5.100.2(@swc/core@1.12.14(@swc/helpers@0.5.17))(esbuild@0.25.6)) - css-minimizer-webpack-plugin: 5.0.1(clean-css@5.3.3)(esbuild@0.25.6)(lightningcss@1.30.1)(webpack@5.100.2(@swc/core@1.12.14(@swc/helpers@0.5.17))(esbuild@0.25.6)) + copy-webpack-plugin: 11.0.0(webpack@5.100.2(@swc/core@1.13.1(@swc/helpers@0.5.17))) + css-loader: 6.11.0(@rspack/core@1.4.9(@swc/helpers@0.5.17))(webpack@5.100.2(@swc/core@1.13.1(@swc/helpers@0.5.17))) + css-minimizer-webpack-plugin: 5.0.1(clean-css@5.3.3)(webpack@5.100.2(@swc/core@1.13.1(@swc/helpers@0.5.17))) cssnano: 6.1.2(postcss@8.5.6) - file-loader: 6.2.0(webpack@5.100.2(@swc/core@1.12.14(@swc/helpers@0.5.17))(esbuild@0.25.6)) + file-loader: 6.2.0(webpack@5.100.2(@swc/core@1.13.1(@swc/helpers@0.5.17))) html-minifier-terser: 7.2.0 - mini-css-extract-plugin: 2.9.2(webpack@5.100.2(@swc/core@1.12.14(@swc/helpers@0.5.17))(esbuild@0.25.6)) - null-loader: 4.0.1(webpack@5.100.2(@swc/core@1.12.14(@swc/helpers@0.5.17))(esbuild@0.25.6)) + mini-css-extract-plugin: 2.9.2(webpack@5.100.2(@swc/core@1.13.1(@swc/helpers@0.5.17))) + null-loader: 4.0.1(webpack@5.100.2(@swc/core@1.13.1(@swc/helpers@0.5.17))) postcss: 8.5.6 - postcss-loader: 7.3.4(postcss@8.5.6)(typescript@5.8.3)(webpack@5.100.2(@swc/core@1.12.14(@swc/helpers@0.5.17))(esbuild@0.25.6)) + postcss-loader: 7.3.4(postcss@8.5.6)(typescript@5.8.3)(webpack@5.100.2(@swc/core@1.13.1(@swc/helpers@0.5.17))) postcss-preset-env: 10.2.4(postcss@8.5.6) - terser-webpack-plugin: 5.3.14(@swc/core@1.12.14(@swc/helpers@0.5.17))(esbuild@0.25.6)(webpack@5.100.2(@swc/core@1.12.14(@swc/helpers@0.5.17))(esbuild@0.25.6)) + terser-webpack-plugin: 5.3.14(@swc/core@1.13.1(@swc/helpers@0.5.17))(webpack@5.100.2(@swc/core@1.13.1(@swc/helpers@0.5.17))) tslib: 2.8.1 - url-loader: 4.1.1(file-loader@6.2.0(webpack@5.100.2(@swc/core@1.12.14(@swc/helpers@0.5.17))(esbuild@0.25.6)))(webpack@5.100.2(@swc/core@1.12.14(@swc/helpers@0.5.17))(esbuild@0.25.6)) - webpack: 5.100.2(@swc/core@1.12.14(@swc/helpers@0.5.17))(esbuild@0.25.6) - webpackbar: 6.0.1(webpack@5.100.2(@swc/core@1.12.14(@swc/helpers@0.5.17))(esbuild@0.25.6)) + url-loader: 4.1.1(file-loader@6.2.0(webpack@5.100.2(@swc/core@1.13.1(@swc/helpers@0.5.17))))(webpack@5.100.2(@swc/core@1.13.1(@swc/helpers@0.5.17))) + webpack: 5.100.2(@swc/core@1.13.1(@swc/helpers@0.5.17)) + webpackbar: 6.0.1(webpack@5.100.2(@swc/core@1.13.1(@swc/helpers@0.5.17))) optionalDependencies: - '@docusaurus/faster': 3.8.1(@docusaurus/types@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17)(esbuild@0.25.6) + '@docusaurus/faster': 3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17) transitivePeerDependencies: - '@parcel/css' - '@rspack/core' @@ -17041,15 +16997,15 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/core@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17)(esbuild@0.25.6))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.8(@swc/helpers@0.5.17))(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(lightningcss@1.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3)': + '@docusaurus/core@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.9(@swc/helpers@0.5.17))(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3)': dependencies: - '@docusaurus/babel': 3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/bundler': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17)(esbuild@0.25.6))(@rspack/core@1.4.8(@swc/helpers@0.5.17))(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(lightningcss@1.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) + '@docusaurus/babel': 3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/bundler': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17))(@rspack/core@1.4.9(@swc/helpers@0.5.17))(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) '@docusaurus/logger': 3.8.1 - '@docusaurus/mdx-loader': 3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils': 3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-common': 3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-validation': 3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/mdx-loader': 3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils': 3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-common': 3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-validation': 3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@mdx-js/react': 3.1.0(@types/react@19.1.2)(react@18.3.1) boxen: 6.2.1 chalk: 4.1.2 @@ -17065,7 +17021,7 @@ snapshots: execa: 5.1.1 fs-extra: 11.3.0 html-tags: 3.3.1 - html-webpack-plugin: 5.6.3(@rspack/core@1.4.8(@swc/helpers@0.5.17))(webpack@5.100.2(@swc/core@1.12.14(@swc/helpers@0.5.17))(esbuild@0.25.6)) + html-webpack-plugin: 5.6.3(@rspack/core@1.4.9(@swc/helpers@0.5.17))(webpack@5.100.2(@swc/core@1.13.1(@swc/helpers@0.5.17))) leven: 3.1.0 lodash: 4.17.21 open: 8.4.2 @@ -17075,7 +17031,7 @@ snapshots: react-dom: 18.3.1(react@18.3.1) react-helmet-async: '@slorber/react-helmet-async@1.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)' react-loadable: '@docusaurus/react-loadable@6.0.0(react@18.3.1)' - react-loadable-ssr-addon-v5-slorber: 1.0.1(@docusaurus/react-loadable@6.0.0(react@18.3.1))(webpack@5.100.2(@swc/core@1.12.14(@swc/helpers@0.5.17))(esbuild@0.25.6)) + react-loadable-ssr-addon-v5-slorber: 1.0.1(@docusaurus/react-loadable@6.0.0(react@18.3.1))(webpack@5.100.2(@swc/core@1.13.1(@swc/helpers@0.5.17))) react-router: 5.3.4(react@18.3.1) react-router-config: 5.1.1(react-router@5.3.4(react@18.3.1))(react@18.3.1) react-router-dom: 5.3.4(react@18.3.1) @@ -17084,9 +17040,9 @@ snapshots: tinypool: 1.1.1 tslib: 2.8.1 update-notifier: 6.0.2 - webpack: 5.100.2(@swc/core@1.12.14(@swc/helpers@0.5.17))(esbuild@0.25.6) + webpack: 5.100.2(@swc/core@1.13.1(@swc/helpers@0.5.17)) webpack-bundle-analyzer: 4.10.2 - webpack-dev-server: 4.15.2(webpack@5.100.2(@swc/core@1.12.14(@swc/helpers@0.5.17))(esbuild@0.25.6)) + webpack-dev-server: 4.15.2(webpack@5.100.2(@swc/core@1.13.1(@swc/helpers@0.5.17))) webpack-merge: 6.0.1 transitivePeerDependencies: - '@docusaurus/faster' @@ -17113,17 +17069,17 @@ snapshots: postcss-sort-media-queries: 5.2.0(postcss@8.5.6) tslib: 2.8.1 - '@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17)(esbuild@0.25.6)': + '@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17)': dependencies: - '@docusaurus/types': 3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@rspack/core': 1.4.8(@swc/helpers@0.5.17) - '@swc/core': 1.12.14(@swc/helpers@0.5.17) - '@swc/html': 1.12.14 + '@docusaurus/types': 3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@rspack/core': 1.4.9(@swc/helpers@0.5.17) + '@swc/core': 1.13.1(@swc/helpers@0.5.17) + '@swc/html': 1.13.1 browserslist: 4.25.1 lightningcss: 1.30.1 - swc-loader: 0.2.6(@swc/core@1.12.14(@swc/helpers@0.5.17))(webpack@5.100.2(@swc/core@1.12.14(@swc/helpers@0.5.17))(esbuild@0.25.6)) + swc-loader: 0.2.6(@swc/core@1.13.1(@swc/helpers@0.5.17))(webpack@5.100.2(@swc/core@1.13.1(@swc/helpers@0.5.17))) tslib: 2.8.1 - webpack: 5.100.2(@swc/core@1.12.14(@swc/helpers@0.5.17))(esbuild@0.25.6) + webpack: 5.100.2(@swc/core@1.13.1(@swc/helpers@0.5.17)) transitivePeerDependencies: - '@swc/helpers' - esbuild @@ -17135,16 +17091,16 @@ snapshots: chalk: 4.1.2 tslib: 2.8.1 - '@docusaurus/mdx-loader@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@docusaurus/mdx-loader@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@docusaurus/logger': 3.8.1 - '@docusaurus/utils': 3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-validation': 3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils': 3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-validation': 3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@mdx-js/mdx': 3.1.0(acorn@8.15.0) '@slorber/remark-comment': 1.0.0 escape-html: 1.0.3 estree-util-value-to-estree: 3.4.0 - file-loader: 6.2.0(webpack@5.100.2(@swc/core@1.12.14(@swc/helpers@0.5.17))(esbuild@0.25.6)) + file-loader: 6.2.0(webpack@5.100.2(@swc/core@1.13.1(@swc/helpers@0.5.17))) fs-extra: 11.3.0 image-size: 2.0.2 mdast-util-mdx: 3.0.0 @@ -17160,9 +17116,9 @@ snapshots: tslib: 2.8.1 unified: 11.0.5 unist-util-visit: 5.0.0 - url-loader: 4.1.1(file-loader@6.2.0(webpack@5.100.2(@swc/core@1.12.14(@swc/helpers@0.5.17))(esbuild@0.25.6)))(webpack@5.100.2(@swc/core@1.12.14(@swc/helpers@0.5.17))(esbuild@0.25.6)) + url-loader: 4.1.1(file-loader@6.2.0(webpack@5.100.2(@swc/core@1.13.1(@swc/helpers@0.5.17))))(webpack@5.100.2(@swc/core@1.13.1(@swc/helpers@0.5.17))) vfile: 6.0.3 - webpack: 5.100.2(@swc/core@1.12.14(@swc/helpers@0.5.17))(esbuild@0.25.6) + webpack: 5.100.2(@swc/core@1.13.1(@swc/helpers@0.5.17)) transitivePeerDependencies: - '@swc/core' - acorn @@ -17171,9 +17127,9 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/module-type-aliases@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@docusaurus/module-type-aliases@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@docusaurus/types': 3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/types': 3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@types/history': 4.7.11 '@types/react': 19.1.2 '@types/react-router-config': 5.0.11 @@ -17190,17 +17146,17 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/plugin-content-blog@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17)(esbuild@0.25.6))(@docusaurus/plugin-content-docs@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17)(esbuild@0.25.6))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.8(@swc/helpers@0.5.17))(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(lightningcss@1.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.8(@swc/helpers@0.5.17))(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(lightningcss@1.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3)': + '@docusaurus/plugin-content-blog@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17))(@docusaurus/plugin-content-docs@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.9(@swc/helpers@0.5.17))(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.9(@swc/helpers@0.5.17))(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3)': dependencies: - '@docusaurus/core': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17)(esbuild@0.25.6))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.8(@swc/helpers@0.5.17))(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(lightningcss@1.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) + '@docusaurus/core': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.9(@swc/helpers@0.5.17))(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) '@docusaurus/logger': 3.8.1 - '@docusaurus/mdx-loader': 3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/plugin-content-docs': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17)(esbuild@0.25.6))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.8(@swc/helpers@0.5.17))(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(lightningcss@1.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) - '@docusaurus/theme-common': 3.8.1(@docusaurus/plugin-content-docs@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17)(esbuild@0.25.6))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.8(@swc/helpers@0.5.17))(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(lightningcss@1.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3))(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/types': 3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils': 3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-common': 3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-validation': 3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/mdx-loader': 3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/plugin-content-docs': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.9(@swc/helpers@0.5.17))(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) + '@docusaurus/theme-common': 3.8.1(@docusaurus/plugin-content-docs@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.9(@swc/helpers@0.5.17))(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3))(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/types': 3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils': 3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-common': 3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-validation': 3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) cheerio: 1.0.0-rc.12 feed: 4.2.2 fs-extra: 11.3.0 @@ -17212,7 +17168,7 @@ snapshots: tslib: 2.8.1 unist-util-visit: 5.0.0 utility-types: 3.11.0 - webpack: 5.100.2(@swc/core@1.12.14(@swc/helpers@0.5.17))(esbuild@0.25.6) + webpack: 5.100.2(@swc/core@1.13.1(@swc/helpers@0.5.17)) transitivePeerDependencies: - '@docusaurus/faster' - '@mdx-js/react' @@ -17232,17 +17188,17 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/plugin-content-docs@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17)(esbuild@0.25.6))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.8(@swc/helpers@0.5.17))(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(lightningcss@1.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3)': + '@docusaurus/plugin-content-docs@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.9(@swc/helpers@0.5.17))(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3)': dependencies: - '@docusaurus/core': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17)(esbuild@0.25.6))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.8(@swc/helpers@0.5.17))(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(lightningcss@1.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) + '@docusaurus/core': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.9(@swc/helpers@0.5.17))(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) '@docusaurus/logger': 3.8.1 - '@docusaurus/mdx-loader': 3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/module-type-aliases': 3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/theme-common': 3.8.1(@docusaurus/plugin-content-docs@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17)(esbuild@0.25.6))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.8(@swc/helpers@0.5.17))(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(lightningcss@1.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3))(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/types': 3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils': 3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-common': 3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-validation': 3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/mdx-loader': 3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/module-type-aliases': 3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/theme-common': 3.8.1(@docusaurus/plugin-content-docs@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.9(@swc/helpers@0.5.17))(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3))(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/types': 3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils': 3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-common': 3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-validation': 3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@types/react-router-config': 5.0.11 combine-promises: 1.2.0 fs-extra: 11.3.0 @@ -17253,7 +17209,7 @@ snapshots: schema-dts: 1.1.5 tslib: 2.8.1 utility-types: 3.11.0 - webpack: 5.100.2(@swc/core@1.12.14(@swc/helpers@0.5.17))(esbuild@0.25.6) + webpack: 5.100.2(@swc/core@1.13.1(@swc/helpers@0.5.17)) transitivePeerDependencies: - '@docusaurus/faster' - '@mdx-js/react' @@ -17273,18 +17229,18 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/plugin-content-pages@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17)(esbuild@0.25.6))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.8(@swc/helpers@0.5.17))(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(lightningcss@1.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3)': + '@docusaurus/plugin-content-pages@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.9(@swc/helpers@0.5.17))(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3)': dependencies: - '@docusaurus/core': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17)(esbuild@0.25.6))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.8(@swc/helpers@0.5.17))(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(lightningcss@1.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) - '@docusaurus/mdx-loader': 3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/types': 3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils': 3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-validation': 3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/core': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.9(@swc/helpers@0.5.17))(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) + '@docusaurus/mdx-loader': 3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/types': 3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils': 3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-validation': 3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) fs-extra: 11.3.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) tslib: 2.8.1 - webpack: 5.100.2(@swc/core@1.12.14(@swc/helpers@0.5.17))(esbuild@0.25.6) + webpack: 5.100.2(@swc/core@1.13.1(@swc/helpers@0.5.17)) transitivePeerDependencies: - '@docusaurus/faster' - '@mdx-js/react' @@ -17304,12 +17260,12 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/plugin-css-cascade-layers@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17)(esbuild@0.25.6))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.8(@swc/helpers@0.5.17))(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(lightningcss@1.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3)': + '@docusaurus/plugin-css-cascade-layers@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.9(@swc/helpers@0.5.17))(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3)': dependencies: - '@docusaurus/core': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17)(esbuild@0.25.6))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.8(@swc/helpers@0.5.17))(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(lightningcss@1.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) - '@docusaurus/types': 3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils': 3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-validation': 3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/core': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.9(@swc/helpers@0.5.17))(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) + '@docusaurus/types': 3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils': 3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-validation': 3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) tslib: 2.8.1 transitivePeerDependencies: - '@docusaurus/faster' @@ -17332,11 +17288,11 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/plugin-debug@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17)(esbuild@0.25.6))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.8(@swc/helpers@0.5.17))(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(lightningcss@1.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3)': + '@docusaurus/plugin-debug@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.9(@swc/helpers@0.5.17))(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3)': dependencies: - '@docusaurus/core': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17)(esbuild@0.25.6))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.8(@swc/helpers@0.5.17))(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(lightningcss@1.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) - '@docusaurus/types': 3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils': 3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/core': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.9(@swc/helpers@0.5.17))(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) + '@docusaurus/types': 3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils': 3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) fs-extra: 11.3.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -17361,11 +17317,11 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/plugin-google-analytics@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17)(esbuild@0.25.6))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.8(@swc/helpers@0.5.17))(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(lightningcss@1.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3)': + '@docusaurus/plugin-google-analytics@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.9(@swc/helpers@0.5.17))(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3)': dependencies: - '@docusaurus/core': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17)(esbuild@0.25.6))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.8(@swc/helpers@0.5.17))(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(lightningcss@1.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) - '@docusaurus/types': 3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-validation': 3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/core': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.9(@swc/helpers@0.5.17))(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) + '@docusaurus/types': 3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-validation': 3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) tslib: 2.8.1 @@ -17388,11 +17344,11 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/plugin-google-gtag@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17)(esbuild@0.25.6))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.8(@swc/helpers@0.5.17))(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(lightningcss@1.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3)': + '@docusaurus/plugin-google-gtag@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.9(@swc/helpers@0.5.17))(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3)': dependencies: - '@docusaurus/core': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17)(esbuild@0.25.6))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.8(@swc/helpers@0.5.17))(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(lightningcss@1.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) - '@docusaurus/types': 3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-validation': 3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/core': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.9(@swc/helpers@0.5.17))(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) + '@docusaurus/types': 3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-validation': 3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@types/gtag.js': 0.0.12 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -17416,11 +17372,11 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/plugin-google-tag-manager@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17)(esbuild@0.25.6))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.8(@swc/helpers@0.5.17))(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(lightningcss@1.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3)': + '@docusaurus/plugin-google-tag-manager@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.9(@swc/helpers@0.5.17))(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3)': dependencies: - '@docusaurus/core': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17)(esbuild@0.25.6))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.8(@swc/helpers@0.5.17))(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(lightningcss@1.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) - '@docusaurus/types': 3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-validation': 3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/core': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.9(@swc/helpers@0.5.17))(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) + '@docusaurus/types': 3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-validation': 3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) tslib: 2.8.1 @@ -17443,14 +17399,14 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/plugin-sitemap@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17)(esbuild@0.25.6))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.8(@swc/helpers@0.5.17))(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(lightningcss@1.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3)': + '@docusaurus/plugin-sitemap@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.9(@swc/helpers@0.5.17))(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3)': dependencies: - '@docusaurus/core': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17)(esbuild@0.25.6))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.8(@swc/helpers@0.5.17))(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(lightningcss@1.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) + '@docusaurus/core': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.9(@swc/helpers@0.5.17))(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) '@docusaurus/logger': 3.8.1 - '@docusaurus/types': 3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils': 3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-common': 3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-validation': 3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/types': 3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils': 3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-common': 3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-validation': 3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) fs-extra: 11.3.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -17475,18 +17431,18 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/plugin-svgr@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17)(esbuild@0.25.6))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.8(@swc/helpers@0.5.17))(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(lightningcss@1.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3)': + '@docusaurus/plugin-svgr@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.9(@swc/helpers@0.5.17))(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3)': dependencies: - '@docusaurus/core': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17)(esbuild@0.25.6))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.8(@swc/helpers@0.5.17))(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(lightningcss@1.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) - '@docusaurus/types': 3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils': 3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-validation': 3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/core': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.9(@swc/helpers@0.5.17))(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) + '@docusaurus/types': 3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils': 3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-validation': 3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@svgr/core': 8.1.0(typescript@5.8.3) '@svgr/webpack': 8.1.0(typescript@5.8.3) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) tslib: 2.8.1 - webpack: 5.100.2(@swc/core@1.12.14(@swc/helpers@0.5.17))(esbuild@0.25.6) + webpack: 5.100.2(@swc/core@1.13.1(@swc/helpers@0.5.17)) transitivePeerDependencies: - '@docusaurus/faster' - '@mdx-js/react' @@ -17506,23 +17462,23 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/preset-classic@3.8.1(@algolia/client-search@5.33.0)(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17)(esbuild@0.25.6))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.8(@swc/helpers@0.5.17))(@swc/core@1.12.14(@swc/helpers@0.5.17))(@types/react@19.1.2)(acorn@8.15.0)(esbuild@0.25.6)(lightningcss@1.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.3)(typescript@5.8.3)': + '@docusaurus/preset-classic@3.8.1(@algolia/client-search@5.34.0)(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.9(@swc/helpers@0.5.17))(@swc/core@1.13.1(@swc/helpers@0.5.17))(@types/react@19.1.2)(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.3)(typescript@5.8.3)': dependencies: - '@docusaurus/core': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17)(esbuild@0.25.6))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.8(@swc/helpers@0.5.17))(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(lightningcss@1.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) - '@docusaurus/plugin-content-blog': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17)(esbuild@0.25.6))(@docusaurus/plugin-content-docs@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17)(esbuild@0.25.6))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.8(@swc/helpers@0.5.17))(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(lightningcss@1.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.8(@swc/helpers@0.5.17))(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(lightningcss@1.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) - '@docusaurus/plugin-content-docs': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17)(esbuild@0.25.6))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.8(@swc/helpers@0.5.17))(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(lightningcss@1.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) - '@docusaurus/plugin-content-pages': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17)(esbuild@0.25.6))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.8(@swc/helpers@0.5.17))(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(lightningcss@1.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) - '@docusaurus/plugin-css-cascade-layers': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17)(esbuild@0.25.6))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.8(@swc/helpers@0.5.17))(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(lightningcss@1.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) - '@docusaurus/plugin-debug': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17)(esbuild@0.25.6))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.8(@swc/helpers@0.5.17))(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(lightningcss@1.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) - '@docusaurus/plugin-google-analytics': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17)(esbuild@0.25.6))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.8(@swc/helpers@0.5.17))(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(lightningcss@1.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) - '@docusaurus/plugin-google-gtag': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17)(esbuild@0.25.6))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.8(@swc/helpers@0.5.17))(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(lightningcss@1.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) - '@docusaurus/plugin-google-tag-manager': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17)(esbuild@0.25.6))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.8(@swc/helpers@0.5.17))(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(lightningcss@1.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) - '@docusaurus/plugin-sitemap': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17)(esbuild@0.25.6))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.8(@swc/helpers@0.5.17))(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(lightningcss@1.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) - '@docusaurus/plugin-svgr': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17)(esbuild@0.25.6))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.8(@swc/helpers@0.5.17))(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(lightningcss@1.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) - '@docusaurus/theme-classic': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17)(esbuild@0.25.6))(@rspack/core@1.4.8(@swc/helpers@0.5.17))(@swc/core@1.12.14(@swc/helpers@0.5.17))(@types/react@19.1.2)(acorn@8.15.0)(esbuild@0.25.6)(lightningcss@1.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) - '@docusaurus/theme-common': 3.8.1(@docusaurus/plugin-content-docs@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17)(esbuild@0.25.6))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.8(@swc/helpers@0.5.17))(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(lightningcss@1.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3))(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/theme-search-algolia': 3.8.1(@algolia/client-search@5.33.0)(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17)(esbuild@0.25.6))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.8(@swc/helpers@0.5.17))(@swc/core@1.12.14(@swc/helpers@0.5.17))(@types/react@19.1.2)(acorn@8.15.0)(esbuild@0.25.6)(lightningcss@1.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.3)(typescript@5.8.3) - '@docusaurus/types': 3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/core': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.9(@swc/helpers@0.5.17))(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) + '@docusaurus/plugin-content-blog': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17))(@docusaurus/plugin-content-docs@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.9(@swc/helpers@0.5.17))(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.9(@swc/helpers@0.5.17))(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) + '@docusaurus/plugin-content-docs': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.9(@swc/helpers@0.5.17))(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) + '@docusaurus/plugin-content-pages': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.9(@swc/helpers@0.5.17))(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) + '@docusaurus/plugin-css-cascade-layers': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.9(@swc/helpers@0.5.17))(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) + '@docusaurus/plugin-debug': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.9(@swc/helpers@0.5.17))(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) + '@docusaurus/plugin-google-analytics': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.9(@swc/helpers@0.5.17))(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) + '@docusaurus/plugin-google-gtag': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.9(@swc/helpers@0.5.17))(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) + '@docusaurus/plugin-google-tag-manager': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.9(@swc/helpers@0.5.17))(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) + '@docusaurus/plugin-sitemap': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.9(@swc/helpers@0.5.17))(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) + '@docusaurus/plugin-svgr': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.9(@swc/helpers@0.5.17))(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) + '@docusaurus/theme-classic': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17))(@rspack/core@1.4.9(@swc/helpers@0.5.17))(@swc/core@1.13.1(@swc/helpers@0.5.17))(@types/react@19.1.2)(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) + '@docusaurus/theme-common': 3.8.1(@docusaurus/plugin-content-docs@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.9(@swc/helpers@0.5.17))(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3))(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/theme-search-algolia': 3.8.1(@algolia/client-search@5.34.0)(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.9(@swc/helpers@0.5.17))(@swc/core@1.13.1(@swc/helpers@0.5.17))(@types/react@19.1.2)(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.3)(typescript@5.8.3) + '@docusaurus/types': 3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) transitivePeerDependencies: @@ -17552,21 +17508,21 @@ snapshots: '@types/react': 19.1.2 react: 18.3.1 - '@docusaurus/theme-classic@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17)(esbuild@0.25.6))(@rspack/core@1.4.8(@swc/helpers@0.5.17))(@swc/core@1.12.14(@swc/helpers@0.5.17))(@types/react@19.1.2)(acorn@8.15.0)(esbuild@0.25.6)(lightningcss@1.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3)': + '@docusaurus/theme-classic@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17))(@rspack/core@1.4.9(@swc/helpers@0.5.17))(@swc/core@1.13.1(@swc/helpers@0.5.17))(@types/react@19.1.2)(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3)': dependencies: - '@docusaurus/core': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17)(esbuild@0.25.6))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.8(@swc/helpers@0.5.17))(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(lightningcss@1.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) + '@docusaurus/core': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.9(@swc/helpers@0.5.17))(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) '@docusaurus/logger': 3.8.1 - '@docusaurus/mdx-loader': 3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/module-type-aliases': 3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/plugin-content-blog': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17)(esbuild@0.25.6))(@docusaurus/plugin-content-docs@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17)(esbuild@0.25.6))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.8(@swc/helpers@0.5.17))(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(lightningcss@1.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.8(@swc/helpers@0.5.17))(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(lightningcss@1.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) - '@docusaurus/plugin-content-docs': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17)(esbuild@0.25.6))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.8(@swc/helpers@0.5.17))(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(lightningcss@1.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) - '@docusaurus/plugin-content-pages': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17)(esbuild@0.25.6))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.8(@swc/helpers@0.5.17))(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(lightningcss@1.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) - '@docusaurus/theme-common': 3.8.1(@docusaurus/plugin-content-docs@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17)(esbuild@0.25.6))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.8(@swc/helpers@0.5.17))(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(lightningcss@1.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3))(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/mdx-loader': 3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/module-type-aliases': 3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/plugin-content-blog': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17))(@docusaurus/plugin-content-docs@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.9(@swc/helpers@0.5.17))(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.9(@swc/helpers@0.5.17))(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) + '@docusaurus/plugin-content-docs': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.9(@swc/helpers@0.5.17))(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) + '@docusaurus/plugin-content-pages': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.9(@swc/helpers@0.5.17))(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) + '@docusaurus/theme-common': 3.8.1(@docusaurus/plugin-content-docs@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.9(@swc/helpers@0.5.17))(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3))(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@docusaurus/theme-translations': 3.8.1 - '@docusaurus/types': 3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils': 3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-common': 3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-validation': 3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/types': 3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils': 3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-common': 3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-validation': 3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@mdx-js/react': 3.1.0(@types/react@19.1.2)(react@18.3.1) clsx: 2.1.1 copy-text-to-clipboard: 3.2.0 @@ -17601,13 +17557,13 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/theme-common@3.8.1(@docusaurus/plugin-content-docs@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17)(esbuild@0.25.6))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.8(@swc/helpers@0.5.17))(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(lightningcss@1.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3))(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@docusaurus/theme-common@3.8.1(@docusaurus/plugin-content-docs@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.9(@swc/helpers@0.5.17))(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3))(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@docusaurus/mdx-loader': 3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/module-type-aliases': 3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/plugin-content-docs': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17)(esbuild@0.25.6))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.8(@swc/helpers@0.5.17))(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(lightningcss@1.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) - '@docusaurus/utils': 3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-common': 3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/mdx-loader': 3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/module-type-aliases': 3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/plugin-content-docs': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.9(@swc/helpers@0.5.17))(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) + '@docusaurus/utils': 3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-common': 3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@types/history': 4.7.11 '@types/react': 19.1.2 '@types/react-router-config': 5.0.11 @@ -17626,14 +17582,14 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/theme-mermaid@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17)(esbuild@0.25.6))(@docusaurus/plugin-content-docs@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17)(esbuild@0.25.6))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.8(@swc/helpers@0.5.17))(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(lightningcss@1.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.8(@swc/helpers@0.5.17))(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(lightningcss@1.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3)': + '@docusaurus/theme-mermaid@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17))(@docusaurus/plugin-content-docs@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.9(@swc/helpers@0.5.17))(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.9(@swc/helpers@0.5.17))(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3)': dependencies: - '@docusaurus/core': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17)(esbuild@0.25.6))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.8(@swc/helpers@0.5.17))(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(lightningcss@1.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) - '@docusaurus/module-type-aliases': 3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/theme-common': 3.8.1(@docusaurus/plugin-content-docs@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17)(esbuild@0.25.6))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.8(@swc/helpers@0.5.17))(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(lightningcss@1.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3))(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/types': 3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-validation': 3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - mermaid: 11.8.1 + '@docusaurus/core': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.9(@swc/helpers@0.5.17))(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) + '@docusaurus/module-type-aliases': 3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/theme-common': 3.8.1(@docusaurus/plugin-content-docs@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.9(@swc/helpers@0.5.17))(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3))(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/types': 3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-validation': 3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + mermaid: 11.9.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) tslib: 2.8.1 @@ -17657,18 +17613,18 @@ snapshots: - utf-8-validate - webpack-cli - '@docusaurus/theme-search-algolia@3.8.1(@algolia/client-search@5.33.0)(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17)(esbuild@0.25.6))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.8(@swc/helpers@0.5.17))(@swc/core@1.12.14(@swc/helpers@0.5.17))(@types/react@19.1.2)(acorn@8.15.0)(esbuild@0.25.6)(lightningcss@1.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.3)(typescript@5.8.3)': + '@docusaurus/theme-search-algolia@3.8.1(@algolia/client-search@5.34.0)(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.9(@swc/helpers@0.5.17))(@swc/core@1.13.1(@swc/helpers@0.5.17))(@types/react@19.1.2)(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.3)(typescript@5.8.3)': dependencies: - '@docsearch/react': 3.9.0(@algolia/client-search@5.33.0)(@types/react@19.1.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.3) - '@docusaurus/core': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17)(esbuild@0.25.6))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.8(@swc/helpers@0.5.17))(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(lightningcss@1.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) + '@docsearch/react': 3.9.0(@algolia/client-search@5.34.0)(@types/react@19.1.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.3) + '@docusaurus/core': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.9(@swc/helpers@0.5.17))(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) '@docusaurus/logger': 3.8.1 - '@docusaurus/plugin-content-docs': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17)(esbuild@0.25.6))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.8(@swc/helpers@0.5.17))(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(lightningcss@1.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) - '@docusaurus/theme-common': 3.8.1(@docusaurus/plugin-content-docs@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17)(esbuild@0.25.6))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.8(@swc/helpers@0.5.17))(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(lightningcss@1.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3))(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/plugin-content-docs': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.9(@swc/helpers@0.5.17))(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) + '@docusaurus/theme-common': 3.8.1(@docusaurus/plugin-content-docs@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.9(@swc/helpers@0.5.17))(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3))(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@docusaurus/theme-translations': 3.8.1 - '@docusaurus/utils': 3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-validation': 3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - algoliasearch: 5.33.0 - algoliasearch-helper: 3.26.0(algoliasearch@5.33.0) + '@docusaurus/utils': 3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-validation': 3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + algoliasearch: 5.34.0 + algoliasearch-helper: 3.26.0(algoliasearch@5.34.0) clsx: 2.1.1 eta: 2.2.0 fs-extra: 11.3.0 @@ -17704,7 +17660,7 @@ snapshots: fs-extra: 11.3.0 tslib: 2.8.1 - '@docusaurus/types@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@docusaurus/types@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@mdx-js/mdx': 3.1.0(acorn@8.15.0) '@types/history': 4.7.11 @@ -17715,7 +17671,7 @@ snapshots: react-dom: 18.3.1(react@18.3.1) react-helmet-async: '@slorber/react-helmet-async@1.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)' utility-types: 3.11.0 - webpack: 5.100.2(@swc/core@1.12.14(@swc/helpers@0.5.17))(esbuild@0.25.6) + webpack: 5.100.2(@swc/core@1.13.1(@swc/helpers@0.5.17)) webpack-merge: 5.10.0 transitivePeerDependencies: - '@swc/core' @@ -17725,9 +17681,9 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/utils-common@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@docusaurus/utils-common@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@docusaurus/types': 3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/types': 3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) tslib: 2.8.1 transitivePeerDependencies: - '@swc/core' @@ -17739,11 +17695,11 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/utils-validation@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@docusaurus/utils-validation@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@docusaurus/logger': 3.8.1 - '@docusaurus/utils': 3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-common': 3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils': 3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-common': 3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) fs-extra: 11.3.0 joi: 17.13.3 js-yaml: 4.1.0 @@ -17759,14 +17715,14 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/utils@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@docusaurus/utils@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@docusaurus/logger': 3.8.1 - '@docusaurus/types': 3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-common': 3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/types': 3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-common': 3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) escape-string-regexp: 4.0.0 execa: 5.1.1 - file-loader: 6.2.0(webpack@5.100.2(@swc/core@1.12.14(@swc/helpers@0.5.17))(esbuild@0.25.6)) + file-loader: 6.2.0(webpack@5.100.2(@swc/core@1.13.1(@swc/helpers@0.5.17))) fs-extra: 11.3.0 github-slugger: 1.5.0 globby: 11.1.0 @@ -17779,9 +17735,9 @@ snapshots: prompts: 2.4.2 resolve-pathname: 3.0.0 tslib: 2.8.1 - url-loader: 4.1.1(file-loader@6.2.0(webpack@5.100.2(@swc/core@1.12.14(@swc/helpers@0.5.17))(esbuild@0.25.6)))(webpack@5.100.2(@swc/core@1.12.14(@swc/helpers@0.5.17))(esbuild@0.25.6)) + url-loader: 4.1.1(file-loader@6.2.0(webpack@5.100.2(@swc/core@1.13.1(@swc/helpers@0.5.17))))(webpack@5.100.2(@swc/core@1.13.1(@swc/helpers@0.5.17))) utility-types: 3.11.0 - webpack: 5.100.2(@swc/core@1.12.14(@swc/helpers@0.5.17))(esbuild@0.25.6) + webpack: 5.100.2(@swc/core@1.13.1(@swc/helpers@0.5.17)) transitivePeerDependencies: - '@swc/core' - acorn @@ -17792,18 +17748,18 @@ snapshots: - uglify-js - webpack-cli - '@emnapi/core@1.4.4': + '@emnapi/core@1.4.5': dependencies: - '@emnapi/wasi-threads': 1.0.3 + '@emnapi/wasi-threads': 1.0.4 tslib: 2.8.1 optional: true - '@emnapi/runtime@1.4.4': + '@emnapi/runtime@1.4.5': dependencies: tslib: 2.8.1 optional: true - '@emnapi/wasi-threads@1.0.3': + '@emnapi/wasi-threads@1.0.4': dependencies: tslib: 2.8.1 optional: true @@ -17811,7 +17767,7 @@ snapshots: '@esbuild/aix-ppc64@0.21.5': optional: true - '@esbuild/aix-ppc64@0.25.6': + '@esbuild/aix-ppc64@0.25.8': optional: true '@esbuild/android-arm64@0.18.17': @@ -17820,7 +17776,7 @@ snapshots: '@esbuild/android-arm64@0.21.5': optional: true - '@esbuild/android-arm64@0.25.6': + '@esbuild/android-arm64@0.25.8': optional: true '@esbuild/android-arm@0.18.17': @@ -17829,7 +17785,7 @@ snapshots: '@esbuild/android-arm@0.21.5': optional: true - '@esbuild/android-arm@0.25.6': + '@esbuild/android-arm@0.25.8': optional: true '@esbuild/android-x64@0.18.17': @@ -17838,7 +17794,7 @@ snapshots: '@esbuild/android-x64@0.21.5': optional: true - '@esbuild/android-x64@0.25.6': + '@esbuild/android-x64@0.25.8': optional: true '@esbuild/darwin-arm64@0.18.17': @@ -17847,7 +17803,7 @@ snapshots: '@esbuild/darwin-arm64@0.21.5': optional: true - '@esbuild/darwin-arm64@0.25.6': + '@esbuild/darwin-arm64@0.25.8': optional: true '@esbuild/darwin-x64@0.18.17': @@ -17856,7 +17812,7 @@ snapshots: '@esbuild/darwin-x64@0.21.5': optional: true - '@esbuild/darwin-x64@0.25.6': + '@esbuild/darwin-x64@0.25.8': optional: true '@esbuild/freebsd-arm64@0.18.17': @@ -17865,7 +17821,7 @@ snapshots: '@esbuild/freebsd-arm64@0.21.5': optional: true - '@esbuild/freebsd-arm64@0.25.6': + '@esbuild/freebsd-arm64@0.25.8': optional: true '@esbuild/freebsd-x64@0.18.17': @@ -17874,7 +17830,7 @@ snapshots: '@esbuild/freebsd-x64@0.21.5': optional: true - '@esbuild/freebsd-x64@0.25.6': + '@esbuild/freebsd-x64@0.25.8': optional: true '@esbuild/linux-arm64@0.18.17': @@ -17883,7 +17839,7 @@ snapshots: '@esbuild/linux-arm64@0.21.5': optional: true - '@esbuild/linux-arm64@0.25.6': + '@esbuild/linux-arm64@0.25.8': optional: true '@esbuild/linux-arm@0.18.17': @@ -17892,7 +17848,7 @@ snapshots: '@esbuild/linux-arm@0.21.5': optional: true - '@esbuild/linux-arm@0.25.6': + '@esbuild/linux-arm@0.25.8': optional: true '@esbuild/linux-ia32@0.18.17': @@ -17901,7 +17857,7 @@ snapshots: '@esbuild/linux-ia32@0.21.5': optional: true - '@esbuild/linux-ia32@0.25.6': + '@esbuild/linux-ia32@0.25.8': optional: true '@esbuild/linux-loong64@0.18.17': @@ -17910,7 +17866,7 @@ snapshots: '@esbuild/linux-loong64@0.21.5': optional: true - '@esbuild/linux-loong64@0.25.6': + '@esbuild/linux-loong64@0.25.8': optional: true '@esbuild/linux-mips64el@0.18.17': @@ -17919,7 +17875,7 @@ snapshots: '@esbuild/linux-mips64el@0.21.5': optional: true - '@esbuild/linux-mips64el@0.25.6': + '@esbuild/linux-mips64el@0.25.8': optional: true '@esbuild/linux-ppc64@0.18.17': @@ -17928,7 +17884,7 @@ snapshots: '@esbuild/linux-ppc64@0.21.5': optional: true - '@esbuild/linux-ppc64@0.25.6': + '@esbuild/linux-ppc64@0.25.8': optional: true '@esbuild/linux-riscv64@0.18.17': @@ -17937,7 +17893,7 @@ snapshots: '@esbuild/linux-riscv64@0.21.5': optional: true - '@esbuild/linux-riscv64@0.25.6': + '@esbuild/linux-riscv64@0.25.8': optional: true '@esbuild/linux-s390x@0.18.17': @@ -17946,7 +17902,7 @@ snapshots: '@esbuild/linux-s390x@0.21.5': optional: true - '@esbuild/linux-s390x@0.25.6': + '@esbuild/linux-s390x@0.25.8': optional: true '@esbuild/linux-x64@0.18.17': @@ -17955,10 +17911,10 @@ snapshots: '@esbuild/linux-x64@0.21.5': optional: true - '@esbuild/linux-x64@0.25.6': + '@esbuild/linux-x64@0.25.8': optional: true - '@esbuild/netbsd-arm64@0.25.6': + '@esbuild/netbsd-arm64@0.25.8': optional: true '@esbuild/netbsd-x64@0.18.17': @@ -17967,10 +17923,10 @@ snapshots: '@esbuild/netbsd-x64@0.21.5': optional: true - '@esbuild/netbsd-x64@0.25.6': + '@esbuild/netbsd-x64@0.25.8': optional: true - '@esbuild/openbsd-arm64@0.25.6': + '@esbuild/openbsd-arm64@0.25.8': optional: true '@esbuild/openbsd-x64@0.18.17': @@ -17979,10 +17935,10 @@ snapshots: '@esbuild/openbsd-x64@0.21.5': optional: true - '@esbuild/openbsd-x64@0.25.6': + '@esbuild/openbsd-x64@0.25.8': optional: true - '@esbuild/openharmony-arm64@0.25.6': + '@esbuild/openharmony-arm64@0.25.8': optional: true '@esbuild/sunos-x64@0.18.17': @@ -17991,7 +17947,7 @@ snapshots: '@esbuild/sunos-x64@0.21.5': optional: true - '@esbuild/sunos-x64@0.25.6': + '@esbuild/sunos-x64@0.25.8': optional: true '@esbuild/win32-arm64@0.18.17': @@ -18000,7 +17956,7 @@ snapshots: '@esbuild/win32-arm64@0.21.5': optional: true - '@esbuild/win32-arm64@0.25.6': + '@esbuild/win32-arm64@0.25.8': optional: true '@esbuild/win32-ia32@0.18.17': @@ -18009,7 +17965,7 @@ snapshots: '@esbuild/win32-ia32@0.21.5': optional: true - '@esbuild/win32-ia32@0.25.6': + '@esbuild/win32-ia32@0.25.8': optional: true '@esbuild/win32-x64@0.18.17': @@ -18018,7 +17974,7 @@ snapshots: '@esbuild/win32-x64@0.21.5': optional: true - '@esbuild/win32-x64@0.25.6': + '@esbuild/win32-x64@0.25.8': optional: true '@eslint-community/eslint-utils@4.7.0(eslint@8.57.1)': @@ -18026,35 +17982,8 @@ snapshots: eslint: 8.57.1 eslint-visitor-keys: 3.4.3 - '@eslint-community/eslint-utils@4.7.0(eslint@9.30.1(jiti@1.21.7))': - dependencies: - eslint: 9.30.1(jiti@1.21.7) - eslint-visitor-keys: 3.4.3 - '@eslint-community/regexpp@4.12.1': {} - '@eslint/compat@1.3.1(eslint@9.30.1(jiti@1.21.7))': - optionalDependencies: - eslint: 9.30.1(jiti@1.21.7) - - '@eslint/config-array@0.21.0': - dependencies: - '@eslint/object-schema': 2.1.6 - debug: 4.4.1(supports-color@5.5.0) - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color - - '@eslint/config-helpers@0.3.0': {} - - '@eslint/core@0.14.0': - dependencies: - '@types/json-schema': 7.0.15 - - '@eslint/core@0.15.1': - dependencies: - '@types/json-schema': 7.0.15 - '@eslint/eslintrc@2.1.4': dependencies: ajv: 6.12.6 @@ -18069,31 +17998,8 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/eslintrc@3.3.1': - dependencies: - ajv: 6.12.6 - debug: 4.4.1(supports-color@5.5.0) - espree: 10.4.0 - globals: 14.0.0 - ignore: 5.3.2 - import-fresh: 3.3.1 - js-yaml: 4.1.0 - minimatch: 3.1.2 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - supports-color - '@eslint/js@8.57.1': {} - '@eslint/js@9.30.1': {} - - '@eslint/object-schema@2.1.6': {} - - '@eslint/plugin-kit@0.3.3': - dependencies: - '@eslint/core': 0.15.1 - levn: 0.4.1 - '@exodus/schemasafe@1.3.0': {} '@faker-js/faker@5.5.3': {} @@ -18228,13 +18134,6 @@ snapshots: react-dom: 18.3.1(react@18.3.1) react-hook-form: 7.60.0(react@18.3.1) - '@humanfs/core@0.19.1': {} - - '@humanfs/node@0.16.6': - dependencies: - '@humanfs/core': 0.19.1 - '@humanwhocodes/retry': 0.3.1 - '@humanwhocodes/config-array@0.13.0': dependencies: '@humanwhocodes/object-schema': 2.0.3 @@ -18247,10 +18146,6 @@ snapshots: '@humanwhocodes/object-schema@2.0.3': {} - '@humanwhocodes/retry@0.3.1': {} - - '@humanwhocodes/retry@0.4.3': {} - '@iconify/types@2.0.0': {} '@iconify/utils@2.3.0': @@ -18340,7 +18235,7 @@ snapshots: '@img/sharp-wasm32@0.34.3': dependencies: - '@emnapi/runtime': 1.4.4 + '@emnapi/runtime': 1.4.5 optional: true '@img/sharp-win32-arm64@0.34.3': @@ -18352,11 +18247,11 @@ snapshots: '@img/sharp-win32-x64@0.34.3': optional: true - '@inkeep/cxkit-color-mode@0.5.94': {} + '@inkeep/cxkit-color-mode@0.5.95': {} - '@inkeep/cxkit-docusaurus@0.5.94(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(zod@3.23.8)': + '@inkeep/cxkit-docusaurus@0.5.95(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(zod@3.25.76)': dependencies: - '@inkeep/cxkit-react': 0.5.94(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(zod@3.23.8) + '@inkeep/cxkit-react': 0.5.95(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(zod@3.25.76) merge-anything: 5.1.7 path: 0.12.7 react: 18.3.1 @@ -18368,11 +18263,11 @@ snapshots: - supports-color - zod - '@inkeep/cxkit-primitives@0.5.94(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(zod@3.23.8)': + '@inkeep/cxkit-primitives@0.5.95(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(zod@3.25.76)': dependencies: - '@inkeep/cxkit-color-mode': 0.5.94 - '@inkeep/cxkit-theme': 0.5.94 - '@inkeep/cxkit-types': 0.5.94 + '@inkeep/cxkit-color-mode': 0.5.95 + '@inkeep/cxkit-theme': 0.5.95 + '@inkeep/cxkit-types': 0.5.95 '@radix-ui/number': 1.1.1 '@radix-ui/primitive': 1.1.2 '@radix-ui/react-avatar': 1.1.2(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -18398,9 +18293,9 @@ snapshots: '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.2)(react@18.3.1) '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.2)(react@18.3.1) '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.2)(react@18.3.1) - '@zag-js/focus-trap': 1.18.3 - '@zag-js/presence': 1.18.3 - '@zag-js/react': 1.18.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@zag-js/focus-trap': 1.19.0 + '@zag-js/presence': 1.19.0 + '@zag-js/react': 1.19.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) altcha-lib: 1.3.0 aria-hidden: 1.2.6 dequal: 2.0.3 @@ -18408,7 +18303,7 @@ snapshots: lucide-react: 0.503.0(react@18.3.1) marked: 15.0.12 merge-anything: 5.1.7 - openai: 4.78.1(encoding@0.1.13)(zod@3.23.8) + openai: 4.78.1(encoding@0.1.13)(zod@3.25.76) prism-react-renderer: 2.4.1(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -18429,9 +18324,9 @@ snapshots: - supports-color - zod - '@inkeep/cxkit-react@0.5.94(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(zod@3.23.8)': + '@inkeep/cxkit-react@0.5.95(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(zod@3.25.76)': dependencies: - '@inkeep/cxkit-styled': 0.5.94(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(zod@3.23.8) + '@inkeep/cxkit-styled': 0.5.95(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(zod@3.25.76) '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.2)(react@18.3.1) lucide-react: 0.503.0(react@18.3.1) transitivePeerDependencies: @@ -18443,9 +18338,9 @@ snapshots: - supports-color - zod - '@inkeep/cxkit-styled@0.5.94(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(zod@3.23.8)': + '@inkeep/cxkit-styled@0.5.95(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(zod@3.25.76)': dependencies: - '@inkeep/cxkit-primitives': 0.5.94(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(zod@3.23.8) + '@inkeep/cxkit-primitives': 0.5.95(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(encoding@0.1.13)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(zod@3.25.76) class-variance-authority: 0.7.1 clsx: 2.1.1 merge-anything: 5.1.7 @@ -18459,11 +18354,11 @@ snapshots: - supports-color - zod - '@inkeep/cxkit-theme@0.5.94': + '@inkeep/cxkit-theme@0.5.95': dependencies: colorjs.io: 0.5.2 - '@inkeep/cxkit-types@0.5.94': {} + '@inkeep/cxkit-types@0.5.95': {} '@isaacs/cliui@8.0.2': dependencies: @@ -18493,7 +18388,7 @@ snapshots: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 22.16.4 + '@types/node': 22.16.5 '@types/yargs': 17.0.33 chalk: 4.1.2 @@ -19141,39 +19036,46 @@ snapshots: '@types/react': 19.1.2 react: 18.3.1 - '@mermaid-js/parser@0.6.1': + '@mermaid-js/parser@0.6.2': dependencies: langium: 3.3.1 - '@module-federation/error-codes@0.16.0': {} + '@module-federation/error-codes@0.17.0': {} - '@module-federation/runtime-core@0.16.0': + '@module-federation/runtime-core@0.17.0': dependencies: - '@module-federation/error-codes': 0.16.0 - '@module-federation/sdk': 0.16.0 + '@module-federation/error-codes': 0.17.0 + '@module-federation/sdk': 0.17.0 - '@module-federation/runtime-tools@0.16.0': + '@module-federation/runtime-tools@0.17.0': dependencies: - '@module-federation/runtime': 0.16.0 - '@module-federation/webpack-bundler-runtime': 0.16.0 + '@module-federation/runtime': 0.17.0 + '@module-federation/webpack-bundler-runtime': 0.17.0 - '@module-federation/runtime@0.16.0': + '@module-federation/runtime@0.17.0': dependencies: - '@module-federation/error-codes': 0.16.0 - '@module-federation/runtime-core': 0.16.0 - '@module-federation/sdk': 0.16.0 + '@module-federation/error-codes': 0.17.0 + '@module-federation/runtime-core': 0.17.0 + '@module-federation/sdk': 0.17.0 - '@module-federation/sdk@0.16.0': {} + '@module-federation/sdk@0.17.0': {} - '@module-federation/webpack-bundler-runtime@0.16.0': + '@module-federation/webpack-bundler-runtime@0.17.0': dependencies: - '@module-federation/runtime': 0.16.0 - '@module-federation/sdk': 0.16.0 + '@module-federation/runtime': 0.17.0 + '@module-federation/sdk': 0.17.0 '@napi-rs/wasm-runtime@0.2.12': dependencies: - '@emnapi/core': 1.4.4 - '@emnapi/runtime': 1.4.4 + '@emnapi/core': 1.4.5 + '@emnapi/runtime': 1.4.5 + '@tybys/wasm-util': 0.10.0 + optional: true + + '@napi-rs/wasm-runtime@1.0.1': + dependencies: + '@emnapi/core': 1.4.5 + '@emnapi/runtime': 1.4.5 '@tybys/wasm-util': 0.10.0 optional: true @@ -19227,11 +19129,11 @@ snapshots: dependencies: tslib: 2.8.1 - '@ngtools/webpack@16.2.16(@angular/compiler-cli@16.2.12(@angular/compiler@16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3)))(typescript@5.1.6))(typescript@5.1.6)(webpack@5.94.0(@swc/core@1.12.14)(esbuild@0.18.17))': + '@ngtools/webpack@16.2.16(@angular/compiler-cli@16.2.12(@angular/compiler@16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3)))(typescript@5.1.6))(typescript@5.1.6)(webpack@5.94.0(@swc/core@1.13.1)(esbuild@0.18.17))': dependencies: '@angular/compiler-cli': 16.2.12(@angular/compiler@16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3)))(typescript@5.1.6) typescript: 5.1.6 - webpack: 5.94.0(@swc/core@1.12.14)(esbuild@0.25.6) + webpack: 5.94.0(@swc/core@1.13.1)(esbuild@0.18.17) '@ngx-translate/core@15.0.0(@angular/common@16.2.12(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3))(rxjs@7.8.2))(@angular/core@16.2.12(rxjs@7.8.2)(zone.js@0.13.3))(rxjs@7.8.2)': dependencies: @@ -19260,11 +19162,11 @@ snapshots: '@npmcli/fs@2.1.2': dependencies: '@gar/promisify': 1.1.3 - semver: 7.5.4 + semver: 7.7.2 '@npmcli/fs@3.1.1': dependencies: - semver: 7.5.4 + semver: 7.7.2 '@npmcli/git@4.1.0': dependencies: @@ -19274,7 +19176,7 @@ snapshots: proc-log: 3.0.0 promise-inflight: 1.0.1 promise-retry: 2.0.1 - semver: 7.5.4 + semver: 7.7.2 which: 3.0.1 transitivePeerDependencies: - bluebird @@ -19306,26 +19208,26 @@ snapshots: - bluebird - supports-color - '@nrwl/devkit@16.5.1(nx@16.5.1(@swc/core@1.12.14))': + '@nrwl/devkit@16.5.1(nx@16.5.1(@swc/core@1.13.1))': dependencies: - '@nx/devkit': 16.5.1(nx@16.5.1(@swc/core@1.12.14)) + '@nx/devkit': 16.5.1(nx@16.5.1(@swc/core@1.13.1)) transitivePeerDependencies: - nx - '@nrwl/tao@16.5.1(@swc/core@1.12.14)': + '@nrwl/tao@16.5.1(@swc/core@1.13.1)': dependencies: - nx: 16.5.1(@swc/core@1.12.14) + nx: 16.5.1(@swc/core@1.13.1) transitivePeerDependencies: - '@swc-node/register' - '@swc/core' - debug - '@nx/devkit@16.5.1(nx@16.5.1(@swc/core@1.12.14))': + '@nx/devkit@16.5.1(nx@16.5.1(@swc/core@1.13.1))': dependencies: - '@nrwl/devkit': 16.5.1(nx@16.5.1(@swc/core@1.12.14)) + '@nrwl/devkit': 16.5.1(nx@16.5.1(@swc/core@1.13.1)) ejs: 3.1.10 ignore: 5.2.4 - nx: 16.5.1(@swc/core@1.12.14) + nx: 16.5.1(@swc/core@1.13.1) semver: 7.5.3 tmp: 0.2.1 tslib: 2.8.1 @@ -19371,6 +19273,65 @@ snapshots: '@otplib/core': 12.0.1 thirty-two: 1.0.2 + '@oxc-resolver/binding-android-arm-eabi@11.6.0': + optional: true + + '@oxc-resolver/binding-android-arm64@11.6.0': + optional: true + + '@oxc-resolver/binding-darwin-arm64@11.6.0': + optional: true + + '@oxc-resolver/binding-darwin-x64@11.6.0': + optional: true + + '@oxc-resolver/binding-freebsd-x64@11.6.0': + optional: true + + '@oxc-resolver/binding-linux-arm-gnueabihf@11.6.0': + optional: true + + '@oxc-resolver/binding-linux-arm-musleabihf@11.6.0': + optional: true + + '@oxc-resolver/binding-linux-arm64-gnu@11.6.0': + optional: true + + '@oxc-resolver/binding-linux-arm64-musl@11.6.0': + optional: true + + '@oxc-resolver/binding-linux-ppc64-gnu@11.6.0': + optional: true + + '@oxc-resolver/binding-linux-riscv64-gnu@11.6.0': + optional: true + + '@oxc-resolver/binding-linux-riscv64-musl@11.6.0': + optional: true + + '@oxc-resolver/binding-linux-s390x-gnu@11.6.0': + optional: true + + '@oxc-resolver/binding-linux-x64-gnu@11.6.0': + optional: true + + '@oxc-resolver/binding-linux-x64-musl@11.6.0': + optional: true + + '@oxc-resolver/binding-wasm32-wasi@11.6.0': + dependencies: + '@napi-rs/wasm-runtime': 1.0.1 + optional: true + + '@oxc-resolver/binding-win32-arm64-msvc@11.6.0': + optional: true + + '@oxc-resolver/binding-win32-ia32-msvc@11.6.0': + optional: true + + '@oxc-resolver/binding-win32-x64-msvc@11.6.0': + optional: true + '@parcel/watcher-android-arm64@2.5.1': optional: true @@ -19531,6 +19492,15 @@ snapshots: '@types/react': 19.1.2 '@types/react-dom': 19.1.2(@types/react@19.1.2) + '@radix-ui/react-arrow@1.1.7(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.2 + '@types/react-dom': 19.1.2(@types/react@19.1.2) + '@radix-ui/react-avatar@1.1.2(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/react-context': 1.1.1(@types/react@19.1.2)(react@18.3.1) @@ -19583,6 +19553,12 @@ snapshots: optionalDependencies: '@types/react': 19.1.2 + '@radix-ui/react-compose-refs@1.1.2(@types/react@19.1.2)(react@19.1.0)': + dependencies: + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.2 + '@radix-ui/react-context@1.1.1(@types/react@19.1.2)(react@18.3.1)': dependencies: react: 18.3.1 @@ -19595,6 +19571,12 @@ snapshots: optionalDependencies: '@types/react': 19.1.2 + '@radix-ui/react-context@1.1.2(@types/react@19.1.2)(react@19.1.0)': + dependencies: + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.2 + '@radix-ui/react-direction@1.1.0(@types/react@19.1.2)(react@18.3.1)': dependencies: react: 18.3.1 @@ -19620,6 +19602,19 @@ snapshots: '@types/react': 19.1.2 '@types/react-dom': 19.1.2(@types/react@19.1.2) + '@radix-ui/react-dismissable-layer@1.1.10(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/primitive': 1.1.2 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.1.2)(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.2 + '@types/react-dom': 19.1.2(@types/react@19.1.2) + '@radix-ui/react-dismissable-layer@1.1.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.1 @@ -19711,6 +19706,13 @@ snapshots: optionalDependencies: '@types/react': 19.1.2 + '@radix-ui/react-id@1.1.1(@types/react@19.1.2)(react@19.1.0)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.2)(react@19.1.0) + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.2 + '@radix-ui/react-popover@1.1.6(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.1 @@ -19788,6 +19790,24 @@ snapshots: '@types/react': 19.1.2 '@types/react-dom': 19.1.2(@types/react@19.1.2) + '@radix-ui/react-popper@1.2.7(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@floating-ui/react-dom': 2.1.4(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-arrow': 1.1.7(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-use-rect': 1.1.1(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/rect': 1.1.1 + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.2 + '@types/react-dom': 19.1.2(@types/react@19.1.2) + '@radix-ui/react-portal@1.1.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -19818,6 +19838,16 @@ snapshots: '@types/react': 19.1.2 '@types/react-dom': 19.1.2(@types/react@19.1.2) + '@radix-ui/react-portal@1.1.9(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.2)(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.2 + '@types/react-dom': 19.1.2(@types/react@19.1.2) + '@radix-ui/react-presence@1.1.2(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.1.2)(react@18.3.1) @@ -19838,6 +19868,16 @@ snapshots: '@types/react': 19.1.2 '@types/react-dom': 19.1.2(@types/react@19.1.2) + '@radix-ui/react-presence@1.1.4(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.2)(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.2 + '@types/react-dom': 19.1.2(@types/react@19.1.2) + '@radix-ui/react-primitive@2.0.1(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/react-slot': 1.1.1(@types/react@19.1.2)(react@18.3.1) @@ -19865,6 +19905,15 @@ snapshots: '@types/react': 19.1.2 '@types/react-dom': 19.1.2(@types/react@19.1.2) + '@radix-ui/react-primitive@2.1.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/react-slot': 1.2.3(@types/react@19.1.2)(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.2 + '@types/react-dom': 19.1.2(@types/react@19.1.2) + '@radix-ui/react-roving-focus@1.1.10(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.2 @@ -19920,6 +19969,13 @@ snapshots: optionalDependencies: '@types/react': 19.1.2 + '@radix-ui/react-slot@1.2.3(@types/react@19.1.2)(react@19.1.0)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0) + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.2 + '@radix-ui/react-tabs@1.1.12(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/primitive': 1.1.2 @@ -19956,6 +20012,26 @@ snapshots: '@types/react': 19.1.2 '@types/react-dom': 19.1.2(@types/react@19.1.2) + '@radix-ui/react-tooltip@1.2.7(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/primitive': 1.1.2 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-dismissable-layer': 1.1.10(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-popper': 1.2.7(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-portal': 1.1.9(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-presence': 1.1.4(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + '@radix-ui/react-slot': 1.2.3(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-visually-hidden': 1.2.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.2 + '@types/react-dom': 19.1.2(@types/react@19.1.2) + '@radix-ui/react-use-callback-ref@1.1.0(@types/react@19.1.2)(react@18.3.1)': dependencies: react: 18.3.1 @@ -19968,6 +20044,12 @@ snapshots: optionalDependencies: '@types/react': 19.1.2 + '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.1.2)(react@19.1.0)': + dependencies: + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.2 + '@radix-ui/react-use-controllable-state@1.1.0(@types/react@19.1.2)(react@18.3.1)': dependencies: '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.1.2)(react@18.3.1) @@ -19983,6 +20065,14 @@ snapshots: optionalDependencies: '@types/react': 19.1.2 + '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.1.2)(react@19.1.0)': + dependencies: + '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.1.2)(react@19.1.0) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.2)(react@19.1.0) + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.2 + '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.1.2)(react@18.3.1)': dependencies: '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.2)(react@18.3.1) @@ -19990,6 +20080,13 @@ snapshots: optionalDependencies: '@types/react': 19.1.2 + '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.1.2)(react@19.1.0)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.2)(react@19.1.0) + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.2 + '@radix-ui/react-use-escape-keydown@1.1.0(@types/react@19.1.2)(react@18.3.1)': dependencies: '@radix-ui/react-use-callback-ref': 1.1.0(@types/react@19.1.2)(react@18.3.1) @@ -20004,6 +20101,13 @@ snapshots: optionalDependencies: '@types/react': 19.1.2 + '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.1.2)(react@19.1.0)': + dependencies: + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.2)(react@19.1.0) + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.2 + '@radix-ui/react-use-layout-effect@1.1.0(@types/react@19.1.2)(react@18.3.1)': dependencies: react: 18.3.1 @@ -20016,6 +20120,12 @@ snapshots: optionalDependencies: '@types/react': 19.1.2 + '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.1.2)(react@19.1.0)': + dependencies: + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.2 + '@radix-ui/react-use-previous@1.1.0(@types/react@19.1.2)(react@18.3.1)': dependencies: react: 18.3.1 @@ -20036,6 +20146,13 @@ snapshots: optionalDependencies: '@types/react': 19.1.2 + '@radix-ui/react-use-rect@1.1.1(@types/react@19.1.2)(react@19.1.0)': + dependencies: + '@radix-ui/rect': 1.1.1 + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.2 + '@radix-ui/react-use-size@1.1.0(@types/react@19.1.2)(react@18.3.1)': dependencies: '@radix-ui/react-use-layout-effect': 1.1.0(@types/react@19.1.2)(react@18.3.1) @@ -20050,6 +20167,13 @@ snapshots: optionalDependencies: '@types/react': 19.1.2 + '@radix-ui/react-use-size@1.1.1(@types/react@19.1.2)(react@19.1.0)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.2)(react@19.1.0) + react: 19.1.0 + optionalDependencies: + '@types/react': 19.1.2 + '@radix-ui/react-visually-hidden@1.1.1(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/react-primitive': 2.0.1(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -20059,6 +20183,15 @@ snapshots: '@types/react': 19.1.2 '@types/react-dom': 19.1.2(@types/react@19.1.2) + '@radix-ui/react-visually-hidden@1.2.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + dependencies: + '@radix-ui/react-primitive': 2.1.3(@types/react-dom@19.1.2(@types/react@19.1.2))(@types/react@19.1.2)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + react: 19.1.0 + react-dom: 19.1.0(react@19.1.0) + optionalDependencies: + '@types/react': 19.1.2 + '@types/react-dom': 19.1.2(@types/react@19.1.2) + '@radix-ui/rect@1.1.0': {} '@radix-ui/rect@1.1.1': {} @@ -20145,7 +20278,7 @@ snapshots: react: 18.3.1 react-redux: 7.2.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@rolldown/pluginutils@1.0.0-beta.19': {} + '@rolldown/pluginutils@1.0.0-beta.27': {} '@rollup/rollup-android-arm-eabi@4.45.1': optional: true @@ -20207,55 +20340,55 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.45.1': optional: true - '@rspack/binding-darwin-arm64@1.4.8': + '@rspack/binding-darwin-arm64@1.4.9': optional: true - '@rspack/binding-darwin-x64@1.4.8': + '@rspack/binding-darwin-x64@1.4.9': optional: true - '@rspack/binding-linux-arm64-gnu@1.4.8': + '@rspack/binding-linux-arm64-gnu@1.4.9': optional: true - '@rspack/binding-linux-arm64-musl@1.4.8': + '@rspack/binding-linux-arm64-musl@1.4.9': optional: true - '@rspack/binding-linux-x64-gnu@1.4.8': + '@rspack/binding-linux-x64-gnu@1.4.9': optional: true - '@rspack/binding-linux-x64-musl@1.4.8': + '@rspack/binding-linux-x64-musl@1.4.9': optional: true - '@rspack/binding-wasm32-wasi@1.4.8': + '@rspack/binding-wasm32-wasi@1.4.9': dependencies: - '@napi-rs/wasm-runtime': 0.2.12 + '@napi-rs/wasm-runtime': 1.0.1 optional: true - '@rspack/binding-win32-arm64-msvc@1.4.8': + '@rspack/binding-win32-arm64-msvc@1.4.9': optional: true - '@rspack/binding-win32-ia32-msvc@1.4.8': + '@rspack/binding-win32-ia32-msvc@1.4.9': optional: true - '@rspack/binding-win32-x64-msvc@1.4.8': + '@rspack/binding-win32-x64-msvc@1.4.9': optional: true - '@rspack/binding@1.4.8': + '@rspack/binding@1.4.9': optionalDependencies: - '@rspack/binding-darwin-arm64': 1.4.8 - '@rspack/binding-darwin-x64': 1.4.8 - '@rspack/binding-linux-arm64-gnu': 1.4.8 - '@rspack/binding-linux-arm64-musl': 1.4.8 - '@rspack/binding-linux-x64-gnu': 1.4.8 - '@rspack/binding-linux-x64-musl': 1.4.8 - '@rspack/binding-wasm32-wasi': 1.4.8 - '@rspack/binding-win32-arm64-msvc': 1.4.8 - '@rspack/binding-win32-ia32-msvc': 1.4.8 - '@rspack/binding-win32-x64-msvc': 1.4.8 + '@rspack/binding-darwin-arm64': 1.4.9 + '@rspack/binding-darwin-x64': 1.4.9 + '@rspack/binding-linux-arm64-gnu': 1.4.9 + '@rspack/binding-linux-arm64-musl': 1.4.9 + '@rspack/binding-linux-x64-gnu': 1.4.9 + '@rspack/binding-linux-x64-musl': 1.4.9 + '@rspack/binding-wasm32-wasi': 1.4.9 + '@rspack/binding-win32-arm64-msvc': 1.4.9 + '@rspack/binding-win32-ia32-msvc': 1.4.9 + '@rspack/binding-win32-x64-msvc': 1.4.9 - '@rspack/core@1.4.8(@swc/helpers@0.5.17)': + '@rspack/core@1.4.9(@swc/helpers@0.5.17)': dependencies: - '@module-federation/runtime-tools': 0.16.0 - '@rspack/binding': 1.4.8 + '@module-federation/runtime-tools': 0.17.0 + '@rspack/binding': 1.4.9 '@rspack/lite-tapable': 1.0.1 optionalDependencies: '@swc/helpers': 0.5.17 @@ -20282,9 +20415,9 @@ snapshots: '@sideway/pinpoint@2.0.0': {} - '@signalwire/docusaurus-plugin-llms-txt@1.2.1(@docusaurus/core@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17)(esbuild@0.25.6))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.8(@swc/helpers@0.5.17))(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(lightningcss@1.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3))': + '@signalwire/docusaurus-plugin-llms-txt@1.2.1(@docusaurus/core@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.9(@swc/helpers@0.5.17))(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3))': dependencies: - '@docusaurus/core': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17)(esbuild@0.25.6))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.8(@swc/helpers@0.5.17))(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(lightningcss@1.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) + '@docusaurus/core': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.9(@swc/helpers@0.5.17))(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) fs-extra: 11.3.0 hast-util-select: 6.0.4 hast-util-to-html: 9.0.5 @@ -20438,51 +20571,51 @@ snapshots: - supports-color - typescript - '@swc/core-darwin-arm64@1.12.14': + '@swc/core-darwin-arm64@1.13.1': optional: true - '@swc/core-darwin-x64@1.12.14': + '@swc/core-darwin-x64@1.13.1': optional: true - '@swc/core-linux-arm-gnueabihf@1.12.14': + '@swc/core-linux-arm-gnueabihf@1.13.1': optional: true - '@swc/core-linux-arm64-gnu@1.12.14': + '@swc/core-linux-arm64-gnu@1.13.1': optional: true - '@swc/core-linux-arm64-musl@1.12.14': + '@swc/core-linux-arm64-musl@1.13.1': optional: true - '@swc/core-linux-x64-gnu@1.12.14': + '@swc/core-linux-x64-gnu@1.13.1': optional: true - '@swc/core-linux-x64-musl@1.12.14': + '@swc/core-linux-x64-musl@1.13.1': optional: true - '@swc/core-win32-arm64-msvc@1.12.14': + '@swc/core-win32-arm64-msvc@1.13.1': optional: true - '@swc/core-win32-ia32-msvc@1.12.14': + '@swc/core-win32-ia32-msvc@1.13.1': optional: true - '@swc/core-win32-x64-msvc@1.12.14': + '@swc/core-win32-x64-msvc@1.13.1': optional: true - '@swc/core@1.12.14(@swc/helpers@0.5.17)': + '@swc/core@1.13.1(@swc/helpers@0.5.17)': dependencies: '@swc/counter': 0.1.3 '@swc/types': 0.1.23 optionalDependencies: - '@swc/core-darwin-arm64': 1.12.14 - '@swc/core-darwin-x64': 1.12.14 - '@swc/core-linux-arm-gnueabihf': 1.12.14 - '@swc/core-linux-arm64-gnu': 1.12.14 - '@swc/core-linux-arm64-musl': 1.12.14 - '@swc/core-linux-x64-gnu': 1.12.14 - '@swc/core-linux-x64-musl': 1.12.14 - '@swc/core-win32-arm64-msvc': 1.12.14 - '@swc/core-win32-ia32-msvc': 1.12.14 - '@swc/core-win32-x64-msvc': 1.12.14 + '@swc/core-darwin-arm64': 1.13.1 + '@swc/core-darwin-x64': 1.13.1 + '@swc/core-linux-arm-gnueabihf': 1.13.1 + '@swc/core-linux-arm64-gnu': 1.13.1 + '@swc/core-linux-arm64-musl': 1.13.1 + '@swc/core-linux-x64-gnu': 1.13.1 + '@swc/core-linux-x64-musl': 1.13.1 + '@swc/core-win32-arm64-msvc': 1.13.1 + '@swc/core-win32-ia32-msvc': 1.13.1 + '@swc/core-win32-x64-msvc': 1.13.1 '@swc/helpers': 0.5.17 '@swc/counter@0.1.3': {} @@ -20495,50 +20628,50 @@ snapshots: dependencies: tslib: 2.8.1 - '@swc/html-darwin-arm64@1.12.14': + '@swc/html-darwin-arm64@1.13.1': optional: true - '@swc/html-darwin-x64@1.12.14': + '@swc/html-darwin-x64@1.13.1': optional: true - '@swc/html-linux-arm-gnueabihf@1.12.14': + '@swc/html-linux-arm-gnueabihf@1.13.1': optional: true - '@swc/html-linux-arm64-gnu@1.12.14': + '@swc/html-linux-arm64-gnu@1.13.1': optional: true - '@swc/html-linux-arm64-musl@1.12.14': + '@swc/html-linux-arm64-musl@1.13.1': optional: true - '@swc/html-linux-x64-gnu@1.12.14': + '@swc/html-linux-x64-gnu@1.13.1': optional: true - '@swc/html-linux-x64-musl@1.12.14': + '@swc/html-linux-x64-musl@1.13.1': optional: true - '@swc/html-win32-arm64-msvc@1.12.14': + '@swc/html-win32-arm64-msvc@1.13.1': optional: true - '@swc/html-win32-ia32-msvc@1.12.14': + '@swc/html-win32-ia32-msvc@1.13.1': optional: true - '@swc/html-win32-x64-msvc@1.12.14': + '@swc/html-win32-x64-msvc@1.13.1': optional: true - '@swc/html@1.12.14': + '@swc/html@1.13.1': dependencies: '@swc/counter': 0.1.3 optionalDependencies: - '@swc/html-darwin-arm64': 1.12.14 - '@swc/html-darwin-x64': 1.12.14 - '@swc/html-linux-arm-gnueabihf': 1.12.14 - '@swc/html-linux-arm64-gnu': 1.12.14 - '@swc/html-linux-arm64-musl': 1.12.14 - '@swc/html-linux-x64-gnu': 1.12.14 - '@swc/html-linux-x64-musl': 1.12.14 - '@swc/html-win32-arm64-msvc': 1.12.14 - '@swc/html-win32-ia32-msvc': 1.12.14 - '@swc/html-win32-x64-msvc': 1.12.14 + '@swc/html-darwin-arm64': 1.13.1 + '@swc/html-darwin-x64': 1.13.1 + '@swc/html-linux-arm-gnueabihf': 1.13.1 + '@swc/html-linux-arm64-gnu': 1.13.1 + '@swc/html-linux-arm64-musl': 1.13.1 + '@swc/html-linux-x64-gnu': 1.13.1 + '@swc/html-linux-x64-musl': 1.13.1 + '@swc/html-win32-arm64-msvc': 1.13.1 + '@swc/html-win32-ia32-msvc': 1.13.1 + '@swc/html-win32-x64-msvc': 1.13.1 '@swc/types@0.1.23': dependencies: @@ -20667,15 +20800,11 @@ snapshots: '@types/body-parser@1.19.6': dependencies: '@types/connect': 3.4.38 - '@types/node': 22.16.4 + '@types/node': 22.16.5 '@types/bonjour@3.5.13': dependencies: - '@types/node': 22.16.4 - - '@types/chai@5.2.2': - dependencies: - '@types/deep-eql': 4.0.2 + '@types/node': 22.16.5 '@types/codemirror@5.60.16': dependencies: @@ -20684,15 +20813,15 @@ snapshots: '@types/connect-history-api-fallback@1.5.4': dependencies: '@types/express-serve-static-core': 5.0.7 - '@types/node': 22.16.4 + '@types/node': 22.16.5 '@types/connect@3.4.38': dependencies: - '@types/node': 22.16.4 + '@types/node': 22.16.5 '@types/cors@2.8.19': dependencies: - '@types/node': 22.16.4 + '@types/node': 22.16.5 '@types/d3-array@3.2.1': {} @@ -20815,8 +20944,6 @@ snapshots: dependencies: '@types/ms': 2.1.0 - '@types/deep-eql@4.0.2': {} - '@types/eslint-scope@3.7.7': dependencies: '@types/eslint': 9.6.1 @@ -20835,14 +20962,14 @@ snapshots: '@types/express-serve-static-core@4.19.6': dependencies: - '@types/node': 22.16.4 + '@types/node': 22.16.5 '@types/qs': 6.14.0 '@types/range-parser': 1.2.7 '@types/send': 0.17.5 '@types/express-serve-static-core@5.0.7': dependencies: - '@types/node': 22.16.4 + '@types/node': 22.16.5 '@types/qs': 6.14.0 '@types/range-parser': 1.2.7 '@types/send': 0.17.5 @@ -20872,7 +20999,7 @@ snapshots: '@types/history@4.7.11': {} - '@types/hoist-non-react-statics@3.3.6': + '@types/hoist-non-react-statics@3.3.7(@types/react@19.1.2)': dependencies: '@types/react': 19.1.2 hoist-non-react-statics: 3.3.2 @@ -20885,7 +21012,7 @@ snapshots: '@types/http-proxy@1.17.16': dependencies: - '@types/node': 22.16.4 + '@types/node': 22.16.5 '@types/istanbul-lib-coverage@2.0.6': {} @@ -20910,7 +21037,7 @@ snapshots: '@types/jsonwebtoken@9.0.10': dependencies: '@types/ms': 2.1.0 - '@types/node': 22.16.4 + '@types/node': 22.16.5 '@types/mdast@3.0.15': dependencies: @@ -20928,25 +21055,29 @@ snapshots: '@types/node-fetch@2.6.12': dependencies: - '@types/node': 22.16.4 - form-data: 4.0.3 + '@types/node': 22.16.5 + form-data: 4.0.4 '@types/node-forge@1.3.13': dependencies: - '@types/node': 22.16.4 + '@types/node': 22.16.5 '@types/node@12.20.55': {} '@types/node@17.0.45': {} - '@types/node@18.19.119': + '@types/node@18.19.120': dependencies: undici-types: 5.26.5 - '@types/node@22.16.4': + '@types/node@22.16.5': dependencies: undici-types: 6.21.0 + '@types/node@24.1.0': + dependencies: + undici-types: 7.8.0 + '@types/normalize-package-data@2.4.4': {} '@types/opentype.js@1.3.8': {} @@ -20955,7 +21086,7 @@ snapshots: '@types/pg@8.15.4': dependencies: - '@types/node': 22.16.4 + '@types/node': 22.16.5 pg-protocol: 1.10.3 pg-types: 2.2.0 @@ -20965,7 +21096,7 @@ snapshots: '@types/qrcode@1.5.5': dependencies: - '@types/node': 22.16.4 + '@types/node': 22.16.5 '@types/qs@6.14.0': {} @@ -20977,7 +21108,7 @@ snapshots: '@types/react-redux@7.1.34': dependencies: - '@types/hoist-non-react-statics': 3.3.6 + '@types/hoist-non-react-statics': 3.3.7(@types/react@19.1.2) '@types/react': 19.1.2 hoist-non-react-statics: 3.3.2 redux: 4.2.1 @@ -21007,14 +21138,14 @@ snapshots: '@types/sax@1.2.7': dependencies: - '@types/node': 22.16.4 + '@types/node': 22.16.5 '@types/semver@7.7.0': {} '@types/send@0.17.5': dependencies: '@types/mime': 1.3.5 - '@types/node': 22.16.4 + '@types/node': 22.16.5 '@types/serve-index@1.9.4': dependencies: @@ -21023,7 +21154,7 @@ snapshots: '@types/serve-static@1.15.8': dependencies: '@types/http-errors': 2.0.5 - '@types/node': 22.16.4 + '@types/node': 22.16.5 '@types/send': 0.17.5 '@types/sinonjs__fake-timers@8.1.1': {} @@ -21032,7 +21163,7 @@ snapshots: '@types/sockjs@0.3.36': dependencies: - '@types/node': 22.16.4 + '@types/node': 22.16.5 '@types/tern@0.23.9': dependencies: @@ -21051,7 +21182,7 @@ snapshots: '@types/ws@8.18.1': dependencies: - '@types/node': 22.16.4 + '@types/node': 22.16.5 '@types/yargs-parser@21.0.3': {} @@ -21061,13 +21192,13 @@ snapshots: '@types/yauzl@2.10.3': dependencies: - '@types/node': 22.16.4 + '@types/node': 22.16.5 optional: true - '@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@8.37.0(eslint@8.57.1)(typescript@5.1.6))(eslint@8.57.1)(typescript@5.1.6)': + '@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@8.38.0(eslint@8.57.1)(typescript@5.1.6))(eslint@8.57.1)(typescript@5.1.6)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.37.0(eslint@8.57.1)(typescript@5.1.6) + '@typescript-eslint/parser': 8.38.0(eslint@8.57.1)(typescript@5.1.6) '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/type-utils': 5.62.0(eslint@8.57.1)(typescript@5.1.6) '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.1.6) @@ -21083,10 +21214,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@8.37.0(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1)(typescript@5.8.3)': + '@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@8.38.0(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1)(typescript@5.8.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.37.0(eslint@8.57.1)(typescript@5.8.3) + '@typescript-eslint/parser': 8.38.0(eslint@8.57.1)(typescript@5.8.3) '@typescript-eslint/scope-manager': 7.18.0 '@typescript-eslint/type-utils': 7.18.0(eslint@8.57.1)(typescript@5.8.3) '@typescript-eslint/utils': 7.18.0(eslint@8.57.1)(typescript@5.8.3) @@ -21101,14 +21232,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/eslint-plugin@8.37.0(@typescript-eslint/parser@8.37.0(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1)(typescript@5.8.3)': + '@typescript-eslint/eslint-plugin@8.38.0(@typescript-eslint/parser@8.38.0(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1)(typescript@5.8.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.37.0(eslint@8.57.1)(typescript@5.8.3) - '@typescript-eslint/scope-manager': 8.37.0 - '@typescript-eslint/type-utils': 8.37.0(eslint@8.57.1)(typescript@5.8.3) - '@typescript-eslint/utils': 8.37.0(eslint@8.57.1)(typescript@5.8.3) - '@typescript-eslint/visitor-keys': 8.37.0 + '@typescript-eslint/parser': 8.38.0(eslint@8.57.1)(typescript@5.8.3) + '@typescript-eslint/scope-manager': 8.38.0 + '@typescript-eslint/type-utils': 8.38.0(eslint@8.57.1)(typescript@5.8.3) + '@typescript-eslint/utils': 8.38.0(eslint@8.57.1)(typescript@5.8.3) + '@typescript-eslint/visitor-keys': 8.38.0 eslint: 8.57.1 graphemer: 1.4.0 ignore: 7.0.5 @@ -21118,43 +21249,43 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.37.0(eslint@8.57.1)(typescript@5.1.6)': + '@typescript-eslint/parser@8.38.0(eslint@8.57.1)(typescript@5.1.6)': dependencies: - '@typescript-eslint/scope-manager': 8.37.0 - '@typescript-eslint/types': 8.37.0 - '@typescript-eslint/typescript-estree': 8.37.0(typescript@5.1.6) - '@typescript-eslint/visitor-keys': 8.37.0 + '@typescript-eslint/scope-manager': 8.38.0 + '@typescript-eslint/types': 8.38.0 + '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.1.6) + '@typescript-eslint/visitor-keys': 8.38.0 debug: 4.4.1(supports-color@5.5.0) eslint: 8.57.1 typescript: 5.1.6 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.37.0(eslint@8.57.1)(typescript@5.8.3)': + '@typescript-eslint/parser@8.38.0(eslint@8.57.1)(typescript@5.8.3)': dependencies: - '@typescript-eslint/scope-manager': 8.37.0 - '@typescript-eslint/types': 8.37.0 - '@typescript-eslint/typescript-estree': 8.37.0(typescript@5.8.3) - '@typescript-eslint/visitor-keys': 8.37.0 + '@typescript-eslint/scope-manager': 8.38.0 + '@typescript-eslint/types': 8.38.0 + '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.8.3) + '@typescript-eslint/visitor-keys': 8.38.0 debug: 4.4.1(supports-color@5.5.0) eslint: 8.57.1 typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.37.0(typescript@5.1.6)': + '@typescript-eslint/project-service@8.38.0(typescript@5.1.6)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.37.0(typescript@5.1.6) - '@typescript-eslint/types': 8.37.0 + '@typescript-eslint/tsconfig-utils': 8.38.0(typescript@5.1.6) + '@typescript-eslint/types': 8.38.0 debug: 4.4.1(supports-color@5.5.0) typescript: 5.1.6 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.37.0(typescript@5.8.3)': + '@typescript-eslint/project-service@8.38.0(typescript@5.8.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.37.0(typescript@5.8.3) - '@typescript-eslint/types': 8.37.0 + '@typescript-eslint/tsconfig-utils': 8.38.0(typescript@5.8.3) + '@typescript-eslint/types': 8.38.0 debug: 4.4.1(supports-color@5.5.0) typescript: 5.8.3 transitivePeerDependencies: @@ -21175,16 +21306,16 @@ snapshots: '@typescript-eslint/types': 8.0.0-alpha.20 '@typescript-eslint/visitor-keys': 8.0.0-alpha.20 - '@typescript-eslint/scope-manager@8.37.0': + '@typescript-eslint/scope-manager@8.38.0': dependencies: - '@typescript-eslint/types': 8.37.0 - '@typescript-eslint/visitor-keys': 8.37.0 + '@typescript-eslint/types': 8.38.0 + '@typescript-eslint/visitor-keys': 8.38.0 - '@typescript-eslint/tsconfig-utils@8.37.0(typescript@5.1.6)': + '@typescript-eslint/tsconfig-utils@8.38.0(typescript@5.1.6)': dependencies: typescript: 5.1.6 - '@typescript-eslint/tsconfig-utils@8.37.0(typescript@5.8.3)': + '@typescript-eslint/tsconfig-utils@8.38.0(typescript@5.8.3)': dependencies: typescript: 5.8.3 @@ -21212,11 +21343,11 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/type-utils@8.37.0(eslint@8.57.1)(typescript@5.8.3)': + '@typescript-eslint/type-utils@8.38.0(eslint@8.57.1)(typescript@5.8.3)': dependencies: - '@typescript-eslint/types': 8.37.0 - '@typescript-eslint/typescript-estree': 8.37.0(typescript@5.8.3) - '@typescript-eslint/utils': 8.37.0(eslint@8.57.1)(typescript@5.8.3) + '@typescript-eslint/types': 8.38.0 + '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.8.3) + '@typescript-eslint/utils': 8.38.0(eslint@8.57.1)(typescript@5.8.3) debug: 4.4.1(supports-color@5.5.0) eslint: 8.57.1 ts-api-utils: 2.1.0(typescript@5.8.3) @@ -21230,7 +21361,7 @@ snapshots: '@typescript-eslint/types@8.0.0-alpha.20': {} - '@typescript-eslint/types@8.37.0': {} + '@typescript-eslint/types@8.38.0': {} '@typescript-eslint/typescript-estree@5.62.0(typescript@5.1.6)': dependencies: @@ -21276,12 +21407,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@8.37.0(typescript@5.1.6)': + '@typescript-eslint/typescript-estree@8.38.0(typescript@5.1.6)': dependencies: - '@typescript-eslint/project-service': 8.37.0(typescript@5.1.6) - '@typescript-eslint/tsconfig-utils': 8.37.0(typescript@5.1.6) - '@typescript-eslint/types': 8.37.0 - '@typescript-eslint/visitor-keys': 8.37.0 + '@typescript-eslint/project-service': 8.38.0(typescript@5.1.6) + '@typescript-eslint/tsconfig-utils': 8.38.0(typescript@5.1.6) + '@typescript-eslint/types': 8.38.0 + '@typescript-eslint/visitor-keys': 8.38.0 debug: 4.4.1(supports-color@5.5.0) fast-glob: 3.3.3 is-glob: 4.0.3 @@ -21292,12 +21423,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@8.37.0(typescript@5.8.3)': + '@typescript-eslint/typescript-estree@8.38.0(typescript@5.8.3)': dependencies: - '@typescript-eslint/project-service': 8.37.0(typescript@5.8.3) - '@typescript-eslint/tsconfig-utils': 8.37.0(typescript@5.8.3) - '@typescript-eslint/types': 8.37.0 - '@typescript-eslint/visitor-keys': 8.37.0 + '@typescript-eslint/project-service': 8.38.0(typescript@5.8.3) + '@typescript-eslint/tsconfig-utils': 8.38.0(typescript@5.8.3) + '@typescript-eslint/types': 8.38.0 + '@typescript-eslint/visitor-keys': 8.38.0 debug: 4.4.1(supports-color@5.5.0) fast-glob: 3.3.3 is-glob: 4.0.3 @@ -21345,12 +21476,12 @@ snapshots: - supports-color - typescript - '@typescript-eslint/utils@8.37.0(eslint@8.57.1)(typescript@5.8.3)': + '@typescript-eslint/utils@8.38.0(eslint@8.57.1)(typescript@5.8.3)': dependencies: '@eslint-community/eslint-utils': 4.7.0(eslint@8.57.1) - '@typescript-eslint/scope-manager': 8.37.0 - '@typescript-eslint/types': 8.37.0 - '@typescript-eslint/typescript-estree': 8.37.0(typescript@5.8.3) + '@typescript-eslint/scope-manager': 8.38.0 + '@typescript-eslint/types': 8.38.0 + '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.8.3) eslint: 8.57.1 typescript: 5.8.3 transitivePeerDependencies: @@ -21371,9 +21502,9 @@ snapshots: '@typescript-eslint/types': 8.0.0-alpha.20 eslint-visitor-keys: 3.4.3 - '@typescript-eslint/visitor-keys@8.37.0': + '@typescript-eslint/visitor-keys@8.38.0': dependencies: - '@typescript-eslint/types': 8.37.0 + '@typescript-eslint/types': 8.38.0 eslint-visitor-keys: 4.2.1 '@ungap/structured-clone@1.3.0': {} @@ -21444,19 +21575,19 @@ snapshots: '@vercel/git-hooks@1.0.0': {} - '@vitejs/plugin-basic-ssl@1.0.1(vite@4.5.5(@types/node@22.16.4)(less@4.1.3)(lightningcss@1.30.1)(sass@1.64.1)(terser@5.19.2))': + '@vitejs/plugin-basic-ssl@1.0.1(vite@4.5.5(@types/node@22.16.5)(less@4.1.3)(lightningcss@1.30.1)(sass@1.64.1)(terser@5.19.2))': dependencies: - vite: 4.5.5(@types/node@22.16.4)(less@4.1.3)(lightningcss@1.30.1)(sass@1.64.1)(terser@5.19.2) + vite: 4.5.5(@types/node@22.16.5)(less@4.1.3)(lightningcss@1.30.1)(sass@1.64.1)(terser@5.19.2) - '@vitejs/plugin-react@4.6.0(vite@7.0.4(@types/node@22.16.4)(jiti@1.21.7)(less@4.1.3)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0))': + '@vitejs/plugin-react@4.7.0(vite@5.4.19(@types/node@22.16.5)(less@4.1.3)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1))': dependencies: '@babel/core': 7.28.0 '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.0) '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.28.0) - '@rolldown/pluginutils': 1.0.0-beta.19 + '@rolldown/pluginutils': 1.0.0-beta.27 '@types/babel__core': 7.20.5 react-refresh: 0.17.0 - vite: 7.0.4(@types/node@22.16.4)(jiti@1.21.7)(less@4.1.3)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0) + vite: 5.4.19(@types/node@22.16.5)(less@4.1.3)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1) transitivePeerDependencies: - supports-color @@ -21467,81 +21598,47 @@ snapshots: chai: 5.2.1 tinyrainbow: 1.2.0 - '@vitest/expect@3.2.4': - dependencies: - '@types/chai': 5.2.2 - '@vitest/spy': 3.2.4 - '@vitest/utils': 3.2.4 - chai: 5.2.1 - tinyrainbow: 2.0.0 - - '@vitest/mocker@2.1.9(vite@5.4.19(@types/node@22.16.4)(less@4.1.3)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1))': + '@vitest/mocker@2.1.9(vite@5.4.19(@types/node@22.16.5)(less@4.1.3)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1))': dependencies: '@vitest/spy': 2.1.9 estree-walker: 3.0.3 magic-string: 0.30.17 optionalDependencies: - vite: 5.4.19(@types/node@22.16.4)(less@4.1.3)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1) + vite: 5.4.19(@types/node@22.16.5)(less@4.1.3)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1) - '@vitest/mocker@3.2.4(vite@7.0.4(@types/node@22.16.4)(jiti@1.21.7)(less@4.1.3)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0))': + '@vitest/mocker@2.1.9(vite@5.4.19(@types/node@24.1.0)(less@4.1.3)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1))': dependencies: - '@vitest/spy': 3.2.4 + '@vitest/spy': 2.1.9 estree-walker: 3.0.3 magic-string: 0.30.17 optionalDependencies: - vite: 7.0.4(@types/node@22.16.4)(jiti@1.21.7)(less@4.1.3)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0) + vite: 5.4.19(@types/node@24.1.0)(less@4.1.3)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1) '@vitest/pretty-format@2.1.9': dependencies: tinyrainbow: 1.2.0 - '@vitest/pretty-format@3.2.4': - dependencies: - tinyrainbow: 2.0.0 - '@vitest/runner@2.1.9': dependencies: '@vitest/utils': 2.1.9 pathe: 1.1.2 - '@vitest/runner@3.2.4': - dependencies: - '@vitest/utils': 3.2.4 - pathe: 2.0.3 - strip-literal: 3.0.0 - '@vitest/snapshot@2.1.9': dependencies: '@vitest/pretty-format': 2.1.9 magic-string: 0.30.17 pathe: 1.1.2 - '@vitest/snapshot@3.2.4': - dependencies: - '@vitest/pretty-format': 3.2.4 - magic-string: 0.30.17 - pathe: 2.0.3 - '@vitest/spy@2.1.9': dependencies: tinyspy: 3.0.2 - '@vitest/spy@3.2.4': - dependencies: - tinyspy: 4.0.3 - '@vitest/utils@2.1.9': dependencies: '@vitest/pretty-format': 2.1.9 loupe: 3.1.4 tinyrainbow: 1.2.0 - '@vitest/utils@3.2.4': - dependencies: - '@vitest/pretty-format': 3.2.4 - loupe: 3.1.4 - tinyrainbow: 2.0.0 - '@webassemblyjs/ast@1.14.1': dependencies: '@webassemblyjs/helper-numbers': 1.13.2 @@ -21642,43 +21739,43 @@ snapshots: js-yaml: 3.14.1 tslib: 2.8.1 - '@zag-js/core@1.18.3': + '@zag-js/core@1.19.0': dependencies: - '@zag-js/dom-query': 1.18.3 - '@zag-js/utils': 1.18.3 + '@zag-js/dom-query': 1.19.0 + '@zag-js/utils': 1.19.0 - '@zag-js/dom-query@1.18.3': + '@zag-js/dom-query@1.19.0': dependencies: - '@zag-js/types': 1.18.3 + '@zag-js/types': 1.19.0 - '@zag-js/focus-trap@1.18.3': + '@zag-js/focus-trap@1.19.0': dependencies: - '@zag-js/dom-query': 1.18.3 + '@zag-js/dom-query': 1.19.0 - '@zag-js/presence@1.18.3': + '@zag-js/presence@1.19.0': dependencies: - '@zag-js/core': 1.18.3 - '@zag-js/dom-query': 1.18.3 - '@zag-js/types': 1.18.3 + '@zag-js/core': 1.19.0 + '@zag-js/dom-query': 1.19.0 + '@zag-js/types': 1.19.0 - '@zag-js/react@1.18.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@zag-js/react@1.19.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@zag-js/core': 1.18.3 - '@zag-js/store': 1.18.3 - '@zag-js/types': 1.18.3 - '@zag-js/utils': 1.18.3 + '@zag-js/core': 1.19.0 + '@zag-js/store': 1.19.0 + '@zag-js/types': 1.19.0 + '@zag-js/utils': 1.19.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@zag-js/store@1.18.3': + '@zag-js/store@1.19.0': dependencies: proxy-compare: 3.0.1 - '@zag-js/types@1.18.3': + '@zag-js/types@1.19.0': dependencies: csstype: 3.1.3 - '@zag-js/utils@1.18.3': {} + '@zag-js/utils@1.19.0': {} '@zkochan/js-yaml@0.0.6': dependencies: @@ -21803,26 +21900,26 @@ snapshots: json-schema-traverse: 1.0.0 require-from-string: 2.0.2 - algoliasearch-helper@3.26.0(algoliasearch@5.33.0): + algoliasearch-helper@3.26.0(algoliasearch@5.34.0): dependencies: '@algolia/events': 4.0.1 - algoliasearch: 5.33.0 + algoliasearch: 5.34.0 - algoliasearch@5.33.0: + algoliasearch@5.34.0: dependencies: - '@algolia/client-abtesting': 5.33.0 - '@algolia/client-analytics': 5.33.0 - '@algolia/client-common': 5.33.0 - '@algolia/client-insights': 5.33.0 - '@algolia/client-personalization': 5.33.0 - '@algolia/client-query-suggestions': 5.33.0 - '@algolia/client-search': 5.33.0 - '@algolia/ingestion': 1.33.0 - '@algolia/monitoring': 1.33.0 - '@algolia/recommend': 5.33.0 - '@algolia/requester-browser-xhr': 5.33.0 - '@algolia/requester-fetch': 5.33.0 - '@algolia/requester-node-http': 5.33.0 + '@algolia/client-abtesting': 5.34.0 + '@algolia/client-analytics': 5.34.0 + '@algolia/client-common': 5.34.0 + '@algolia/client-insights': 5.34.0 + '@algolia/client-personalization': 5.34.0 + '@algolia/client-query-suggestions': 5.34.0 + '@algolia/client-search': 5.34.0 + '@algolia/ingestion': 1.34.0 + '@algolia/monitoring': 1.34.0 + '@algolia/recommend': 5.34.0 + '@algolia/requester-browser-xhr': 5.34.0 + '@algolia/requester-fetch': 5.34.0 + '@algolia/requester-node-http': 5.34.0 allof-merge@0.6.6: dependencies: @@ -22054,7 +22151,7 @@ snapshots: axios@1.10.0(debug@4.4.1): dependencies: follow-redirects: 1.15.9(debug@4.4.1) - form-data: 4.0.3 + form-data: 4.0.4 proxy-from-env: 1.1.0 transitivePeerDependencies: - debug @@ -22072,19 +22169,19 @@ snapshots: b4a@1.6.7: optional: true - babel-loader@9.1.3(@babel/core@7.22.9)(webpack@5.94.0(@swc/core@1.12.14)(esbuild@0.18.17)): + babel-loader@9.1.3(@babel/core@7.22.9)(webpack@5.94.0(@swc/core@1.13.1)(esbuild@0.18.17)): dependencies: '@babel/core': 7.22.9 find-cache-dir: 4.0.0 schema-utils: 4.3.2 - webpack: 5.94.0(@swc/core@1.12.14)(esbuild@0.25.6) + webpack: 5.94.0(@swc/core@1.13.1)(esbuild@0.18.17) - babel-loader@9.2.1(@babel/core@7.28.0)(webpack@5.100.2(@swc/core@1.12.14(@swc/helpers@0.5.17))(esbuild@0.25.6)): + babel-loader@9.2.1(@babel/core@7.28.0)(webpack@5.100.2(@swc/core@1.13.1(@swc/helpers@0.5.17))): dependencies: '@babel/core': 7.28.0 find-cache-dir: 4.0.0 schema-utils: 4.3.2 - webpack: 5.100.2(@swc/core@1.12.14(@swc/helpers@0.5.17))(esbuild@0.25.6) + webpack: 5.100.2(@swc/core@1.13.1(@swc/helpers@0.5.17)) babel-plugin-dynamic-import-node@2.3.3: dependencies: @@ -22276,7 +22373,7 @@ snapshots: browserslist@4.25.1: dependencies: caniuse-lite: 1.0.30001727 - electron-to-chromium: 1.5.183 + electron-to-chromium: 1.5.189 node-releases: 2.0.19 update-browserslist-db: 1.1.3(browserslist@4.25.1) @@ -22296,9 +22393,9 @@ snapshots: base64-js: 1.5.1 ieee754: 1.2.1 - bundle-require@5.1.0(esbuild@0.25.6): + bundle-require@5.1.0(esbuild@0.25.8): dependencies: - esbuild: 0.25.6 + esbuild: 0.25.8 load-tsconfig: 0.2.5 bytes@3.0.0: {} @@ -22669,13 +22766,13 @@ snapshots: dependencies: mime-db: 1.54.0 - compression@1.8.0: + compression@1.8.1: dependencies: bytes: 3.1.2 compressible: 2.0.18 debug: 2.6.9 negotiator: 0.6.4 - on-headers: 1.0.2 + on-headers: 1.1.0 safe-buffer: 5.2.1 vary: 1.1.2 transitivePeerDependencies: @@ -22766,7 +22863,7 @@ snapshots: dependencies: toggle-selection: 1.0.6 - copy-webpack-plugin@11.0.0(webpack@5.100.2(@swc/core@1.12.14(@swc/helpers@0.5.17))(esbuild@0.25.6)): + copy-webpack-plugin@11.0.0(webpack@5.100.2(@swc/core@1.13.1(@swc/helpers@0.5.17))): dependencies: fast-glob: 3.3.3 glob-parent: 6.0.2 @@ -22774,9 +22871,9 @@ snapshots: normalize-path: 3.0.0 schema-utils: 4.3.2 serialize-javascript: 6.0.2 - webpack: 5.100.2(@swc/core@1.12.14(@swc/helpers@0.5.17))(esbuild@0.25.6) + webpack: 5.100.2(@swc/core@1.13.1(@swc/helpers@0.5.17)) - copy-webpack-plugin@11.0.0(webpack@5.94.0(@swc/core@1.12.14)(esbuild@0.18.17)): + copy-webpack-plugin@11.0.0(webpack@5.94.0(@swc/core@1.13.1)(esbuild@0.18.17)): dependencies: fast-glob: 3.3.1 glob-parent: 6.0.2 @@ -22784,7 +22881,7 @@ snapshots: normalize-path: 3.0.0 schema-utils: 4.3.2 serialize-javascript: 6.0.2 - webpack: 5.94.0(@swc/core@1.12.14)(esbuild@0.25.6) + webpack: 5.94.0(@swc/core@1.13.1)(esbuild@0.18.17) core-js-compat@3.44.0: dependencies: @@ -22881,7 +22978,7 @@ snapshots: postcss-selector-parser: 7.1.0 postcss-value-parser: 4.2.0 - css-loader@6.11.0(@rspack/core@1.4.8(@swc/helpers@0.5.17))(webpack@5.100.2(@swc/core@1.12.14(@swc/helpers@0.5.17))(esbuild@0.25.6)): + css-loader@6.11.0(@rspack/core@1.4.9(@swc/helpers@0.5.17))(webpack@5.100.2(@swc/core@1.13.1(@swc/helpers@0.5.17))): dependencies: icss-utils: 5.1.0(postcss@8.5.3) postcss: 8.5.3 @@ -22892,10 +22989,10 @@ snapshots: postcss-value-parser: 4.2.0 semver: 7.7.2 optionalDependencies: - '@rspack/core': 1.4.8(@swc/helpers@0.5.17) - webpack: 5.100.2(@swc/core@1.12.14(@swc/helpers@0.5.17))(esbuild@0.25.6) + '@rspack/core': 1.4.9(@swc/helpers@0.5.17) + webpack: 5.100.2(@swc/core@1.13.1(@swc/helpers@0.5.17)) - css-loader@6.8.1(webpack@5.94.0(@swc/core@1.12.14)(esbuild@0.18.17)): + css-loader@6.8.1(webpack@5.94.0(@swc/core@1.13.1)(esbuild@0.18.17)): dependencies: icss-utils: 5.1.0(postcss@8.5.3) postcss: 8.5.3 @@ -22904,10 +23001,10 @@ snapshots: postcss-modules-scope: 3.2.1(postcss@8.5.3) postcss-modules-values: 4.0.0(postcss@8.5.3) postcss-value-parser: 4.2.0 - semver: 7.5.4 - webpack: 5.94.0(@swc/core@1.12.14)(esbuild@0.25.6) + semver: 7.7.2 + webpack: 5.94.0(@swc/core@1.13.1)(esbuild@0.18.17) - css-minimizer-webpack-plugin@5.0.1(clean-css@5.3.3)(esbuild@0.25.6)(lightningcss@1.30.1)(webpack@5.100.2(@swc/core@1.12.14(@swc/helpers@0.5.17))(esbuild@0.25.6)): + css-minimizer-webpack-plugin@5.0.1(clean-css@5.3.3)(webpack@5.100.2(@swc/core@1.13.1(@swc/helpers@0.5.17))): dependencies: '@jridgewell/trace-mapping': 0.3.29 cssnano: 6.1.2(postcss@8.5.3) @@ -22915,11 +23012,9 @@ snapshots: postcss: 8.5.3 schema-utils: 4.3.2 serialize-javascript: 6.0.2 - webpack: 5.100.2(@swc/core@1.12.14(@swc/helpers@0.5.17))(esbuild@0.25.6) + webpack: 5.100.2(@swc/core@1.13.1(@swc/helpers@0.5.17)) optionalDependencies: clean-css: 5.3.3 - esbuild: 0.25.6 - lightningcss: 1.30.1 css-prefers-color-scheme@10.0.0(postcss@8.5.6): dependencies: @@ -23129,7 +23224,7 @@ snapshots: untildify: 4.0.0 yauzl: 2.10.0 - cypress@14.5.1: + cypress@14.5.2: dependencies: '@cypress/request': 3.0.8 '@cypress/xvfb': 1.2.4(supports-color@8.1.1) @@ -23563,18 +23658,18 @@ snapshots: dependencies: esutils: 2.0.3 - docusaurus-plugin-image-zoom@3.0.1(@docusaurus/theme-classic@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17)(esbuild@0.25.6))(@rspack/core@1.4.8(@swc/helpers@0.5.17))(@swc/core@1.12.14(@swc/helpers@0.5.17))(@types/react@19.1.2)(acorn@8.15.0)(esbuild@0.25.6)(lightningcss@1.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3)): + docusaurus-plugin-image-zoom@3.0.1(@docusaurus/theme-classic@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17))(@rspack/core@1.4.9(@swc/helpers@0.5.17))(@swc/core@1.13.1(@swc/helpers@0.5.17))(@types/react@19.1.2)(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3)): dependencies: - '@docusaurus/theme-classic': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17)(esbuild@0.25.6))(@rspack/core@1.4.8(@swc/helpers@0.5.17))(@swc/core@1.12.14(@swc/helpers@0.5.17))(@types/react@19.1.2)(acorn@8.15.0)(esbuild@0.25.6)(lightningcss@1.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) + '@docusaurus/theme-classic': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17))(@rspack/core@1.4.9(@swc/helpers@0.5.17))(@swc/core@1.13.1(@swc/helpers@0.5.17))(@types/react@19.1.2)(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) medium-zoom: 1.1.0 validate-peer-dependencies: 2.2.0 - docusaurus-plugin-openapi-docs@4.4.0(@docusaurus/plugin-content-docs@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17)(esbuild@0.25.6))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.8(@swc/helpers@0.5.17))(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(lightningcss@1.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3))(@docusaurus/utils-validation@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@docusaurus/utils@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(encoding@0.1.13)(react@18.3.1): + docusaurus-plugin-openapi-docs@4.4.0(@docusaurus/plugin-content-docs@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.9(@swc/helpers@0.5.17))(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3))(@docusaurus/utils-validation@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@docusaurus/utils@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(encoding@0.1.13)(react@18.3.1): dependencies: '@apidevtools/json-schema-ref-parser': 11.9.3 - '@docusaurus/plugin-content-docs': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17)(esbuild@0.25.6))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.8(@swc/helpers@0.5.17))(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(lightningcss@1.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) - '@docusaurus/utils': 3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-validation': 3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/plugin-content-docs': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.9(@swc/helpers@0.5.17))(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) + '@docusaurus/utils': 3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-validation': 3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@redocly/openapi-core': 1.34.3 allof-merge: 0.6.6 chalk: 4.1.2 @@ -23594,20 +23689,20 @@ snapshots: - encoding - supports-color - docusaurus-plugin-sass@0.2.6(@docusaurus/core@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17)(esbuild@0.25.6))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.8(@swc/helpers@0.5.17))(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(lightningcss@1.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3))(@rspack/core@1.4.8(@swc/helpers@0.5.17))(sass@1.89.2)(webpack@5.100.2(@swc/core@1.12.14(@swc/helpers@0.5.17))(esbuild@0.25.6)): + docusaurus-plugin-sass@0.2.6(@docusaurus/core@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.9(@swc/helpers@0.5.17))(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3))(@rspack/core@1.4.9(@swc/helpers@0.5.17))(sass@1.89.2)(webpack@5.100.2(@swc/core@1.13.1(@swc/helpers@0.5.17))): dependencies: - '@docusaurus/core': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17)(esbuild@0.25.6))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.8(@swc/helpers@0.5.17))(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(lightningcss@1.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) + '@docusaurus/core': 3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.9(@swc/helpers@0.5.17))(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) sass: 1.89.2 - sass-loader: 16.0.5(@rspack/core@1.4.8(@swc/helpers@0.5.17))(sass@1.89.2)(webpack@5.100.2(@swc/core@1.12.14(@swc/helpers@0.5.17))(esbuild@0.25.6)) + sass-loader: 16.0.5(@rspack/core@1.4.9(@swc/helpers@0.5.17))(sass@1.89.2)(webpack@5.100.2(@swc/core@1.13.1(@swc/helpers@0.5.17))) transitivePeerDependencies: - '@rspack/core' - node-sass - sass-embedded - webpack - docusaurus-theme-github-codeblock@2.0.2(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + docusaurus-theme-github-codeblock@2.0.2(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@docusaurus/types': 3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/types': 3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) transitivePeerDependencies: - '@swc/core' - acorn @@ -23618,9 +23713,9 @@ snapshots: - uglify-js - webpack-cli - ? docusaurus-theme-openapi-docs@4.4.0(@docusaurus/theme-common@3.8.1(@docusaurus/plugin-content-docs@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17)(esbuild@0.25.6))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.8(@swc/helpers@0.5.17))(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(lightningcss@1.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3))(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@rspack/core@1.4.8(@swc/helpers@0.5.17))(@types/react@19.1.2)(docusaurus-plugin-openapi-docs@4.4.0(@docusaurus/plugin-content-docs@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17)(esbuild@0.25.6))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.8(@swc/helpers@0.5.17))(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(lightningcss@1.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3))(@docusaurus/utils-validation@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@docusaurus/utils@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(encoding@0.1.13)(react@18.3.1))(docusaurus-plugin-sass@0.2.6(@docusaurus/core@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17)(esbuild@0.25.6))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.8(@swc/helpers@0.5.17))(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(lightningcss@1.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3))(@rspack/core@1.4.8(@swc/helpers@0.5.17))(sass@1.89.2)(webpack@5.100.2(@swc/core@1.12.14(@swc/helpers@0.5.17))(esbuild@0.25.6)))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.100.2(@swc/core@1.12.14(@swc/helpers@0.5.17))(esbuild@0.25.6)) + ? docusaurus-theme-openapi-docs@4.4.0(@docusaurus/theme-common@3.8.1(@docusaurus/plugin-content-docs@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.9(@swc/helpers@0.5.17))(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3))(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@rspack/core@1.4.9(@swc/helpers@0.5.17))(@types/react@19.1.2)(docusaurus-plugin-openapi-docs@4.4.0(@docusaurus/plugin-content-docs@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.9(@swc/helpers@0.5.17))(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3))(@docusaurus/utils-validation@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@docusaurus/utils@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(encoding@0.1.13)(react@18.3.1))(docusaurus-plugin-sass@0.2.6(@docusaurus/core@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.9(@swc/helpers@0.5.17))(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3))(@rspack/core@1.4.9(@swc/helpers@0.5.17))(sass@1.89.2)(webpack@5.100.2(@swc/core@1.13.1(@swc/helpers@0.5.17))))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(webpack@5.100.2(@swc/core@1.13.1(@swc/helpers@0.5.17))) : dependencies: - '@docusaurus/theme-common': 3.8.1(@docusaurus/plugin-content-docs@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17)(esbuild@0.25.6))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.8(@swc/helpers@0.5.17))(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(lightningcss@1.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3))(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/theme-common': 3.8.1(@docusaurus/plugin-content-docs@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.9(@swc/helpers@0.5.17))(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3))(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@hookform/error-message': 2.0.1(react-dom@18.3.1(react@18.3.1))(react-hook-form@7.60.0(react@18.3.1))(react@18.3.1) '@reduxjs/toolkit': 1.9.7(react-redux@7.2.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) allof-merge: 0.6.6 @@ -23628,8 +23723,8 @@ snapshots: clsx: 1.2.1 copy-text-to-clipboard: 3.2.0 crypto-js: 4.2.0 - docusaurus-plugin-openapi-docs: 4.4.0(@docusaurus/plugin-content-docs@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17)(esbuild@0.25.6))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.8(@swc/helpers@0.5.17))(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(lightningcss@1.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3))(@docusaurus/utils-validation@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@docusaurus/utils@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(encoding@0.1.13)(react@18.3.1) - docusaurus-plugin-sass: 0.2.6(@docusaurus/core@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17)(esbuild@0.25.6))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.8(@swc/helpers@0.5.17))(@swc/core@1.12.14(@swc/helpers@0.5.17))(acorn@8.15.0)(esbuild@0.25.6)(lightningcss@1.30.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3))(@rspack/core@1.4.8(@swc/helpers@0.5.17))(sass@1.89.2)(webpack@5.100.2(@swc/core@1.12.14(@swc/helpers@0.5.17))(esbuild@0.25.6)) + docusaurus-plugin-openapi-docs: 4.4.0(@docusaurus/plugin-content-docs@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.9(@swc/helpers@0.5.17))(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3))(@docusaurus/utils-validation@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@docusaurus/utils@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(encoding@0.1.13)(react@18.3.1) + docusaurus-plugin-sass: 0.2.6(@docusaurus/core@3.8.1(@docusaurus/faster@3.8.1(@docusaurus/types@3.8.1(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@swc/helpers@0.5.17))(@mdx-js/react@3.1.0(@types/react@19.1.2)(react@18.3.1))(@rspack/core@1.4.9(@swc/helpers@0.5.17))(@swc/core@1.13.1(@swc/helpers@0.5.17))(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3))(@rspack/core@1.4.9(@swc/helpers@0.5.17))(sass@1.89.2)(webpack@5.100.2(@swc/core@1.13.1(@swc/helpers@0.5.17))) file-saver: 2.0.5 lodash: 4.17.21 pako: 2.1.0 @@ -23648,7 +23743,7 @@ snapshots: rehype-raw: 6.1.1 remark-gfm: 3.0.1 sass: 1.89.2 - sass-loader: 16.0.5(@rspack/core@1.4.8(@swc/helpers@0.5.17))(sass@1.89.2)(webpack@5.100.2(@swc/core@1.12.14(@swc/helpers@0.5.17))(esbuild@0.25.6)) + sass-loader: 16.0.5(@rspack/core@1.4.9(@swc/helpers@0.5.17))(sass@1.89.2)(webpack@5.100.2(@swc/core@1.13.1(@swc/helpers@0.5.17))) unist-util-visit: 5.0.0 url: 0.11.4 xml-formatter: 2.6.1 @@ -23769,7 +23864,7 @@ snapshots: dependencies: jake: 10.9.2 - electron-to-chromium@1.5.183: {} + electron-to-chromium@1.5.189: {} emoji-regex@10.4.0: {} @@ -23803,7 +23898,7 @@ snapshots: engine.io@6.6.4: dependencies: '@types/cors': 2.8.19 - '@types/node': 22.16.4 + '@types/node': 22.16.5 accepts: 1.3.8 base64id: 2.0.0 cookie: 0.7.2 @@ -24035,34 +24130,34 @@ snapshots: '@esbuild/win32-ia32': 0.21.5 '@esbuild/win32-x64': 0.21.5 - esbuild@0.25.6: + esbuild@0.25.8: optionalDependencies: - '@esbuild/aix-ppc64': 0.25.6 - '@esbuild/android-arm': 0.25.6 - '@esbuild/android-arm64': 0.25.6 - '@esbuild/android-x64': 0.25.6 - '@esbuild/darwin-arm64': 0.25.6 - '@esbuild/darwin-x64': 0.25.6 - '@esbuild/freebsd-arm64': 0.25.6 - '@esbuild/freebsd-x64': 0.25.6 - '@esbuild/linux-arm': 0.25.6 - '@esbuild/linux-arm64': 0.25.6 - '@esbuild/linux-ia32': 0.25.6 - '@esbuild/linux-loong64': 0.25.6 - '@esbuild/linux-mips64el': 0.25.6 - '@esbuild/linux-ppc64': 0.25.6 - '@esbuild/linux-riscv64': 0.25.6 - '@esbuild/linux-s390x': 0.25.6 - '@esbuild/linux-x64': 0.25.6 - '@esbuild/netbsd-arm64': 0.25.6 - '@esbuild/netbsd-x64': 0.25.6 - '@esbuild/openbsd-arm64': 0.25.6 - '@esbuild/openbsd-x64': 0.25.6 - '@esbuild/openharmony-arm64': 0.25.6 - '@esbuild/sunos-x64': 0.25.6 - '@esbuild/win32-arm64': 0.25.6 - '@esbuild/win32-ia32': 0.25.6 - '@esbuild/win32-x64': 0.25.6 + '@esbuild/aix-ppc64': 0.25.8 + '@esbuild/android-arm': 0.25.8 + '@esbuild/android-arm64': 0.25.8 + '@esbuild/android-x64': 0.25.8 + '@esbuild/darwin-arm64': 0.25.8 + '@esbuild/darwin-x64': 0.25.8 + '@esbuild/freebsd-arm64': 0.25.8 + '@esbuild/freebsd-x64': 0.25.8 + '@esbuild/linux-arm': 0.25.8 + '@esbuild/linux-arm64': 0.25.8 + '@esbuild/linux-ia32': 0.25.8 + '@esbuild/linux-loong64': 0.25.8 + '@esbuild/linux-mips64el': 0.25.8 + '@esbuild/linux-ppc64': 0.25.8 + '@esbuild/linux-riscv64': 0.25.8 + '@esbuild/linux-s390x': 0.25.8 + '@esbuild/linux-x64': 0.25.8 + '@esbuild/netbsd-arm64': 0.25.8 + '@esbuild/netbsd-x64': 0.25.8 + '@esbuild/openbsd-arm64': 0.25.8 + '@esbuild/openbsd-x64': 0.25.8 + '@esbuild/openharmony-arm64': 0.25.8 + '@esbuild/sunos-x64': 0.25.8 + '@esbuild/win32-arm64': 0.25.8 + '@esbuild/win32-ia32': 0.25.8 + '@esbuild/win32-x64': 0.25.8 escalade@3.2.0: {} @@ -24088,12 +24183,12 @@ snapshots: dependencies: '@next/eslint-plugin-next': 15.4.0-canary.86 '@rushstack/eslint-patch': 1.12.0 - '@typescript-eslint/eslint-plugin': 7.18.0(@typescript-eslint/parser@8.37.0(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1)(typescript@5.8.3) - '@typescript-eslint/parser': 8.37.0(eslint@8.57.1)(typescript@5.8.3) + '@typescript-eslint/eslint-plugin': 8.38.0(@typescript-eslint/parser@8.38.0(eslint@8.57.1)(typescript@5.8.3))(eslint@8.57.1)(typescript@5.8.3) + '@typescript-eslint/parser': 8.38.0(eslint@8.57.1)(typescript@5.8.3) eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@8.57.1) - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.37.0(eslint@8.57.1)(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.1) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.38.0(eslint@8.57.1)(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.1) eslint-plugin-jsx-a11y: 6.10.2(eslint@8.57.1) eslint-plugin-react: 7.37.5(eslint@8.57.1) eslint-plugin-react-hooks: 5.2.0(eslint@8.57.1) @@ -24104,7 +24199,7 @@ snapshots: - eslint-plugin-import-x - supports-color - eslint-config-prettier@9.1.0(eslint@8.57.1): + eslint-config-prettier@9.1.2(eslint@8.57.1): dependencies: eslint: 8.57.1 @@ -24127,22 +24222,22 @@ snapshots: tinyglobby: 0.2.14 unrs-resolver: 1.11.1 optionalDependencies: - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.37.0(eslint@8.57.1)(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.1) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.38.0(eslint@8.57.1)(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.1) transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.1(@typescript-eslint/parser@8.37.0(eslint@8.57.1)(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0)(eslint@8.57.1))(eslint@8.57.1): + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.38.0(eslint@8.57.1)(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0)(eslint@8.57.1))(eslint@8.57.1): dependencies: debug: 3.2.7(supports-color@8.1.1) optionalDependencies: - '@typescript-eslint/parser': 8.37.0(eslint@8.57.1)(typescript@5.8.3) + '@typescript-eslint/parser': 8.38.0(eslint@8.57.1)(typescript@5.8.3) eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@8.57.1) transitivePeerDependencies: - supports-color - eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.37.0(eslint@8.57.1)(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.1): + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.38.0(eslint@8.57.1)(typescript@5.8.3))(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.1): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.9 @@ -24153,7 +24248,7 @@ snapshots: doctrine: 2.1.0 eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.37.0(eslint@8.57.1)(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0)(eslint@8.57.1))(eslint@8.57.1) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.38.0(eslint@8.57.1)(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0)(eslint@8.57.1))(eslint@8.57.1) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -24165,7 +24260,7 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 8.37.0(eslint@8.57.1)(typescript@5.8.3) + '@typescript-eslint/parser': 8.38.0(eslint@8.57.1)(typescript@5.8.3) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -24280,54 +24375,6 @@ snapshots: transitivePeerDependencies: - supports-color - eslint@9.30.1(jiti@1.21.7): - dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.30.1(jiti@1.21.7)) - '@eslint-community/regexpp': 4.12.1 - '@eslint/config-array': 0.21.0 - '@eslint/config-helpers': 0.3.0 - '@eslint/core': 0.14.0 - '@eslint/eslintrc': 3.3.1 - '@eslint/js': 9.30.1 - '@eslint/plugin-kit': 0.3.3 - '@humanfs/node': 0.16.6 - '@humanwhocodes/module-importer': 1.0.1 - '@humanwhocodes/retry': 0.4.3 - '@types/estree': 1.0.8 - '@types/json-schema': 7.0.15 - ajv: 6.12.6 - chalk: 4.1.2 - cross-spawn: 7.0.6 - debug: 4.4.1(supports-color@5.5.0) - escape-string-regexp: 4.0.0 - eslint-scope: 8.4.0 - eslint-visitor-keys: 4.2.1 - espree: 10.4.0 - esquery: 1.6.0 - esutils: 2.0.3 - fast-deep-equal: 3.1.3 - file-entry-cache: 8.0.0 - find-up: 5.0.0 - glob-parent: 6.0.2 - ignore: 5.3.2 - imurmurhash: 0.1.4 - is-glob: 4.0.3 - 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.4 - optionalDependencies: - jiti: 1.21.7 - transitivePeerDependencies: - - supports-color - - espree@10.4.0: - dependencies: - acorn: 8.15.0 - acorn-jsx: 5.3.2(acorn@8.15.0) - eslint-visitor-keys: 4.2.1 - espree@9.6.1: dependencies: acorn: 8.15.0 @@ -24414,7 +24461,7 @@ snapshots: eval@0.1.8: dependencies: - '@types/node': 22.16.4 + '@types/node': 22.16.5 require-like: 0.1.2 event-stream@3.3.4: @@ -24609,13 +24656,17 @@ snapshots: dependencies: websocket-driver: 0.7.4 + fd-package-json@2.0.0: + dependencies: + walk-up-path: 4.0.0 + fd-slicer@1.1.0: dependencies: pend: 1.2.0 - fdir@6.4.6(picomatch@4.0.2): + fdir@6.4.6(picomatch@4.0.3): optionalDependencies: - picomatch: 4.0.2 + picomatch: 4.0.3 feed@4.2.2: dependencies: @@ -24638,15 +24689,11 @@ snapshots: dependencies: flat-cache: 3.2.0 - file-entry-cache@8.0.0: - dependencies: - flat-cache: 4.0.1 - - file-loader@6.2.0(webpack@5.100.2(@swc/core@1.12.14(@swc/helpers@0.5.17))(esbuild@0.25.6)): + file-loader@6.2.0(webpack@5.100.2(@swc/core@1.13.1(@swc/helpers@0.5.17))): dependencies: loader-utils: 2.0.4 schema-utils: 3.3.0 - webpack: 5.100.2(@swc/core@1.12.14(@swc/helpers@0.5.17))(esbuild@0.25.6) + webpack: 5.100.2(@swc/core@1.13.1(@swc/helpers@0.5.17)) file-saver@2.0.5: {} @@ -24720,11 +24767,6 @@ snapshots: keyv: 4.5.4 rimraf: 3.0.2 - flat-cache@4.0.1: - dependencies: - flatted: 3.3.3 - keyv: 4.5.4 - flat@5.0.2: {} flatted@3.3.3: {} @@ -24750,14 +24792,15 @@ snapshots: form-data-encoder@2.1.4: {} - form-data@3.0.3: + form-data@3.0.4: dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 es-set-tostringtag: 2.1.0 + hasown: 2.0.2 mime-types: 2.1.35 - form-data@4.0.3: + form-data@4.0.4: dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 @@ -24767,6 +24810,10 @@ snapshots: format@0.2.2: {} + formatly@0.2.4: + dependencies: + fd-package-json: 2.0.0 + formdata-node@4.4.1: dependencies: node-domexception: 1.0.0 @@ -24825,7 +24872,7 @@ snapshots: dependencies: minipass: 7.1.2 - fs-monkey@1.0.6: {} + fs-monkey@1.1.0: {} fs.realpath@1.0.0: {} @@ -24972,7 +25019,7 @@ snapshots: fs.realpath: 1.0.0 inflight: 1.0.6 inherits: 2.0.4 - minimatch: 3.0.5 + minimatch: 3.1.2 once: 1.4.0 path-is-absolute: 1.0.1 @@ -25001,8 +25048,6 @@ snapshots: dependencies: type-fest: 0.20.2 - globals@14.0.0: {} - globals@15.15.0: {} globalthis@1.0.4: @@ -25475,7 +25520,7 @@ snapshots: html-void-elements@3.0.0: {} - html-webpack-plugin@5.6.3(@rspack/core@1.4.8(@swc/helpers@0.5.17))(webpack@5.100.2(@swc/core@1.12.14(@swc/helpers@0.5.17))(esbuild@0.25.6)): + html-webpack-plugin@5.6.3(@rspack/core@1.4.9(@swc/helpers@0.5.17))(webpack@5.100.2(@swc/core@1.13.1(@swc/helpers@0.5.17))): dependencies: '@types/html-minifier-terser': 6.1.0 html-minifier-terser: 6.1.0 @@ -25483,10 +25528,10 @@ snapshots: pretty-error: 4.0.0 tapable: 2.2.2 optionalDependencies: - '@rspack/core': 1.4.8(@swc/helpers@0.5.17) - webpack: 5.100.2(@swc/core@1.12.14(@swc/helpers@0.5.17))(esbuild@0.25.6) + '@rspack/core': 1.4.9(@swc/helpers@0.5.17) + webpack: 5.100.2(@swc/core@1.13.1(@swc/helpers@0.5.17)) - html-webpack-plugin@5.6.3(webpack@5.94.0(@swc/core@1.12.14)(esbuild@0.18.17)): + html-webpack-plugin@5.6.3(webpack@5.94.0(@swc/core@1.13.1)(esbuild@0.18.17)): dependencies: '@types/html-minifier-terser': 6.1.0 html-minifier-terser: 6.1.0 @@ -25494,7 +25539,7 @@ snapshots: pretty-error: 4.0.0 tapable: 2.2.2 optionalDependencies: - webpack: 5.94.0(@swc/core@1.12.14)(esbuild@0.25.6) + webpack: 5.94.0(@swc/core@1.13.1)(esbuild@0.18.17) optional: true htmlparser2@6.1.0: @@ -26037,7 +26082,7 @@ snapshots: jest-util@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 22.16.4 + '@types/node': 22.16.5 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -26045,19 +26090,21 @@ snapshots: jest-worker@27.5.1: dependencies: - '@types/node': 22.16.4 + '@types/node': 22.16.5 merge-stream: 2.0.0 supports-color: 8.1.1 jest-worker@29.7.0: dependencies: - '@types/node': 22.16.4 + '@types/node': 22.16.5 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 jiti@1.21.7: {} + jiti@2.4.2: {} + joi@17.13.3: dependencies: '@hapi/hoek': 9.3.0 @@ -26074,8 +26121,6 @@ snapshots: js-tokens@4.0.0: {} - js-tokens@9.0.1: {} - js-yaml@3.14.1: dependencies: argparse: 1.0.10 @@ -26100,7 +26145,7 @@ snapshots: decimal.js: 10.6.0 domexception: 2.0.1 escodegen: 2.1.0 - form-data: 3.0.3 + form-data: 3.0.4 html-encoding-sniffer: 2.0.1 http-proxy-agent: 4.0.1 https-proxy-agent: 5.0.1 @@ -26336,6 +26381,24 @@ snapshots: klona@2.0.6: {} + knip@5.62.0(@types/node@24.1.0)(typescript@5.8.3): + dependencies: + '@nodelib/fs.walk': 1.2.8 + '@types/node': 24.1.0 + fast-glob: 3.3.3 + formatly: 0.2.4 + jiti: 2.4.2 + js-yaml: 4.1.0 + minimist: 1.2.8 + oxc-resolver: 11.6.0 + picocolors: 1.1.1 + picomatch: 4.0.3 + smol-toml: 1.4.1 + strip-json-comments: 5.0.2 + typescript: 5.8.3 + zod: 3.25.76 + zod-validation-error: 3.5.3(zod@3.25.76) + kolorist@1.8.0: {} langium@3.3.1: @@ -26367,11 +26430,11 @@ snapshots: lazy-ass@1.6.0: {} - less-loader@11.1.0(less@4.1.3)(webpack@5.94.0(@swc/core@1.12.14)(esbuild@0.18.17)): + less-loader@11.1.0(less@4.1.3)(webpack@5.94.0(@swc/core@1.13.1)(esbuild@0.18.17)): dependencies: klona: 2.0.6 less: 4.1.3 - webpack: 5.94.0(@swc/core@1.12.14)(esbuild@0.25.6) + webpack: 5.94.0(@swc/core@1.13.1)(esbuild@0.18.17) less@4.1.3: dependencies: @@ -26396,11 +26459,11 @@ snapshots: libphonenumber-js@1.12.10: {} - license-webpack-plugin@4.0.2(webpack@5.94.0(@swc/core@1.12.14)(esbuild@0.18.17)): + license-webpack-plugin@4.0.2(webpack@5.94.0(@swc/core@1.13.1)(esbuild@0.18.17)): dependencies: webpack-sources: 3.3.3 optionalDependencies: - webpack: 5.94.0(@swc/core@1.12.14)(esbuild@0.25.6) + webpack: 5.94.0(@swc/core@1.13.1)(esbuild@0.18.17) lightningcss-darwin-arm64@1.30.1: optional: true @@ -26714,6 +26777,8 @@ snapshots: marked@15.0.12: {} + marked@16.1.1: {} + material-colors@1.2.6: {} material-design-icons-iconfont@6.7.0: {} @@ -27068,9 +27133,9 @@ snapshots: mdn-data@2.0.30: {} - mdx-mermaid@2.0.3(mermaid@11.8.1)(react@18.3.1)(typescript@5.8.3)(unist-util-visit@5.0.0): + mdx-mermaid@2.0.3(mermaid@11.9.0)(react@18.3.1)(typescript@5.8.3)(unist-util-visit@5.0.0): dependencies: - mermaid: 11.8.1 + mermaid: 11.9.0 react: 18.3.1 unist-util-visit: 5.0.0 optionalDependencies: @@ -27095,7 +27160,7 @@ snapshots: memfs@3.5.3: dependencies: - fs-monkey: 1.0.6 + fs-monkey: 1.1.0 memoize-one@5.2.1: {} @@ -27111,11 +27176,11 @@ snapshots: merge2@1.4.1: {} - mermaid@11.8.1: + mermaid@11.9.0: dependencies: '@braintree/sanitize-url': 7.1.1 '@iconify/utils': 2.3.0 - '@mermaid-js/parser': 0.6.1 + '@mermaid-js/parser': 0.6.2 '@types/d3': 7.4.3 cytoscape: 3.32.1 cytoscape-cose-bilkent: 4.1.0(cytoscape@3.32.1) @@ -27128,7 +27193,7 @@ snapshots: katex: 0.16.22 khroma: 2.1.0 lodash-es: 4.17.21 - marked: 15.0.12 + marked: 16.1.1 roughjs: 4.6.6 stylis: 4.3.6 ts-dedent: 2.2.0 @@ -27729,16 +27794,16 @@ snapshots: min-indent@1.0.1: {} - mini-css-extract-plugin@2.7.6(webpack@5.94.0(@swc/core@1.12.14)(esbuild@0.18.17)): + mini-css-extract-plugin@2.7.6(webpack@5.94.0(@swc/core@1.13.1)(esbuild@0.18.17)): dependencies: schema-utils: 4.3.2 - webpack: 5.94.0(@swc/core@1.12.14)(esbuild@0.25.6) + webpack: 5.94.0(@swc/core@1.13.1)(esbuild@0.18.17) - mini-css-extract-plugin@2.9.2(webpack@5.100.2(@swc/core@1.12.14(@swc/helpers@0.5.17))(esbuild@0.25.6)): + mini-css-extract-plugin@2.9.2(webpack@5.100.2(@swc/core@1.13.1(@swc/helpers@0.5.17))): dependencies: schema-utils: 4.3.2 tapable: 2.2.2 - webpack: 5.100.2(@swc/core@1.12.14(@swc/helpers@0.5.17))(esbuild@0.25.6) + webpack: 5.100.2(@swc/core@1.13.1(@swc/helpers@0.5.17)) mini-svg-data-uri@1.4.4: {} @@ -27909,7 +27974,7 @@ snapshots: nanoid@3.3.11: {} - napi-postinstall@0.3.0: {} + napi-postinstall@0.3.2: {} natural-compare-lite@1.4.0: {} @@ -28046,7 +28111,7 @@ snapshots: nopt: 6.0.0 npmlog: 6.0.2 rimraf: 3.0.2 - semver: 7.5.4 + semver: 7.7.2 tar: 6.2.1 which: 2.0.2 transitivePeerDependencies: @@ -28091,7 +28156,7 @@ snapshots: dependencies: hosted-git-info: 6.1.3 is-core-module: 2.16.1 - semver: 7.5.4 + semver: 7.7.2 validate-npm-package-license: 3.0.4 normalize-path@3.0.0: {} @@ -28106,7 +28171,7 @@ snapshots: npm-install-checks@6.3.0: dependencies: - semver: 7.5.4 + semver: 7.7.2 npm-normalize-package-bin@3.0.1: {} @@ -28114,7 +28179,7 @@ snapshots: dependencies: hosted-git-info: 6.1.3 proc-log: 3.0.0 - semver: 7.5.4 + semver: 7.7.2 validate-npm-package-name: 5.0.1 npm-packlist@7.0.4: @@ -28126,7 +28191,7 @@ snapshots: npm-install-checks: 6.3.0 npm-normalize-package-bin: 3.0.1 npm-package-arg: 10.1.0 - semver: 7.5.4 + semver: 7.7.2 npm-registry-fetch@14.0.5: dependencies: @@ -28168,17 +28233,17 @@ snapshots: dependencies: boolbase: 1.0.0 - null-loader@4.0.1(webpack@5.100.2(@swc/core@1.12.14(@swc/helpers@0.5.17))(esbuild@0.25.6)): + null-loader@4.0.1(webpack@5.100.2(@swc/core@1.13.1(@swc/helpers@0.5.17))): dependencies: loader-utils: 2.0.4 schema-utils: 3.3.0 - webpack: 5.100.2(@swc/core@1.12.14(@swc/helpers@0.5.17))(esbuild@0.25.6) + webpack: 5.100.2(@swc/core@1.13.1(@swc/helpers@0.5.17)) nwsapi@2.2.20: {} - nx@16.5.1(@swc/core@1.12.14): + nx@16.5.1(@swc/core@1.13.1): dependencies: - '@nrwl/tao': 16.5.1(@swc/core@1.12.14) + '@nrwl/tao': 16.5.1(@swc/core@1.13.1) '@parcel/watcher': 2.0.4 '@yarnpkg/lockfile': 1.1.0 '@yarnpkg/parsers': 3.0.0-rc.46 @@ -28223,7 +28288,7 @@ snapshots: '@nx/nx-linux-x64-musl': 16.5.1 '@nx/nx-win32-arm64-msvc': 16.5.1 '@nx/nx-win32-x64-msvc': 16.5.1 - '@swc/core': 1.12.14(@swc/helpers@0.5.17) + '@swc/core': 1.13.1(@swc/helpers@0.5.17) transitivePeerDependencies: - debug @@ -28323,7 +28388,7 @@ snapshots: dependencies: ee-first: 1.1.1 - on-headers@1.0.2: {} + on-headers@1.1.0: {} once@1.4.0: dependencies: @@ -28347,9 +28412,9 @@ snapshots: is-docker: 2.2.1 is-wsl: 2.2.0 - openai@4.78.1(encoding@0.1.13)(zod@3.23.8): + openai@4.78.1(encoding@0.1.13)(zod@3.25.76): dependencies: - '@types/node': 18.19.119 + '@types/node': 18.19.120 '@types/node-fetch': 2.6.12 abort-controller: 3.0.0 agentkeepalive: 4.6.0 @@ -28357,7 +28422,7 @@ snapshots: formdata-node: 4.4.1 node-fetch: 2.7.0(encoding@0.1.13) optionalDependencies: - zod: 3.23.8 + zod: 3.25.76 transitivePeerDependencies: - encoding @@ -28423,6 +28488,30 @@ snapshots: object-keys: 1.1.1 safe-push-apply: 1.0.0 + oxc-resolver@11.6.0: + dependencies: + napi-postinstall: 0.3.2 + optionalDependencies: + '@oxc-resolver/binding-android-arm-eabi': 11.6.0 + '@oxc-resolver/binding-android-arm64': 11.6.0 + '@oxc-resolver/binding-darwin-arm64': 11.6.0 + '@oxc-resolver/binding-darwin-x64': 11.6.0 + '@oxc-resolver/binding-freebsd-x64': 11.6.0 + '@oxc-resolver/binding-linux-arm-gnueabihf': 11.6.0 + '@oxc-resolver/binding-linux-arm-musleabihf': 11.6.0 + '@oxc-resolver/binding-linux-arm64-gnu': 11.6.0 + '@oxc-resolver/binding-linux-arm64-musl': 11.6.0 + '@oxc-resolver/binding-linux-ppc64-gnu': 11.6.0 + '@oxc-resolver/binding-linux-riscv64-gnu': 11.6.0 + '@oxc-resolver/binding-linux-riscv64-musl': 11.6.0 + '@oxc-resolver/binding-linux-s390x-gnu': 11.6.0 + '@oxc-resolver/binding-linux-x64-gnu': 11.6.0 + '@oxc-resolver/binding-linux-x64-musl': 11.6.0 + '@oxc-resolver/binding-wasm32-wasi': 11.6.0 + '@oxc-resolver/binding-win32-arm64-msvc': 11.6.0 + '@oxc-resolver/binding-win32-ia32-msvc': 11.6.0 + '@oxc-resolver/binding-win32-x64-msvc': 11.6.0 + p-cancelable@3.0.0: {} p-filter@2.1.0: @@ -28701,7 +28790,7 @@ snapshots: picomatch@2.3.1: {} - picomatch@4.0.2: {} + picomatch@4.0.3: {} pidtree@0.6.0: {} @@ -28953,31 +29042,31 @@ snapshots: optionalDependencies: postcss: 8.5.3 - postcss-load-config@6.0.1(jiti@1.21.7)(postcss@8.5.6)(yaml@2.8.0): + postcss-load-config@6.0.1(jiti@2.4.2)(postcss@8.5.6)(yaml@2.8.0): dependencies: lilconfig: 3.1.3 optionalDependencies: - jiti: 1.21.7 + jiti: 2.4.2 postcss: 8.5.6 yaml: 2.8.0 - postcss-loader@7.3.3(postcss@8.4.31)(typescript@5.1.6)(webpack@5.94.0(@swc/core@1.12.14)(esbuild@0.18.17)): + postcss-loader@7.3.3(postcss@8.4.31)(typescript@5.1.6)(webpack@5.94.0(@swc/core@1.13.1)(esbuild@0.18.17)): dependencies: cosmiconfig: 8.3.6(typescript@5.1.6) jiti: 1.21.7 postcss: 8.4.31 - semver: 7.5.4 - webpack: 5.94.0(@swc/core@1.12.14)(esbuild@0.25.6) + semver: 7.7.2 + webpack: 5.94.0(@swc/core@1.13.1)(esbuild@0.18.17) transitivePeerDependencies: - typescript - postcss-loader@7.3.4(postcss@8.5.6)(typescript@5.8.3)(webpack@5.100.2(@swc/core@1.12.14(@swc/helpers@0.5.17))(esbuild@0.25.6)): + postcss-loader@7.3.4(postcss@8.5.6)(typescript@5.8.3)(webpack@5.100.2(@swc/core@1.13.1(@swc/helpers@0.5.17))): dependencies: cosmiconfig: 8.3.6(typescript@5.8.3) jiti: 1.21.7 postcss: 8.5.6 semver: 7.7.2 - webpack: 5.100.2(@swc/core@1.12.14(@swc/helpers@0.5.17))(esbuild@0.25.6) + webpack: 5.100.2(@swc/core@1.13.1(@swc/helpers@0.5.17)) transitivePeerDependencies: - typescript @@ -29401,7 +29490,7 @@ snapshots: dependencies: xtend: 4.0.2 - posthog-js@1.257.0: + posthog-js@1.257.1: dependencies: core-js: 3.44.0 fflate: 0.4.8 @@ -29444,16 +29533,11 @@ snapshots: prettier: 3.6.2 typescript: 5.8.3 - prettier-plugin-organize-imports@4.1.0(prettier@3.6.2)(typescript@5.1.6): + prettier-plugin-organize-imports@4.2.0(prettier@3.6.2)(typescript@5.1.6): dependencies: prettier: 3.6.2 typescript: 5.1.6 - prettier-plugin-organize-imports@4.1.0(prettier@3.6.2)(typescript@5.8.3): - dependencies: - prettier: 3.6.2 - typescript: 5.8.3 - prettier-plugin-tailwindcss@0.6.11(prettier-plugin-organize-imports@3.2.4(prettier@3.6.2)(typescript@5.8.3))(prettier@3.6.2): dependencies: prettier: 3.6.2 @@ -29532,7 +29616,7 @@ snapshots: '@protobufjs/path': 1.1.2 '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.0 - '@types/node': 22.16.4 + '@types/node': 22.16.5 long: 5.3.2 proxy-addr@2.0.7: @@ -29658,11 +29742,11 @@ snapshots: iconv-lite: 0.4.24 unpipe: 1.0.0 - raw-loader@4.0.2(webpack@5.100.2(@swc/core@1.12.14(@swc/helpers@0.5.17))(esbuild@0.25.6)): + raw-loader@4.0.2(webpack@5.100.2(@swc/core@1.13.1(@swc/helpers@0.5.17))): dependencies: loader-utils: 2.0.4 schema-utils: 3.3.0 - webpack: 5.100.2(@swc/core@1.12.14(@swc/helpers@0.5.17))(esbuild@0.25.6) + webpack: 5.100.2(@swc/core@1.13.1(@swc/helpers@0.5.17)) rc@1.2.8: dependencies: @@ -29732,11 +29816,11 @@ snapshots: sucrase: 3.35.0 use-editable: 2.3.3(react@18.3.1) - react-loadable-ssr-addon-v5-slorber@1.0.1(@docusaurus/react-loadable@6.0.0(react@18.3.1))(webpack@5.100.2(@swc/core@1.12.14(@swc/helpers@0.5.17))(esbuild@0.25.6)): + react-loadable-ssr-addon-v5-slorber@1.0.1(@docusaurus/react-loadable@6.0.0(react@18.3.1))(webpack@5.100.2(@swc/core@1.13.1(@swc/helpers@0.5.17))): dependencies: '@babel/runtime': 7.27.6 react-loadable: '@docusaurus/react-loadable@6.0.0(react@18.3.1)' - webpack: 5.100.2(@swc/core@1.12.14(@swc/helpers@0.5.17))(esbuild@0.25.6) + webpack: 5.100.2(@swc/core@1.13.1(@swc/helpers@0.5.17)) react-magic-dropzone@1.0.1: {} @@ -30377,20 +30461,20 @@ snapshots: safevalues@0.3.4: {} - sass-loader@13.3.2(sass@1.64.1)(webpack@5.94.0(@swc/core@1.12.14)(esbuild@0.18.17)): + sass-loader@13.3.2(sass@1.64.1)(webpack@5.94.0(@swc/core@1.13.1)(esbuild@0.18.17)): dependencies: neo-async: 2.6.2 - webpack: 5.94.0(@swc/core@1.12.14)(esbuild@0.25.6) + webpack: 5.94.0(@swc/core@1.13.1)(esbuild@0.18.17) optionalDependencies: sass: 1.64.1 - sass-loader@16.0.5(@rspack/core@1.4.8(@swc/helpers@0.5.17))(sass@1.89.2)(webpack@5.100.2(@swc/core@1.12.14(@swc/helpers@0.5.17))(esbuild@0.25.6)): + sass-loader@16.0.5(@rspack/core@1.4.9(@swc/helpers@0.5.17))(sass@1.89.2)(webpack@5.100.2(@swc/core@1.13.1(@swc/helpers@0.5.17))): dependencies: neo-async: 2.6.2 optionalDependencies: - '@rspack/core': 1.4.8(@swc/helpers@0.5.17) + '@rspack/core': 1.4.9(@swc/helpers@0.5.17) sass: 1.89.2 - webpack: 5.100.2(@swc/core@1.12.14(@swc/helpers@0.5.17))(esbuild@0.25.6) + webpack: 5.100.2(@swc/core@1.13.1(@swc/helpers@0.5.17)) sass@1.64.1: dependencies: @@ -30730,6 +30814,8 @@ snapshots: smart-buffer@4.2.0: {} + smol-toml@1.4.1: {} + snake-case@3.0.4: dependencies: dot-case: 3.0.4 @@ -30797,12 +30883,12 @@ snapshots: source-map-js@1.2.1: {} - source-map-loader@4.0.1(webpack@5.94.0(@swc/core@1.12.14)(esbuild@0.18.17)): + source-map-loader@4.0.1(webpack@5.94.0(@swc/core@1.13.1)(esbuild@0.18.17)): dependencies: abab: 2.0.6 iconv-lite: 0.6.3 source-map-js: 1.2.1 - webpack: 5.94.0(@swc/core@1.12.14)(esbuild@0.25.6) + webpack: 5.94.0(@swc/core@1.13.1)(esbuild@0.18.17) source-map-support@0.5.21: dependencies: @@ -31054,9 +31140,7 @@ snapshots: strip-json-comments@3.1.1: {} - strip-literal@3.0.0: - dependencies: - js-tokens: 9.0.1 + strip-json-comments@5.0.2: {} strong-log-transformer@2.1.0: dependencies: @@ -31149,11 +31233,11 @@ snapshots: transitivePeerDependencies: - encoding - swc-loader@0.2.6(@swc/core@1.12.14(@swc/helpers@0.5.17))(webpack@5.100.2(@swc/core@1.12.14(@swc/helpers@0.5.17))(esbuild@0.25.6)): + swc-loader@0.2.6(@swc/core@1.13.1(@swc/helpers@0.5.17))(webpack@5.100.2(@swc/core@1.13.1(@swc/helpers@0.5.17))): dependencies: - '@swc/core': 1.12.14(@swc/helpers@0.5.17) + '@swc/core': 1.13.1(@swc/helpers@0.5.17) '@swc/counter': 0.1.3 - webpack: 5.100.2(@swc/core@1.12.14(@swc/helpers@0.5.17))(esbuild@0.25.6) + webpack: 5.100.2(@swc/core@1.13.1(@swc/helpers@0.5.17)) symbol-observable@4.0.0: {} @@ -31235,29 +31319,28 @@ snapshots: term-size@2.2.1: {} - terser-webpack-plugin@5.3.14(@swc/core@1.12.14(@swc/helpers@0.5.17))(esbuild@0.25.6)(webpack@5.100.2(@swc/core@1.12.14(@swc/helpers@0.5.17))(esbuild@0.25.6)): + terser-webpack-plugin@5.3.14(@swc/core@1.13.1(@swc/helpers@0.5.17))(webpack@5.100.2(@swc/core@1.13.1(@swc/helpers@0.5.17))): dependencies: '@jridgewell/trace-mapping': 0.3.29 jest-worker: 27.5.1 schema-utils: 4.3.2 serialize-javascript: 6.0.2 terser: 5.43.1 - webpack: 5.100.2(@swc/core@1.12.14(@swc/helpers@0.5.17))(esbuild@0.25.6) + webpack: 5.100.2(@swc/core@1.13.1(@swc/helpers@0.5.17)) optionalDependencies: - '@swc/core': 1.12.14(@swc/helpers@0.5.17) - esbuild: 0.25.6 + '@swc/core': 1.13.1(@swc/helpers@0.5.17) - terser-webpack-plugin@5.3.14(@swc/core@1.12.14)(esbuild@0.25.6)(webpack@5.94.0(@swc/core@1.12.14)(esbuild@0.18.17)): + terser-webpack-plugin@5.3.14(@swc/core@1.13.1)(esbuild@0.18.17)(webpack@5.94.0(@swc/core@1.13.1)(esbuild@0.18.17)): dependencies: '@jridgewell/trace-mapping': 0.3.29 jest-worker: 27.5.1 schema-utils: 4.3.2 serialize-javascript: 6.0.2 terser: 5.43.1 - webpack: 5.94.0(@swc/core@1.12.14)(esbuild@0.25.6) + webpack: 5.94.0(@swc/core@1.13.1)(esbuild@0.18.17) optionalDependencies: - '@swc/core': 1.12.14(@swc/helpers@0.5.17) - esbuild: 0.25.6 + '@swc/core': 1.13.1(@swc/helpers@0.5.17) + esbuild: 0.18.17 terser@5.19.2: dependencies: @@ -31320,19 +31403,15 @@ snapshots: tinyglobby@0.2.14: dependencies: - fdir: 6.4.6(picomatch@4.0.2) - picomatch: 4.0.2 + fdir: 6.4.6(picomatch@4.0.3) + picomatch: 4.0.3 tinypool@1.1.1: {} tinyrainbow@1.2.0: {} - tinyrainbow@2.0.0: {} - tinyspy@3.0.2: {} - tinyspy@4.0.3: {} - tldts-core@6.1.86: {} tldts@6.1.86: @@ -31422,11 +31501,11 @@ snapshots: ts-proto-descriptors@2.0.0: dependencies: - '@bufbuild/protobuf': 2.6.0 + '@bufbuild/protobuf': 2.6.1 ts-proto@2.7.5: dependencies: - '@bufbuild/protobuf': 2.6.0 + '@bufbuild/protobuf': 2.6.1 case-anything: 2.1.13 ts-poet: 6.12.0 ts-proto-descriptors: 2.0.0 @@ -31454,18 +31533,18 @@ snapshots: tslib@2.8.1: {} - tsup@8.5.0(@swc/core@1.12.14)(jiti@1.21.7)(postcss@8.5.6)(typescript@5.8.3)(yaml@2.8.0): + tsup@8.5.0(@swc/core@1.13.1)(jiti@2.4.2)(postcss@8.5.6)(typescript@5.8.3)(yaml@2.8.0): dependencies: - bundle-require: 5.1.0(esbuild@0.25.6) + bundle-require: 5.1.0(esbuild@0.25.8) cac: 6.7.14 chokidar: 4.0.3 consola: 3.4.2 debug: 4.4.1(supports-color@5.5.0) - esbuild: 0.25.6 + esbuild: 0.25.8 fix-dts-default-cjs-exports: 1.0.1 joycon: 3.1.1 picocolors: 1.1.1 - postcss-load-config: 6.0.1(jiti@1.21.7)(postcss@8.5.6)(yaml@2.8.0) + postcss-load-config: 6.0.1(jiti@2.4.2)(postcss@8.5.6)(yaml@2.8.0) resolve-from: 5.0.0 rollup: 4.45.1 source-map: 0.8.0-beta.0 @@ -31474,7 +31553,7 @@ snapshots: tinyglobby: 0.2.14 tree-kill: 1.2.2 optionalDependencies: - '@swc/core': 1.12.14(@swc/helpers@0.5.17) + '@swc/core': 1.13.1(@swc/helpers@0.5.17) postcss: 8.5.6 typescript: 5.8.3 transitivePeerDependencies: @@ -31500,32 +31579,32 @@ snapshots: dependencies: safe-buffer: 5.2.1 - turbo-darwin-64@2.5.0: + turbo-darwin-64@2.5.5: optional: true - turbo-darwin-arm64@2.5.0: + turbo-darwin-arm64@2.5.5: optional: true - turbo-linux-64@2.5.0: + turbo-linux-64@2.5.5: optional: true - turbo-linux-arm64@2.5.0: + turbo-linux-arm64@2.5.5: optional: true - turbo-windows-64@2.5.0: + turbo-windows-64@2.5.5: optional: true - turbo-windows-arm64@2.5.0: + turbo-windows-arm64@2.5.5: optional: true - turbo@2.5.0: + turbo@2.5.5: optionalDependencies: - turbo-darwin-64: 2.5.0 - turbo-darwin-arm64: 2.5.0 - turbo-linux-64: 2.5.0 - turbo-linux-arm64: 2.5.0 - turbo-windows-64: 2.5.0 - turbo-windows-arm64: 2.5.0 + turbo-darwin-64: 2.5.5 + turbo-darwin-arm64: 2.5.5 + turbo-linux-64: 2.5.5 + turbo-linux-arm64: 2.5.5 + turbo-windows-64: 2.5.5 + turbo-windows-arm64: 2.5.5 tweetnacl@0.14.5: {} @@ -31614,6 +31693,8 @@ snapshots: undici-types@6.21.0: {} + undici-types@7.8.0: {} + unicode-canonical-property-names-ecmascript@2.0.1: {} unicode-emoji-modifier-base@1.0.0: {} @@ -31745,7 +31826,7 @@ snapshots: unrs-resolver@1.11.1: dependencies: - napi-postinstall: 0.3.0 + napi-postinstall: 0.3.2 optionalDependencies: '@unrs/resolver-binding-android-arm-eabi': 1.11.1 '@unrs/resolver-binding-android-arm64': 1.11.1 @@ -31798,14 +31879,14 @@ snapshots: dependencies: punycode: 2.3.1 - url-loader@4.1.1(file-loader@6.2.0(webpack@5.100.2(@swc/core@1.12.14(@swc/helpers@0.5.17))(esbuild@0.25.6)))(webpack@5.100.2(@swc/core@1.12.14(@swc/helpers@0.5.17))(esbuild@0.25.6)): + url-loader@4.1.1(file-loader@6.2.0(webpack@5.100.2(@swc/core@1.13.1(@swc/helpers@0.5.17))))(webpack@5.100.2(@swc/core@1.13.1(@swc/helpers@0.5.17))): dependencies: loader-utils: 2.0.4 mime-types: 2.1.35 schema-utils: 3.3.0 - webpack: 5.100.2(@swc/core@1.12.14(@swc/helpers@0.5.17))(esbuild@0.25.6) + webpack: 5.100.2(@swc/core@1.13.1(@swc/helpers@0.5.17)) optionalDependencies: - file-loader: 6.2.0(webpack@5.100.2(@swc/core@1.12.14(@swc/helpers@0.5.17))(esbuild@0.25.6)) + file-loader: 6.2.0(webpack@5.100.2(@swc/core@1.13.1(@swc/helpers@0.5.17))) url-parse@1.5.10: dependencies: @@ -31970,13 +32051,13 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.2 - vite-node@2.1.9(@types/node@22.16.4)(less@4.1.3)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1): + vite-node@2.1.9(@types/node@22.16.5)(less@4.1.3)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1): dependencies: cac: 6.7.14 debug: 4.4.1(supports-color@5.5.0) es-module-lexer: 1.7.0 pathe: 1.1.2 - vite: 5.4.19(@types/node@22.16.4)(less@4.1.3)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1) + vite: 5.4.19(@types/node@22.16.5)(less@4.1.3)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1) transitivePeerDependencies: - '@types/node' - less @@ -31988,16 +32069,15 @@ snapshots: - supports-color - terser - vite-node@3.2.4(@types/node@22.16.4)(jiti@1.21.7)(less@4.1.3)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0): + vite-node@2.1.9(@types/node@24.1.0)(less@4.1.3)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1): dependencies: cac: 6.7.14 debug: 4.4.1(supports-color@5.5.0) es-module-lexer: 1.7.0 - pathe: 2.0.3 - vite: 7.0.4(@types/node@22.16.4)(jiti@1.21.7)(less@4.1.3)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0) + pathe: 1.1.2 + vite: 5.4.19(@types/node@24.1.0)(less@4.1.3)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1) transitivePeerDependencies: - '@types/node' - - jiti - less - lightningcss - sass @@ -32006,68 +32086,61 @@ snapshots: - sugarss - supports-color - terser - - tsx - - yaml - vite-tsconfig-paths@5.1.4(typescript@5.8.3)(vite@7.0.4(@types/node@22.16.4)(jiti@1.21.7)(less@4.1.3)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0)): + vite-tsconfig-paths@5.1.4(typescript@5.8.3)(vite@5.4.19(@types/node@22.16.5)(less@4.1.3)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)): dependencies: debug: 4.4.1(supports-color@5.5.0) globrex: 0.1.2 tsconfck: 3.1.6(typescript@5.8.3) optionalDependencies: - vite: 7.0.4(@types/node@22.16.4)(jiti@1.21.7)(less@4.1.3)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0) + vite: 5.4.19(@types/node@22.16.5)(less@4.1.3)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1) transitivePeerDependencies: - supports-color - typescript - vite@4.5.5(@types/node@22.16.4)(less@4.1.3)(lightningcss@1.30.1)(sass@1.64.1)(terser@5.19.2): + vite@4.5.5(@types/node@22.16.5)(less@4.1.3)(lightningcss@1.30.1)(sass@1.64.1)(terser@5.19.2): dependencies: esbuild: 0.18.17 postcss: 8.5.3 rollup: 3.29.5 optionalDependencies: - '@types/node': 22.16.4 + '@types/node': 22.16.5 fsevents: 2.3.3 less: 4.1.3 lightningcss: 1.30.1 sass: 1.64.1 terser: 5.19.2 - vite@5.4.19(@types/node@22.16.4)(less@4.1.3)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1): + vite@5.4.19(@types/node@22.16.5)(less@4.1.3)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1): dependencies: esbuild: 0.21.5 postcss: 8.5.3 rollup: 4.45.1 optionalDependencies: - '@types/node': 22.16.4 + '@types/node': 22.16.5 fsevents: 2.3.3 less: 4.1.3 lightningcss: 1.30.1 sass: 1.89.2 terser: 5.43.1 - vite@7.0.4(@types/node@22.16.4)(jiti@1.21.7)(less@4.1.3)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0): + vite@5.4.19(@types/node@24.1.0)(less@4.1.3)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1): dependencies: - esbuild: 0.25.6 - fdir: 6.4.6(picomatch@4.0.2) - picomatch: 4.0.2 - postcss: 8.5.6 + esbuild: 0.21.5 + postcss: 8.5.3 rollup: 4.45.1 - tinyglobby: 0.2.14 optionalDependencies: - '@types/node': 22.16.4 + '@types/node': 24.1.0 fsevents: 2.3.3 - jiti: 1.21.7 less: 4.1.3 lightningcss: 1.30.1 sass: 1.89.2 terser: 5.43.1 - yaml: 2.8.0 - vitest@2.1.9(@types/node@22.16.4)(jsdom@26.1.0)(less@4.1.3)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1): + vitest@2.1.9(@types/node@22.16.5)(jsdom@26.1.0)(less@4.1.3)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1): dependencies: '@vitest/expect': 2.1.9 - '@vitest/mocker': 2.1.9(vite@5.4.19(@types/node@22.16.4)(less@4.1.3)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)) + '@vitest/mocker': 2.1.9(vite@5.4.19(@types/node@22.16.5)(less@4.1.3)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)) '@vitest/pretty-format': 2.1.9 '@vitest/runner': 2.1.9 '@vitest/snapshot': 2.1.9 @@ -32083,11 +32156,11 @@ snapshots: tinyexec: 0.3.2 tinypool: 1.1.1 tinyrainbow: 1.2.0 - vite: 5.4.19(@types/node@22.16.4)(less@4.1.3)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1) - vite-node: 2.1.9(@types/node@22.16.4)(less@4.1.3)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1) + vite: 5.4.19(@types/node@22.16.5)(less@4.1.3)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1) + vite-node: 2.1.9(@types/node@22.16.5)(less@4.1.3)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1) why-is-node-running: 2.3.0 optionalDependencies: - '@types/node': 22.16.4 + '@types/node': 22.16.5 jsdom: 26.1.0 transitivePeerDependencies: - less @@ -32100,37 +32173,32 @@ snapshots: - supports-color - terser - vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.16.4)(jiti@1.21.7)(jsdom@26.1.0)(less@4.1.3)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0): + vitest@2.1.9(@types/node@24.1.0)(jsdom@26.1.0)(less@4.1.3)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1): dependencies: - '@types/chai': 5.2.2 - '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(vite@7.0.4(@types/node@22.16.4)(jiti@1.21.7)(less@4.1.3)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0)) - '@vitest/pretty-format': 3.2.4 - '@vitest/runner': 3.2.4 - '@vitest/snapshot': 3.2.4 - '@vitest/spy': 3.2.4 - '@vitest/utils': 3.2.4 + '@vitest/expect': 2.1.9 + '@vitest/mocker': 2.1.9(vite@5.4.19(@types/node@24.1.0)(less@4.1.3)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)) + '@vitest/pretty-format': 2.1.9 + '@vitest/runner': 2.1.9 + '@vitest/snapshot': 2.1.9 + '@vitest/spy': 2.1.9 + '@vitest/utils': 2.1.9 chai: 5.2.1 debug: 4.4.1(supports-color@5.5.0) expect-type: 1.2.2 magic-string: 0.30.17 - pathe: 2.0.3 - picomatch: 4.0.2 + pathe: 1.1.2 std-env: 3.9.0 tinybench: 2.9.0 tinyexec: 0.3.2 - tinyglobby: 0.2.14 tinypool: 1.1.1 - tinyrainbow: 2.0.0 - vite: 7.0.4(@types/node@22.16.4)(jiti@1.21.7)(less@4.1.3)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0) - vite-node: 3.2.4(@types/node@22.16.4)(jiti@1.21.7)(less@4.1.3)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(yaml@2.8.0) + tinyrainbow: 1.2.0 + vite: 5.4.19(@types/node@24.1.0)(less@4.1.3)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1) + vite-node: 2.1.9(@types/node@24.1.0)(less@4.1.3)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1) why-is-node-running: 2.3.0 optionalDependencies: - '@types/debug': 4.1.12 - '@types/node': 22.16.4 + '@types/node': 24.1.0 jsdom: 26.1.0 transitivePeerDependencies: - - jiti - less - lightningcss - msw @@ -32140,8 +32208,6 @@ snapshots: - sugarss - supports-color - terser - - tsx - - yaml void-elements@2.0.1: {} @@ -32194,6 +32260,8 @@ snapshots: transitivePeerDependencies: - debug + walk-up-path@4.0.0: {} + warning@4.0.3: dependencies: loose-envify: 1.4.0 @@ -32247,25 +32315,25 @@ snapshots: - bufferutil - utf-8-validate - webpack-dev-middleware@5.3.4(webpack@5.100.2(@swc/core@1.12.14(@swc/helpers@0.5.17))(esbuild@0.25.6)): + webpack-dev-middleware@5.3.4(webpack@5.100.2(@swc/core@1.13.1(@swc/helpers@0.5.17))): dependencies: colorette: 2.0.20 memfs: 3.5.3 mime-types: 2.1.35 range-parser: 1.2.1 schema-utils: 4.3.2 - webpack: 5.100.2(@swc/core@1.12.14(@swc/helpers@0.5.17))(esbuild@0.25.6) + webpack: 5.100.2(@swc/core@1.13.1(@swc/helpers@0.5.17)) - webpack-dev-middleware@5.3.4(webpack@5.94.0(@swc/core@1.12.14)(esbuild@0.18.17)): + webpack-dev-middleware@5.3.4(webpack@5.94.0(@swc/core@1.13.1)(esbuild@0.18.17)): dependencies: colorette: 2.0.20 memfs: 3.5.3 mime-types: 2.1.35 range-parser: 1.2.1 schema-utils: 4.3.2 - webpack: 5.94.0(@swc/core@1.12.14)(esbuild@0.25.6) + webpack: 5.94.0(@swc/core@1.13.1)(esbuild@0.18.17) - webpack-dev-middleware@6.1.2(webpack@5.94.0(@swc/core@1.12.14)(esbuild@0.18.17)): + webpack-dev-middleware@6.1.2(webpack@5.94.0(@swc/core@1.13.1)(esbuild@0.18.17)): dependencies: colorette: 2.0.20 memfs: 3.5.3 @@ -32273,9 +32341,9 @@ snapshots: range-parser: 1.2.1 schema-utils: 4.3.2 optionalDependencies: - webpack: 5.94.0(@swc/core@1.12.14)(esbuild@0.25.6) + webpack: 5.94.0(@swc/core@1.13.1)(esbuild@0.18.17) - webpack-dev-server@4.15.1(webpack@5.94.0(@swc/core@1.12.14)(esbuild@0.18.17)): + webpack-dev-server@4.15.1(webpack@5.94.0(@swc/core@1.13.1)(esbuild@0.18.17)): dependencies: '@types/bonjour': 3.5.13 '@types/connect-history-api-fallback': 1.5.4 @@ -32288,7 +32356,7 @@ snapshots: bonjour-service: 1.3.0 chokidar: 3.5.3 colorette: 2.0.20 - compression: 1.8.0 + compression: 1.8.1 connect-history-api-fallback: 2.0.0 default-gateway: 6.0.3 express: 4.21.2 @@ -32305,17 +32373,17 @@ snapshots: serve-index: 1.9.1 sockjs: 0.3.24 spdy: 4.0.2 - webpack-dev-middleware: 5.3.4(webpack@5.94.0(@swc/core@1.12.14)(esbuild@0.18.17)) + webpack-dev-middleware: 5.3.4(webpack@5.94.0(@swc/core@1.13.1)(esbuild@0.18.17)) ws: 8.18.3 optionalDependencies: - webpack: 5.94.0(@swc/core@1.12.14)(esbuild@0.25.6) + webpack: 5.94.0(@swc/core@1.13.1)(esbuild@0.18.17) transitivePeerDependencies: - bufferutil - debug - supports-color - utf-8-validate - webpack-dev-server@4.15.2(webpack@5.100.2(@swc/core@1.12.14(@swc/helpers@0.5.17))(esbuild@0.25.6)): + webpack-dev-server@4.15.2(webpack@5.100.2(@swc/core@1.13.1(@swc/helpers@0.5.17))): dependencies: '@types/bonjour': 3.5.13 '@types/connect-history-api-fallback': 1.5.4 @@ -32328,7 +32396,7 @@ snapshots: bonjour-service: 1.3.0 chokidar: 3.6.0 colorette: 2.0.20 - compression: 1.8.0 + compression: 1.8.1 connect-history-api-fallback: 2.0.0 default-gateway: 6.0.3 express: 4.21.2 @@ -32345,10 +32413,10 @@ snapshots: serve-index: 1.9.1 sockjs: 0.3.24 spdy: 4.0.2 - webpack-dev-middleware: 5.3.4(webpack@5.100.2(@swc/core@1.12.14(@swc/helpers@0.5.17))(esbuild@0.25.6)) + webpack-dev-middleware: 5.3.4(webpack@5.100.2(@swc/core@1.13.1(@swc/helpers@0.5.17))) ws: 8.18.3 optionalDependencies: - webpack: 5.100.2(@swc/core@1.12.14(@swc/helpers@0.5.17))(esbuild@0.25.6) + webpack: 5.100.2(@swc/core@1.13.1(@swc/helpers@0.5.17)) transitivePeerDependencies: - bufferutil - debug @@ -32374,14 +32442,14 @@ snapshots: webpack-sources@3.3.3: {} - webpack-subresource-integrity@5.1.0(html-webpack-plugin@5.6.3(webpack@5.94.0(@swc/core@1.12.14)(esbuild@0.18.17)))(webpack@5.94.0(@swc/core@1.12.14)(esbuild@0.18.17)): + webpack-subresource-integrity@5.1.0(html-webpack-plugin@5.6.3(webpack@5.94.0(@swc/core@1.13.1)(esbuild@0.18.17)))(webpack@5.94.0(@swc/core@1.13.1)(esbuild@0.18.17)): dependencies: typed-assert: 1.0.9 - webpack: 5.94.0(@swc/core@1.12.14)(esbuild@0.25.6) + webpack: 5.94.0(@swc/core@1.13.1)(esbuild@0.18.17) optionalDependencies: - html-webpack-plugin: 5.6.3(webpack@5.94.0(@swc/core@1.12.14)(esbuild@0.18.17)) + html-webpack-plugin: 5.6.3(webpack@5.94.0(@swc/core@1.13.1)(esbuild@0.18.17)) - webpack@5.100.2(@swc/core@1.12.14(@swc/helpers@0.5.17))(esbuild@0.25.6): + webpack@5.100.2(@swc/core@1.13.1(@swc/helpers@0.5.17)): dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.8 @@ -32405,7 +32473,7 @@ snapshots: neo-async: 2.6.2 schema-utils: 4.3.2 tapable: 2.2.2 - terser-webpack-plugin: 5.3.14(@swc/core@1.12.14(@swc/helpers@0.5.17))(esbuild@0.25.6)(webpack@5.100.2(@swc/core@1.12.14(@swc/helpers@0.5.17))(esbuild@0.25.6)) + terser-webpack-plugin: 5.3.14(@swc/core@1.13.1(@swc/helpers@0.5.17))(webpack@5.100.2(@swc/core@1.13.1(@swc/helpers@0.5.17))) watchpack: 2.4.4 webpack-sources: 3.3.3 transitivePeerDependencies: @@ -32413,7 +32481,7 @@ snapshots: - esbuild - uglify-js - webpack@5.94.0(@swc/core@1.12.14)(esbuild@0.25.6): + webpack@5.94.0(@swc/core@1.13.1)(esbuild@0.18.17): dependencies: '@types/estree': 1.0.8 '@webassemblyjs/ast': 1.14.1 @@ -32435,7 +32503,7 @@ snapshots: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.2 - terser-webpack-plugin: 5.3.14(@swc/core@1.12.14)(esbuild@0.25.6)(webpack@5.94.0(@swc/core@1.12.14)(esbuild@0.18.17)) + terser-webpack-plugin: 5.3.14(@swc/core@1.13.1)(esbuild@0.18.17)(webpack@5.94.0(@swc/core@1.13.1)(esbuild@0.18.17)) watchpack: 2.4.4 webpack-sources: 3.3.3 transitivePeerDependencies: @@ -32443,7 +32511,7 @@ snapshots: - esbuild - uglify-js - webpackbar@6.0.1(webpack@5.100.2(@swc/core@1.12.14(@swc/helpers@0.5.17))(esbuild@0.25.6)): + webpackbar@6.0.1(webpack@5.100.2(@swc/core@1.13.1(@swc/helpers@0.5.17))): dependencies: ansi-escapes: 4.3.2 chalk: 4.1.2 @@ -32452,7 +32520,7 @@ snapshots: markdown-table: 2.0.0 pretty-time: 1.1.0 std-env: 3.9.0 - webpack: 5.100.2(@swc/core@1.12.14(@swc/helpers@0.5.17))(esbuild@0.25.6) + webpack: 5.100.2(@swc/core@1.13.1(@swc/helpers@0.5.17)) wrap-ansi: 7.0.0 websocket-driver@0.7.4: @@ -32703,9 +32771,15 @@ snapshots: yocto-queue@1.2.1: {} + zod-validation-error@3.5.3(zod@3.25.76): + dependencies: + zod: 3.25.76 + zod@3.23.8: optional: true + zod@3.25.76: {} + zone.js@0.13.3: dependencies: tslib: 2.8.1 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 720e2ff607..ea2e2ec1f9 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -2,5 +2,5 @@ packages: - "console" - "docs" - "e2e" - - "login/apps/*" - - "login/packages/*" + - "packages/*" + - "apps/*" diff --git a/turbo.json b/turbo.json index 349e8d2440..2dad100d23 100644 --- a/turbo.json +++ b/turbo.json @@ -14,7 +14,10 @@ "NEXT_PUBLIC_BASE_PATH", "CUSTOM_REQUEST_HEADERS", "NODE_ENV", - "INKEEP_API_KEY" + "PORT", + "INKEEP_API_KEY", + "DISPLAY", + "CYPRESS_DISPLAY" ], "tasks": { "generate": { @@ -22,23 +25,19 @@ }, "build": {}, "build:login:standalone": {}, - "build:client:standalone": {}, - "test": {}, + "quality": { + "with": [ + "lint", + "test:unit", + "test:integration:login", + "test:acceptance", + "test:e2e" + ] + }, "start": {}, - "start:built": {}, "test:unit": {}, - "test:unit:standalone": {}, - "test:integration": {}, - "test:integration:setup": { - "with": ["dev"] - }, - "test:acceptance:setup": {}, - "test:acceptance:setup:dev": { - "with": ["dev"] - }, - "test:watch": { - "persistent": true - }, + "test:acceptance": {}, + "test:e2e": {}, "lint": {}, "lint:fix": {}, "dev": {