From 7345fa401b4d0def9db30fa081f6a8c03a67dd65 Mon Sep 17 00:00:00 2001 From: didirus Date: Thu, 27 Nov 2025 04:51:21 +0300 Subject: [PATCH] Add patch file --- patches/AstralRinth_Git_Diff_02112025.patch | 31363 ++++++++++++++++++ 1 file changed, 31363 insertions(+) create mode 100644 patches/AstralRinth_Git_Diff_02112025.patch diff --git a/patches/AstralRinth_Git_Diff_02112025.patch b/patches/AstralRinth_Git_Diff_02112025.patch new file mode 100644 index 00000000..0533ff4c --- /dev/null +++ b/patches/AstralRinth_Git_Diff_02112025.patch @@ -0,0 +1,31363 @@ +diff --git a/.github/ISSUE_TEMPLATE/1-app-bug.yml b/.github/ISSUE_TEMPLATE/1-app-bug.yml +new file mode 100644 +index 000000000..fad0c15ca +--- /dev/null ++++ b/.github/ISSUE_TEMPLATE/1-app-bug.yml +@@ -0,0 +1,60 @@ ++name: 🎮 Bug with Modrinth App ++description: For issues with Modrinth App. ++labels: [app] ++type: 'bug' ++body: ++ - type: checkboxes ++ attributes: ++ label: Please confirm the following. ++ options: ++ - label: I checked the [existing issues](https://github.com/modrinth/code/issues?q=is%3Aissue) for duplicate problems ++ required: true ++ - label: I have tried resolving the issue using the [support portal](https://support.modrinth.com) ++ required: true ++ - label: I have ensured my Modrinth App installation is up to date ++ required: true ++ - type: input ++ id: version ++ attributes: ++ label: What version of the Modrinth App are you using? ++ description: Find this in ⚙️ Settings (bottom right) -> After Modrinth App (bottom left) ++ validations: ++ required: true ++ - type: dropdown ++ id: oses ++ attributes: ++ label: What operating systems are you seeing the problem on? ++ multiple: true ++ options: ++ - Windows ++ - MacOS ++ - Linux ++ - type: textarea ++ attributes: ++ label: Describe the bug ++ description: A clear and concise description of what the bug is. Include screenshots if applicable. ++ validations: ++ required: true ++ - type: textarea ++ attributes: ++ label: Steps to reproduce ++ description: Steps to reproduce the behavior. ++ placeholder: | ++ 1. Go to '...' ++ 2. Click on '...' ++ 3. Scroll down to '...' ++ 4. See error ++ validations: ++ required: false ++ - type: textarea ++ attributes: ++ label: Expected behavior ++ description: A clear and concise description of what you expected to happen. ++ validations: ++ required: false ++ - type: textarea ++ attributes: ++ label: Additional context ++ description: Add any other context about the problem here. ++ validations: ++ required: false +diff --git a/.github/ISSUE_TEMPLATE/2-web-bug.yml b/.github/ISSUE_TEMPLATE/2-web-bug.yml +new file mode 100644 +index 000000000..983279c14 +--- /dev/null ++++ b/.github/ISSUE_TEMPLATE/2-web-bug.yml +@@ -0,0 +1,53 @@ ++name: 🌐 Bug with Modrinth.com ++description: For issues with the Modrinth website. ++labels: [website] ++type: 'bug' ++body: ++ - type: checkboxes ++ attributes: ++ label: Please confirm the following. ++ options: ++ - label: I checked the [existing issues](https://github.com/modrinth/code/issues?q=is%3Aissue) for duplicate problems ++ required: true ++ - label: I have tried resolving the issue using the [support portal](https://support.modrinth.com) ++ required: true ++ - type: dropdown ++ id: browsers ++ attributes: ++ label: What browsers are you seeing the problem on? ++ multiple: true ++ options: ++ - Chrome (including Arc, Brave, Opera, Vivaldi) ++ - Microsoft Edge ++ - Firefox ++ - Safari ++ - Other (please specify) ++ - type: textarea ++ attributes: ++ label: Describe the bug ++ description: A clear and concise description of what the bug is. Include screenshots if applicable. ++ validations: ++ required: false ++ - type: textarea ++ attributes: ++ label: Steps to reproduce ++ description: Steps to reproduce the behavior. ++ placeholder: | ++ 1. Go to '...' ++ 2. Click on '...' ++ 3. Scroll down to '...' ++ 4. See error ++ validations: ++ required: false ++ - type: textarea ++ attributes: ++ label: Expected behavior ++ description: A clear and concise description of what you expected to happen. ++ validations: ++ required: false ++ - type: textarea ++ attributes: ++ label: Additional context ++ description: Add any other context about the problem here. ++ validations: ++ required: false +diff --git a/.github/ISSUE_TEMPLATE/4-api-bug.yml b/.github/ISSUE_TEMPLATE/4-api-bug.yml +new file mode 100644 +index 000000000..00fac9bac +--- /dev/null ++++ b/.github/ISSUE_TEMPLATE/4-api-bug.yml +@@ -0,0 +1,42 @@ ++name: 🛠 Bug with Modrinth API ++description: For issues with the Modrinth API for developers. ++labels: [api, backend] ++type: 'bug' ++body: ++ - type: checkboxes ++ attributes: ++ label: Please confirm the following. ++ options: ++ - label: I checked the [existing issues](https://github.com/modrinth/code/issues?q=is%3Aissue) for duplicate problems ++ required: true ++ - label: I have tried resolving the issue using the [support portal](https://support.modrinth.com) ++ required: true ++ - type: textarea ++ attributes: ++ label: Describe the bug ++ description: A clear and concise description of what the bug is. Include screenshots if applicable. ++ validations: ++ required: false ++ - type: textarea ++ attributes: ++ label: Steps to reproduce ++ description: Steps to reproduce the behavior. ++ placeholder: | ++ 1. Go to '...' ++ 2. Click on '...' ++ 3. Scroll down to '...' ++ 4. See error ++ validations: ++ required: false ++ - type: textarea ++ attributes: ++ label: Expected behavior ++ description: A clear and concise description of what you expected to happen. ++ validations: ++ required: false ++ - type: textarea ++ attributes: ++ label: Additional context ++ description: Add any other context about the problem here. ++ validations: ++ required: false +diff --git a/.github/ISSUE_TEMPLATE/5-feature-request.yml b/.github/ISSUE_TEMPLATE/5-feature-request.yml +new file mode 100644 +index 000000000..0b358e9b4 +--- /dev/null ++++ b/.github/ISSUE_TEMPLATE/5-feature-request.yml +@@ -0,0 +1,47 @@ ++name: 💡 Feature request ++description: Suggest an idea ++type: 'feature' ++ ++body: ++ - type: checkboxes ++ attributes: ++ label: Please confirm the following. ++ options: ++ - label: I checked the [existing issues](https://github.com/modrinth/code/issues?q=is%3Aissue) for duplicate feature requests ++ required: true ++ - label: I have checked that this feature request is not on our [roadmap](https://roadmap.modrinth.com) ++ required: true ++ - type: dropdown ++ id: projects ++ attributes: ++ label: What parts of Modrinth is your feature request related too? ++ multiple: true ++ options: ++ - Modrinth App ++ - Modrinth.com website ++ - Modrinth Servers ++ - Modrinth API for developers ++ - type: textarea ++ attributes: ++ label: Is your suggested feature related to a problem? Please describe. ++ description: A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] ++ validations: ++ required: false ++ - type: textarea ++ attributes: ++ label: Describe the solution you'd like ++ description: A clear and concise description of what you want to happen. ++ validations: ++ required: false ++ - type: textarea ++ attributes: ++ label: Describe alternatives you've considered ++ description: A clear and concise description of any alternative solutions or features you've considered. ++ validations: ++ required: false ++ - type: textarea ++ attributes: ++ label: Additional context ++ description: Add any other context or screenshots about the suggested enhancement here. ++ validations: ++ required: false +diff --git a/.github/workflows/astralrinth-build.yml b/.github/workflows/astralrinth-build.yml +deleted file mode 100644 +index 63bb12c65..000000000 +--- a/.github/workflows/astralrinth-build.yml ++++ /dev/null +@@ -1,158 +0,0 @@ +-name: AstralRinth App build +- +-on: +- push: +- branches: +- - main +- - master +- - prod +- - release +- - beta +- - feature* +- tags: +- - release-* +- - beta-* +- paths: +- - .github/workflows/astralrinth-build.yml +- - 'apps/app/**' +- - 'apps/app-frontend/**' +- - 'packages/app-lib/**' +- - 'packages/app-macros/**' +- - 'packages/assets/**' +- - 'packages/ui/**' +- - 'packages/utils/**' +- workflow_dispatch: +- +-jobs: +- build: +- name: Build +- strategy: +- fail-fast: false +- matrix: +- # platform: [macos-latest, windows-latest, ubuntu-latest] +- platform: [windows-latest, ubuntu-latest] +- include: +- # - platform: macos-latest +- # artifact-target-name: universal-apple-darwin +- - platform: windows-latest +- artifact-target-name: x86_64-pc-windows-msvc +- - platform: ubuntu-latest +- artifact-target-name: x86_64-unknown-linux-gnu +- +- runs-on: ${{ matrix.platform }} +- +- steps: +- - name: 📥 Check out code +- uses: actions/checkout@v4 +- with: +- fetch-depth: 2 +- +- - name: 🔍 Validate Git config does not introduce CRLF +- shell: bash +- run: | +- echo "🔍 Checking Git config for CRLF settings..." +- +- autocrlf=$(git config --get core.autocrlf || echo "unset") +- eol_setting=$(git config --get core.eol || echo "unset") +- +- echo "core.autocrlf = $autocrlf" +- echo "core.eol = $eol_setting" +- +- if [ "$autocrlf" = "true" ]; then +- echo "⚠️ WARNING: core.autocrlf is set to 'true'. Consider setting it to 'input' or 'false'." +- fi +- +- if [ "$eol_setting" = "crlf" ]; then +- echo "⚠️ WARNING: core.eol is set to 'crlf'. Consider unsetting it or setting to 'lf'." +- fi +- +- - name: 🔍 Check migration files line endings (LF only) +- shell: bash +- run: | +- echo "🔍 Scanning migration SQL files for CR characters (\\r)..." +- if grep -Iq $'\r' packages/app-lib/migrations/*.sql; then +- echo "❌ ERROR: Some migration files contain CR (\\r) characters — expected only LF line endings." +- exit 1 +- fi +- echo "✅ All migration files use LF line endings" +- +- - name: 🧰 Setup Rust toolchain +- uses: actions-rust-lang/setup-rust-toolchain@v1 +- with: +- target: ${{ matrix.artifact-target-name }} +- +- - name: 🧰 Install pnpm +- uses: pnpm/action-setup@v4 +- +- - name: 🧰 Setup Node.js +- uses: actions/setup-node@v4 +- with: +- node-version-file: .nvmrc +- cache: pnpm +- +- - name: 🧰 Install Linux build dependencies +- if: matrix.platform == 'ubuntu-latest' +- run: | +- sudo apt-get update +- sudo apt-get install -yq \ +- libgtk-3-dev \ +- libwebkit2gtk-4.1-dev \ +- libayatana-appindicator3-dev \ +- librsvg2-dev \ +- xdg-utils \ +- openjdk-17-jdk +- +- - name: ⚙️ Set application environment +- shell: bash +- run: | +- cp packages/app-lib/.env.prod packages/app-lib/.env +- +- - name: 💨 Setup Turbo cache +- uses: rharkor/caching-for-turbo@v1.8 +- +- - name: 🧰 Install dependencies +- run: pnpm install +- +- - name: ✍️ Set up Windows code signing (jsign) +- if: matrix.platform == 'windows-latest' && env.SIGN_WINDOWS_BINARIES == 'true' +- shell: bash +- run: | +- choco install jsign --ignore-dependencies +- +- - name: 🗑️ Clean up cached bundles +- shell: bash +- run: | +- rm -rf target/release/bundle +- rm -rf target/*/release/bundle || true +- +- # - name: 🔨 Build macOS app +- # if: matrix.platform == 'macos-latest' +- # run: pnpm --filter=@modrinth/app run tauri build --target universal-apple-darwin --config tauri-release.conf.json +- # env: +- # TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_PRIVATE_KEY }} +- # TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_KEY_PASSWORD }} +- +- - name: 🔨 Build Linux app +- if: matrix.platform == 'ubuntu-latest' +- run: pnpm --filter=@modrinth/app run tauri build --config tauri-release.conf.json +- env: +- TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_PRIVATE_KEY }} +- TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_KEY_PASSWORD }} +- +- - name: 🔨 Build Windows app +- if: matrix.platform == 'windows-latest' +- shell: pwsh +- run: | +- $env:JAVA_HOME = "$env:JAVA_HOME_17_X64" +- pnpm --filter=@modrinth/app run tauri build --config tauri-release.conf.json --verbose --bundles 'nsis' +- env: +- TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_PRIVATE_KEY }} +- TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_KEY_PASSWORD }} +- +- - name: 📤 Upload app bundles +- uses: actions/upload-artifact@v3 +- with: +- name: App bundle (${{ matrix.artifact-target-name }}) +- path: | +- target/release/bundle/** +- target/*/release/bundle/** +diff --git a/.github/workflows/daedalus-docker.yml b/.github/workflows/daedalus-docker.yml +new file mode 100644 +index 000000000..ad6661134 +--- /dev/null ++++ b/.github/workflows/daedalus-docker.yml +@@ -0,0 +1,62 @@ ++name: daedalus-docker-build ++ ++on: ++ push: ++ branches: ++ - '**' ++ paths: ++ - .github/workflows/daedalus-docker.yml ++ - 'apps/daedalus_client/**' ++ - 'packages/daedalus/**' ++ pull_request: ++ types: [opened, synchronize] ++ paths: ++ - .github/workflows/daedalus-docker.yml ++ - 'apps/daedalus_client/**' ++ - 'packages/daedalus/**' ++ merge_group: ++ types: [checks_requested] ++ ++jobs: ++ docker: ++ runs-on: ubuntu-latest ++ steps: ++ - name: 📥 Check out code ++ uses: actions/checkout@v4 ++ ++ - name: 🧰 Set up Docker Buildx ++ uses: docker/setup-buildx-action@v2 ++ ++ - name: ⚙️ Generate Docker image metadata ++ id: docker_meta ++ uses: docker/metadata-action@v5 ++ env: ++ DOCKER_METADATA_ANNOTATIONS_LEVELS: manifest,index ++ with: ++ images: ghcr.io/modrinth/daedalus ++ labels: | ++ org.opencontainers.image.title=daedalus ++ org.opencontainers.image.description=Modrinth game metadata query client ++ org.opencontainers.image.licenses=MIT ++ annotations: | ++ org.opencontainers.image.title=daedalus ++ org.opencontainers.image.description=Modrinth game metadata query client ++ org.opencontainers.image.licenses=MIT ++ ++ - name: 🔑 Login to GitHub Packages ++ uses: docker/login-action@v3 ++ with: ++ registry: ghcr.io ++ username: ${{ github.actor }} ++ password: ${{ secrets.GITHUB_TOKEN }} ++ ++ - name: 🔨 Build and push ++ uses: docker/build-push-action@v6 ++ with: ++ file: ./apps/daedalus_client/Dockerfile ++ push: ${{ github.event_name != 'pull_request' }} ++ tags: ${{ steps.docker_meta.outputs.tags }} ++ labels: ${{ steps.docker_meta.outputs.labels }} ++ annotations: ${{ steps.docker_meta.outputs.annotations }} ++ cache-from: type=registry,ref=ghcr.io/modrinth/daedalus:main ++ cache-to: type=inline +diff --git a/.github/workflows/daedalus-run.yml b/.github/workflows/daedalus-run.yml +new file mode 100644 +index 000000000..56fbd9f82 +--- /dev/null ++++ b/.github/workflows/daedalus-run.yml +@@ -0,0 +1,51 @@ ++name: Run Meta ++ ++on: ++ schedule: ++ - cron: '*/5 * * * *' ++ workflow_dispatch: ++ ++jobs: ++ run-docker: ++ if: github.repository_owner == 'modrinth' ++ runs-on: ubuntu-latest ++ ++ steps: ++ - name: Checkout repository ++ uses: actions/checkout@v3 ++ ++ - name: Log in to GitHub Container Registry ++ uses: docker/login-action@v2 ++ with: ++ registry: ghcr.io ++ username: ${{ github.actor }} ++ password: ${{ secrets.GITHUB_TOKEN }} ++ ++ - name: Pull Docker image from GHCR ++ run: docker pull ghcr.io/modrinth/daedalus:main ++ ++ - name: Run Docker container ++ env: ++ BASE_URL: ${{ secrets.BASE_URL }} ++ S3_ACCESS_TOKEN: ${{ secrets.S3_ACCESS_TOKEN }} ++ S3_SECRET: ${{ secrets.S3_SECRET }} ++ S3_URL: ${{ secrets.S3_URL }} ++ S3_REGION: ${{ secrets.S3_REGION }} ++ S3_BUCKET_NAME: ${{ secrets.S3_BUCKET_NAME }} ++ CLOUDFLARE_INTEGRATION: ${{ secrets.CLOUDFLARE_INTEGRATION }} ++ CLOUDFLARE_TOKEN: ${{ secrets.CLOUDFLARE_TOKEN }} ++ CLOUDFLARE_ZONE_ID: ${{ secrets.CLOUDFLARE_ZONE_ID }} ++ run: | ++ docker run \ ++ --name daedalus \ ++ -e RUST_LOG=warn,daedalus_client=trace \ ++ -e BASE_URL=$BASE_URL \ ++ -e S3_ACCESS_TOKEN=$S3_ACCESS_TOKEN \ ++ -e S3_SECRET=$S3_SECRET \ ++ -e S3_URL=$S3_URL \ ++ -e S3_REGION=$S3_REGION \ ++ -e S3_BUCKET_NAME=$S3_BUCKET_NAME \ ++ -e CLOUDFLARE_INTEGRATION=$CLOUDFLARE_INTEGRATION \ ++ -e CLOUDFLARE_TOKEN=$CLOUDFLARE_TOKEN \ ++ -e CLOUDFLARE_ZONE_ID=$CLOUDFLARE_ZONE_ID \ ++ ghcr.io/modrinth/daedalus:main +diff --git a/.github/workflows/frontend-pages.yml b/.github/workflows/frontend-pages.yml +new file mode 100644 +index 000000000..cd575fdfe +--- /dev/null ++++ b/.github/workflows/frontend-pages.yml +@@ -0,0 +1,30 @@ ++name: Clear pages cache ++ ++on: ++ push: ++ branches: ++ - prod ++ ++jobs: ++ wait: ++ if: github.repository_owner == 'modrinth' ++ runs-on: ubuntu-latest ++ permissions: ++ contents: read ++ deployments: write ++ steps: ++ - name: Cloudflare Pages deployment ++ uses: WalshyDev/cf-pages-await@v1 ++ with: ++ apiToken: ${{ secrets.CF_API_TOKEN }} ++ accountId: '9ddae624c98677d68d93df6e524a6061' ++ project: 'frontend' ++ commitHash: ${{ steps.push-changes.outputs.commit-hash }} ++ - name: Purge cache ++ if: github.ref == 'refs/heads/prod' ++ run: | ++ curl -X POST \ ++ -H "Authorization: Bearer ${{ secrets.CF_API_TOKEN }}" \ ++ -H "Content-Type: application/json" \ ++ --data '{"hosts": ["modrinth.com", "www.modrinth.com"]}' \ ++ https://api.cloudflare.com/client/v4/zones/e39df17b9c4ef44cbce2646346ee6d33/purge_cache +diff --git a/.github/workflows/labrinth-docker.yml b/.github/workflows/labrinth-docker.yml +new file mode 100644 +index 000000000..99a57f7a8 +--- /dev/null ++++ b/.github/workflows/labrinth-docker.yml +@@ -0,0 +1,70 @@ ++name: docker-build ++ ++on: ++ push: ++ branches: ++ - '**' ++ paths: ++ - .github/workflows/labrinth-docker.yml ++ - 'apps/labrinth/**' ++ - Cargo.toml ++ - Cargo.lock ++ pull_request: ++ types: [opened, synchronize] ++ paths: ++ - .github/workflows/labrinth-docker.yml ++ - 'apps/labrinth/**' ++ - Cargo.toml ++ - Cargo.lock ++ merge_group: ++ types: [checks_requested] ++ ++jobs: ++ docker: ++ runs-on: ubuntu-latest ++ steps: ++ - name: 📥 Check out code ++ uses: actions/checkout@v4 ++ ++ - name: 🧰 Set up Docker Buildx ++ uses: docker/setup-buildx-action@v2 ++ ++ - name: ⚙️ Generate Docker image metadata ++ id: docker_meta ++ uses: docker/metadata-action@v5 ++ env: ++ # GitHub Packages requires annotations metadata in at least the index descriptor to show them ++ # up properly in its UI it seems, but it's not clear about it, because the docs refer to the ++ # image manifest only. See: ++ # https://docs.github.com/en/packages/working-with-a-github-packages-registry/working-with-the-container-registry#adding-a-description-to-multi-arch-images ++ DOCKER_METADATA_ANNOTATIONS_LEVELS: manifest,index ++ with: ++ images: ghcr.io/modrinth/labrinth ++ labels: | ++ org.opencontainers.image.title=labrinth ++ org.opencontainers.image.description=Modrinth API ++ org.opencontainers.image.licenses=AGPL-3.0-only ++ annotations: | ++ org.opencontainers.image.title=labrinth ++ org.opencontainers.image.description=Modrinth API ++ org.opencontainers.image.licenses=AGPL-3.0-only ++ ++ - name: 🔑 Login to GitHub Packages ++ uses: docker/login-action@v3 ++ with: ++ registry: ghcr.io ++ username: ${{ github.actor }} ++ password: ${{ secrets.GITHUB_TOKEN }} ++ ++ - name: 🔨 Build and push ++ uses: docker/build-push-action@v6 ++ with: ++ file: ./apps/labrinth/Dockerfile ++ push: ${{ github.event_name != 'pull_request' }} ++ tags: ${{ steps.docker_meta.outputs.tags }} ++ labels: ${{ steps.docker_meta.outputs.labels }} ++ annotations: ${{ steps.docker_meta.outputs.annotations }} ++ build-args: | ++ GIT_HASH=${{ fromJSON(steps.docker_meta.outputs.json).labels['org.opencontainers.image.revision'] }} ++ cache-from: type=registry,ref=ghcr.io/modrinth/labrinth:main ++ cache-to: type=inline +diff --git a/.github/workflows/theseus-build.yml b/.github/workflows/theseus-build.yml +new file mode 100644 +index 000000000..287f5b6de +--- /dev/null ++++ b/.github/workflows/theseus-build.yml +@@ -0,0 +1,152 @@ ++name: Modrinth App build ++on: ++ push: ++ branches: ++ - main ++ tags: ++ - 'v*' ++ paths: ++ - .github/workflows/theseus-build.yml ++ - 'apps/app/**' ++ - 'apps/app-frontend/**' ++ - 'packages/app-lib/**' ++ - 'packages/app-macros/**' ++ - 'packages/assets/**' ++ - 'packages/ui/**' ++ - 'packages/utils/**' ++ workflow_dispatch: ++ inputs: ++ sign-windows-binaries: ++ description: Sign Windows binaries ++ type: boolean ++ default: true ++ required: false ++ ++jobs: ++ build: ++ name: Build ++ strategy: ++ fail-fast: false ++ matrix: ++ platform: [macos-latest, windows-latest, ubuntu-latest] ++ include: ++ - platform: macos-latest ++ artifact-target-name: universal-apple-darwin ++ - platform: windows-latest ++ artifact-target-name: x86_64-pc-windows-msvc ++ - platform: ubuntu-latest ++ artifact-target-name: x86_64-unknown-linux-gnu ++ ++ runs-on: ${{ matrix.platform }} ++ ++ steps: ++ - name: 📥 Check out code ++ uses: actions/checkout@v4 ++ with: ++ fetch-depth: 0 ++ ++ - name: 🧰 Setup Rust toolchain ++ uses: actions-rust-lang/setup-rust-toolchain@v1 ++ with: ++ rustflags: '' ++ target: ${{ startsWith(matrix.platform, 'macos') && 'x86_64-apple-darwin' || '' }} ++ ++ - name: 🧰 Install pnpm ++ uses: pnpm/action-setup@v4 ++ ++ - name: 🧰 Setup Node.js ++ uses: actions/setup-node@v4 ++ with: ++ node-version-file: .nvmrc ++ cache: pnpm ++ ++ - name: 🧰 Install Linux build dependencies ++ if: startsWith(matrix.platform, 'ubuntu') ++ run: | ++ sudo apt-get update ++ sudo apt-get install -yq libwebkit2gtk-4.1-dev libayatana-appindicator3-dev librsvg2-dev ++ ++ - name: 🧰 Setup Dasel ++ uses: jaxxstorm/action-install-gh-release@v2.1.0 ++ with: ++ repo: TomWright/dasel ++ tag: v2.8.1 ++ extension-matching: disable ++ rename-to: ${{ startsWith(matrix.platform, 'windows') && 'dasel.exe' || 'dasel' }} ++ chmod: 0755 ++ ++ - name: ⚙️ Set application version and environment ++ shell: bash ++ run: | ++ APP_VERSION="$(git describe --tags --always | sed -E 's/-([0-9]+)-(g[0-9a-fA-F]+)$/-canary+\1.\2/')" ++ echo "Setting application version to $APP_VERSION" ++ dasel put -f apps/app/Cargo.toml -t string -v "${APP_VERSION#v}" 'package.version' ++ dasel put -f packages/app-lib/Cargo.toml -t string -v "${APP_VERSION#v}" 'package.version' ++ dasel put -f apps/app-frontend/package.json -t string -v "${APP_VERSION#v}" 'version' ++ ++ cp packages/app-lib/.env.prod packages/app-lib/.env ++ ++ - name: 💨 Setup Turbo cache ++ uses: rharkor/caching-for-turbo@v1.8 ++ ++ - name: 🧰 Install dependencies ++ run: pnpm install ++ ++ - name: ✍️ Set up Windows code signing ++ if: startsWith(matrix.platform, 'windows') ++ shell: bash ++ run: | ++ if [ '${{ startsWith(github.ref, 'refs/tags/v') || inputs.sign-windows-binaries }}' = 'true' ]; then ++ choco install jsign --ignore-dependencies # GitHub runners come with a global Java installation already ++ else ++ dasel delete -f apps/app/tauri-release.conf.json 'bundle.windows.signCommand' ++ fi ++ ++ - name: 🔨 Build macOS app ++ run: pnpm --filter=@modrinth/app run tauri build --target universal-apple-darwin --config tauri-release.conf.json ++ if: startsWith(matrix.platform, 'macos') ++ env: ++ ENABLE_CODE_SIGNING: ${{ secrets.APPLE_CERTIFICATE }} ++ APPLE_CERTIFICATE: ${{ secrets.APPLE_CERTIFICATE }} ++ APPLE_CERTIFICATE_PASSWORD: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }} ++ APPLE_SIGNING_IDENTITY: ${{ secrets.APPLE_SIGNING_IDENTITY }} ++ APPLE_ID: ${{ secrets.APPLE_ID }} ++ APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }} ++ APPLE_PASSWORD: ${{ secrets.APPLE_PASSWORD }} ++ TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_PRIVATE_KEY }} ++ TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_KEY_PASSWORD }} ++ ++ - name: 🔨 Build Linux app ++ run: pnpm --filter=@modrinth/app run tauri build --config tauri-release.conf.json ++ if: startsWith(matrix.platform, 'ubuntu') ++ env: ++ TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_PRIVATE_KEY }} ++ TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_KEY_PASSWORD }} ++ ++ - name: 🔨 Build Windows app ++ run: | ++ [System.Convert]::FromBase64String("$env:DIGICERT_ONE_SIGNER_CLIENT_CERTIFICATE_BASE64") | Set-Content -Path signer-client-cert.p12 -AsByteStream ++ $env:DIGICERT_ONE_SIGNER_CREDENTIALS = "$env:DIGICERT_ONE_SIGNER_API_KEY|$PWD\signer-client-cert.p12|$env:DIGICERT_ONE_SIGNER_CLIENT_CERTIFICATE_PASSWORD" ++ $env:JAVA_HOME = "$env:JAVA_HOME_17_X64" ++ pnpm --filter=@modrinth/app run tauri build --config tauri-release.conf.json --verbose --bundles 'nsis,updater' ++ Remove-Item -Path signer-client-cert.p12 -ErrorAction SilentlyContinue ++ if: startsWith(matrix.platform, 'windows') ++ env: ++ TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_PRIVATE_KEY }} ++ TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_KEY_PASSWORD }} ++ DIGICERT_ONE_SIGNER_API_KEY: ${{ secrets.DIGICERT_ONE_SIGNER_API_KEY }} ++ DIGICERT_ONE_SIGNER_CLIENT_CERTIFICATE_BASE64: ${{ secrets.DIGICERT_ONE_SIGNER_CLIENT_CERTIFICATE_BASE64 }} ++ DIGICERT_ONE_SIGNER_CLIENT_CERTIFICATE_PASSWORD: ${{ secrets.DIGICERT_ONE_SIGNER_CLIENT_CERTIFICATE_PASSWORD }} ++ ++ - name: 📤 Upload app bundles ++ uses: actions/upload-artifact@v4 ++ with: ++ name: App bundle (${{ matrix.artifact-target-name }}) ++ path: | ++ target/release/bundle/appimage/Modrinth App_*.AppImage* ++ target/release/bundle/deb/Modrinth App_*.deb* ++ target/release/bundle/rpm/Modrinth App-*.rpm* ++ target/universal-apple-darwin/release/bundle/macos/Modrinth App.app.tar.gz* ++ target/universal-apple-darwin/release/bundle/dmg/Modrinth App_*.dmg* ++ target/release/bundle/nsis/Modrinth App_*-setup.exe* ++ target/release/bundle/nsis/Modrinth App_*-setup.nsis.zip* +diff --git a/.github/workflows/theseus-release.yml b/.github/workflows/theseus-release.yml +new file mode 100644 +index 000000000..6cd2be01f +--- /dev/null ++++ b/.github/workflows/theseus-release.yml +@@ -0,0 +1,118 @@ ++name: Modrinth App release ++on: ++ workflow_dispatch: ++ inputs: ++ version-tag: ++ description: Version tag to release to the wide public ++ type: string ++ required: true ++ release-notes: ++ description: Release notes to include in the Tauri version manifest ++ default: A new release of the Modrinth App is available! ++ type: string ++ required: true ++ ++jobs: ++ release: ++ name: Release Modrinth App ++ runs-on: ubuntu-latest ++ ++ env: ++ LINUX_X64_BUNDLE_ARTIFACT_NAME: App bundle (x86_64-unknown-linux-gnu) ++ WINDOWS_X64_BUNDLE_ARTIFACT_NAME: App bundle (x86_64-pc-windows-msvc) ++ MACOS_UNIVERSAL_BUNDLE_ARTIFACT_NAME: App bundle (universal-apple-darwin) ++ LAUNCHER_FILES_BUCKET_BASE_URL: https://launcher-files.modrinth.com ++ ++ steps: ++ - name: 📥 Download Modrinth App artifacts ++ uses: dawidd6/action-download-artifact@v11 ++ with: ++ workflow: theseus-build.yml ++ workflow_conclusion: success ++ event: push ++ branch: ${{ inputs.version-tag }} ++ use_unzip: true ++ ++ - name: 🛠️ Generate version manifest ++ env: ++ VERSION_TAG: ${{ inputs.version-tag }} ++ RELEASE_NOTES: ${{ inputs.release-notes }} ++ run: | ++ # Reference: https://tauri.app/plugin/updater/#server-support ++ jq -nc \ ++ --arg versionTag "${VERSION_TAG#v}" \ ++ --arg releaseNotes "$RELEASE_NOTES" \ ++ --rawfile macOsAarch64UpdateArtifactSignature "${MACOS_UNIVERSAL_BUNDLE_ARTIFACT_NAME}/universal-apple-darwin/release/bundle/macos/Modrinth App.app.tar.gz.sig" \ ++ --rawfile macOsX64UpdateArtifactSignature "${MACOS_UNIVERSAL_BUNDLE_ARTIFACT_NAME}/universal-apple-darwin/release/bundle/macos/Modrinth App.app.tar.gz.sig" \ ++ --rawfile linuxX64UpdateArtifactSignature "${LINUX_X64_BUNDLE_ARTIFACT_NAME}/release/bundle/appimage/Modrinth App_${VERSION_TAG#v}_amd64.AppImage.tar.gz.sig" \ ++ --rawfile windowsX64UpdateArtifactSignature "${WINDOWS_X64_BUNDLE_ARTIFACT_NAME}/release/bundle/nsis/Modrinth App_${VERSION_TAG#v}_x64-setup.nsis.zip.sig" \ ++ '{ ++ "version": $versionTag, ++ "notes": $releaseNotes, ++ "pub_date": now | todateiso8601, ++ "platforms": { ++ "darwin-aarch64": { ++ "signature": $macOsAarch64UpdateArtifactSignature, ++ "url": @uri "${{ env.LAUNCHER_FILES_BUCKET_BASE_URL }}/versions/\($versionTag)/macos/\("Modrinth App.app.tar.gz")", ++ "install_urls": [@uri "${{ env.LAUNCHER_FILES_BUCKET_BASE_URL }}/versions/\($versionTag)/macos/\("Modrinth App_" + $versionTag + "_universal.dmg")"] ++ }, ++ "darwin-x86_64": { ++ "signature": $macOsX64UpdateArtifactSignature, ++ "url": @uri "${{ env.LAUNCHER_FILES_BUCKET_BASE_URL }}/versions/\($versionTag)/macos/\("Modrinth App.app.tar.gz")", ++ "install_urls": [@uri "${{ env.LAUNCHER_FILES_BUCKET_BASE_URL }}/versions/\($versionTag)/macos/\("Modrinth App_" + $versionTag + "_universal.dmg")"] ++ }, ++ "linux-x86_64": { ++ "signature": $linuxX64UpdateArtifactSignature, ++ "url": @uri "${{ env.LAUNCHER_FILES_BUCKET_BASE_URL }}/versions/\($versionTag)/linux/\("Modrinth App_" + $versionTag + "_amd64.AppImage.tar.gz")", ++ "install_urls": [ ++ @uri "${{ env.LAUNCHER_FILES_BUCKET_BASE_URL }}/versions/\($versionTag)/linux/\("Modrinth App_" + $versionTag + "_amd64.deb")", ++ @uri "${{ env.LAUNCHER_FILES_BUCKET_BASE_URL }}/versions/\($versionTag)/linux/\("Modrinth App_" + $versionTag + "_amd64.AppImage")", ++ @uri "${{ env.LAUNCHER_FILES_BUCKET_BASE_URL }}/versions/\($versionTag)/linux/\("Modrinth App-" + $versionTag + "-1.x86_64.rpm")" ++ ] ++ }, ++ "windows-x86_64": { ++ "signature": $windowsX64UpdateArtifactSignature, ++ "url": @uri "${{ env.LAUNCHER_FILES_BUCKET_BASE_URL }}/versions/\($versionTag)/windows/\("Modrinth App_" + $versionTag + "_x64-setup.nsis.zip")", ++ "install_urls": [@uri "${{ env.LAUNCHER_FILES_BUCKET_BASE_URL }}/versions/\($versionTag)/windows/\("Modrinth App_" + $versionTag + "_x64-setup.exe")"] ++ } ++ } ++ }' > updates.json ++ ++ echo "Generated manifest for version ${VERSION_TAG}:" ++ cat updates.json ++ ++ - name: 📤 Upload release artifacts ++ env: ++ VERSION_TAG: ${{ inputs.version-tag }} ++ AWS_ACCESS_KEY_ID: ${{ secrets.LAUNCHER_FILES_BUCKET_ACCESS_KEY_ID }} ++ AWS_SECRET_ACCESS_KEY: ${{ secrets.LAUNCHER_FILES_BUCKET_SECRET_ACCESS_KEY }} ++ AWS_BUCKET: ${{ secrets.LAUNCHER_FILES_BUCKET_NAME }} ++ AWS_REGION: ${{ secrets.LAUNCHER_FILES_BUCKET_REGION }} ++ AWS_ENDPOINT_URL: ${{ secrets.LAUNCHER_FILES_BUCKET_ENDPOINT_URL }} ++ AWS_PAGER: '' ++ # Work around incompatible checksum behavior with some S3-like object storage providers, ++ # such as Cloudflare R2. See: ++ # - https://developers.cloudflare.com/r2/examples/aws/aws-cli/ ++ # - https://developers.cloudflare.com/r2/examples/aws/aws-sdk-java/ ++ AWS_REQUEST_CHECKSUM_CALCULATION: when_required ++ AWS_RESPONSE_CHECKSUM_VALIDATION: when_required ++ run: | ++ for macosBundleType in 'macos' 'dmg'; do ++ aws s3 cp --recursive \ ++ "${MACOS_UNIVERSAL_BUNDLE_ARTIFACT_NAME}/universal-apple-darwin/release/bundle/${macosBundleType}" \ ++ "s3://${AWS_BUCKET}/versions/${VERSION_TAG#v}/macos" ++ done ++ ++ for linuxBundleType in 'appimage' 'deb' 'rpm'; do ++ aws s3 cp --recursive \ ++ "${LINUX_X64_BUNDLE_ARTIFACT_NAME}/release/bundle/${linuxBundleType}" \ ++ "s3://${AWS_BUCKET}/versions/${VERSION_TAG#v}/linux" ++ done ++ ++ for windowsBundleType in 'nsis'; do ++ aws s3 cp --recursive \ ++ "${WINDOWS_X64_BUNDLE_ARTIFACT_NAME}/release/bundle/${windowsBundleType}" \ ++ "s3://${AWS_BUCKET}/versions/${VERSION_TAG#v}/windows" ++ done ++ ++ aws s3 cp updates.json "s3://${AWS_BUCKET}" +diff --git a/.github/workflows/turbo-ci.yml b/.github/workflows/turbo-ci.yml +new file mode 100644 +index 000000000..ba62ac5a5 +--- /dev/null ++++ b/.github/workflows/turbo-ci.yml +@@ -0,0 +1,92 @@ ++name: CI ++ ++on: ++ push: ++ branches: [main] ++ pull_request: ++ types: [opened, synchronize] ++ merge_group: ++ types: [checks_requested] ++ ++jobs: ++ build: ++ name: Lint and Test ++ runs-on: ubuntu-latest ++ ++ env: ++ # Ensure pnpm output is colored in GitHub Actions logs ++ FORCE_COLOR: 3 ++ # Make cargo nextest successfully ignore projects without tests ++ NEXTEST_NO_TESTS: pass ++ # Fail on warnings in CI ++ # (but don't do this in the root `Cargo.toml`, ++ # since we don't want warnings to become errors ++ # while developing) ++ RUSTFLAGS: -Dwarnings ++ ++ steps: ++ - name: 📥 Check out code ++ uses: actions/checkout@v4 ++ with: ++ fetch-depth: 2 ++ ++ - name: 🧰 Install build dependencies ++ run: | ++ sudo apt-get update ++ sudo apt-get install -yq libwebkit2gtk-4.1-dev libayatana-appindicator3-dev librsvg2-dev ++ ++ - name: 🧰 Install pnpm ++ uses: pnpm/action-setup@v4 ++ ++ - name: 🧰 Setup Node.js ++ uses: actions/setup-node@v4 ++ with: ++ node-version-file: .nvmrc ++ cache: pnpm ++ ++ - name: 🧰 Setup Rust toolchain ++ uses: actions-rust-lang/setup-rust-toolchain@v1 ++ with: ++ rustflags: '' ++ components: clippy, rustfmt ++ cache: false ++ ++ - name: 🧰 Setup nextest ++ uses: taiki-e/install-action@nextest ++ ++ # cargo-binstall does not have pre-built binaries for sqlx-cli, so we fall ++ # back to a cached cargo install ++ - name: 🧰 Setup cargo-sqlx ++ uses: taiki-e/cache-cargo-install-action@v2 ++ with: ++ tool: sqlx-cli ++ locked: false ++ no-default-features: true ++ features: rustls,postgres ++ ++ - name: 💨 Setup Turbo cache ++ uses: rharkor/caching-for-turbo@v1.8 ++ ++ - name: 🧰 Install dependencies ++ run: pnpm install ++ ++ - name: ⚙️ Start services ++ run: docker compose up --wait ++ ++ - name: ⚙️ Setup labrinth environment and database ++ working-directory: apps/labrinth ++ run: | ++ cp .env.local .env ++ sqlx database setup ++ ++ - name: ⚙️ Set app environment ++ working-directory: packages/app-lib ++ run: cp .env.staging .env ++ ++ - name: 🔍 Lint and test ++ run: pnpm run ci ++ ++ - name: 🔍 Verify intl:extract has been run ++ run: | ++ pnpm intl:extract ++ git diff --exit-code --color */*/src/locales/en-US/index.json +diff --git a/Cargo.lock b/Cargo.lock +index d2cd92361..069844001 100644 +--- a/Cargo.lock ++++ b/Cargo.lock +@@ -8,7 +8,7 @@ version = "0.5.2" + source = "registry+https://github.com/rust-lang/crates.io-index" + checksum = "5f7b0a21988c1bf877cf4759ef5ddaac04c1c9fe808c9142ecb78ba97d97a28a" + dependencies = [ +- "bitflags 2.10.0", ++ "bitflags 2.9.4", + "bytes", + "futures-core", + "futures-sink", +@@ -44,7 +44,7 @@ dependencies = [ + "actix-service", + "actix-utils", + "actix-web", +- "bitflags 2.10.0", ++ "bitflags 2.9.4", + "bytes", + "derive_more 2.0.1", + "futures-core", +@@ -68,7 +68,7 @@ dependencies = [ + "actix-service", + "actix-utils", + "base64 0.22.1", +- "bitflags 2.10.0", ++ "bitflags 2.9.4", + "brotli", + "bytes", + "bytestring", +@@ -103,7 +103,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" + checksum = "e01ed3140b2f8d422c68afa1ed2e85d996ea619c988ac834d255db32138655cb" + dependencies = [ + "quote", +- "syn 2.0.108", ++ "syn 2.0.106", + ] + + [[package]] +@@ -141,7 +141,7 @@ dependencies = [ + "parse-size", + "proc-macro2", + "quote", +- "syn 2.0.108", ++ "syn 2.0.106", + ] + + [[package]] +@@ -259,7 +259,7 @@ dependencies = [ + "actix-router", + "proc-macro2", + "quote", +- "syn 2.0.108", ++ "syn 2.0.106", + ] + + [[package]] +@@ -324,7 +324,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" + checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" + dependencies = [ + "cfg-if", +- "getrandom 0.3.4", ++ "getrandom 0.3.3", + "once_cell", + "version_check", + "zerocopy", +@@ -332,9 +332,9 @@ dependencies = [ + + [[package]] + name = "aho-corasick" +-version = "1.1.4" ++version = "1.1.3" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" ++checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" + dependencies = [ + "memchr", + ] +@@ -434,15 +434,6 @@ version = "1.0.100" + source = "registry+https://github.com/rust-lang/crates.io-index" + checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" + +-[[package]] +-name = "ar_archive_writer" +-version = "0.2.0" +-source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "f0c269894b6fe5e9d7ada0cf69b5bf847ff35bc25fc271f08e1d080fce80339a" +-dependencies = [ +- "object 0.32.2", +-] +- + [[package]] + name = "arbitrary" + version = "1.4.2" +@@ -460,7 +451,7 @@ checksum = "0ae92a5119aa49cdbcf6b9f893fe4e1d98b04ccbf82ee0584ad948a44a734dea" + dependencies = [ + "proc-macro2", + "quote", +- "syn 2.0.108", ++ "syn 2.0.106", + ] + + [[package]] +@@ -653,7 +644,7 @@ checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" + dependencies = [ + "proc-macro2", + "quote", +- "syn 2.0.108", ++ "syn 2.0.106", + ] + + [[package]] +@@ -693,7 +684,7 @@ checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" + dependencies = [ + "proc-macro2", + "quote", +- "syn 2.0.108", ++ "syn 2.0.106", + ] + + [[package]] +@@ -734,7 +725,7 @@ checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" + dependencies = [ + "proc-macro2", + "quote", +- "syn 2.0.108", ++ "syn 2.0.106", + ] + + [[package]] +@@ -831,7 +822,7 @@ dependencies = [ + "base64 0.22.1", + "http 1.3.1", + "log", +- "rustls 0.23.34", ++ "rustls 0.23.32", + "serde", + "serde_json", + "url", +@@ -846,14 +837,14 @@ checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" + + [[package]] + name = "av1-grain" +-version = "0.2.5" ++version = "0.2.4" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "8cfddb07216410377231960af4fcab838eaa12e013417781b78bd95ee22077f8" ++checksum = "4f3efb2ca85bc610acfa917b5aaa36f3fcbebed5b3182d7f877b02531c4b80c8" + dependencies = [ + "anyhow", + "arrayvec", + "log", +- "nom 8.0.0", ++ "nom 7.1.3", + "num-rational", + "v_frame", + ] +@@ -896,15 +887,16 @@ dependencies = [ + + [[package]] + name = "aws-lc-sys" +-version = "0.32.3" ++version = "0.32.2" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "107a4e9d9cab9963e04e84bb8dee0e25f2a987f9a8bad5ed054abd439caa8f8c" ++checksum = "a2b715a6010afb9e457ca2b7c9d2b9c344baa8baed7b38dc476034c171b32575" + dependencies = [ + "bindgen", + "cc", + "cmake", + "dunce", + "fs_extra", ++ "libloading 0.8.8", + ] + + [[package]] +@@ -973,7 +965,7 @@ dependencies = [ + "cfg-if", + "libc", + "miniz_oxide", +- "object 0.37.3", ++ "object", + "rustc-demangle", + "windows-link 0.2.1", + ] +@@ -1020,7 +1012,7 @@ version = "0.72.1" + source = "registry+https://github.com/rust-lang/crates.io-index" + checksum = "993776b509cfb49c750f11b8f07a46fa23e0a1386ffc01fb1e7d343efc387895" + dependencies = [ +- "bitflags 2.10.0", ++ "bitflags 2.9.4", + "cexpr", + "clang-sys", + "itertools 0.13.0", +@@ -1031,7 +1023,7 @@ dependencies = [ + "regex", + "rustc-hash", + "shlex", +- "syn 2.0.108", ++ "syn 2.0.106", + ] + + [[package]] +@@ -1063,11 +1055,11 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + + [[package]] + name = "bitflags" +-version = "2.10.0" ++version = "2.9.4" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" ++checksum = "2261d10cca569e4643e526d8dc2e62e433cc8aba21ab764233731f8d369bf394" + dependencies = [ +- "serde_core", ++ "serde", + ] + + [[package]] +@@ -1157,7 +1149,7 @@ dependencies = [ + "proc-macro-crate 3.4.0", + "proc-macro2", + "quote", +- "syn 2.0.108", ++ "syn 2.0.106", + ] + + [[package]] +@@ -1183,9 +1175,9 @@ dependencies = [ + + [[package]] + name = "bstr" +-version = "1.12.1" ++version = "1.12.0" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "63044e1ae8e69f3b5a92c736ca6269b8d12fa7efe39bf34ddb06d102cf0e2cab" ++checksum = "234113d19d0d7d613b40e86fb654acf958910802bcceab913a4f9e7cda03b1a4" + dependencies = [ + "memchr", + ] +@@ -1262,9 +1254,9 @@ dependencies = [ + + [[package]] + name = "bzip2" +-version = "0.6.1" ++version = "0.6.0" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "f3a53fac24f34a81bc9954b5d6cfce0c21e18ec6959f44f56e8e90e4bb7c346c" ++checksum = "bea8dcd42434048e4f7a304411d9273a411f647446c1234a65ce0554923f4cff" + dependencies = [ + "libbz2-rs-sys", + ] +@@ -1275,7 +1267,7 @@ version = "0.18.5" + source = "registry+https://github.com/rust-lang/crates.io-index" + checksum = "8ca26ef0159422fb77631dc9d17b102f253b876fe1586b03b803e63a309b4ee2" + dependencies = [ +- "bitflags 2.10.0", ++ "bitflags 2.9.4", + "cairo-sys-rs", + "glib", + "libc", +@@ -1347,9 +1339,9 @@ dependencies = [ + + [[package]] + name = "cc" +-version = "1.2.44" ++version = "1.2.41" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "37521ac7aabe3d13122dc382493e20c9416f299d2ccd5b3a5340a2570cdeb0f3" ++checksum = "ac9fe6cdbb24b6ade63616c0a0688e45bb56732262c158df3c0c4bea4ca47cb7" + dependencies = [ + "find-msvc-tools", + "jobserver", +@@ -1404,9 +1396,9 @@ dependencies = [ + + [[package]] + name = "cfg-if" +-version = "1.0.4" ++version = "1.0.3" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" ++checksum = "2fd1289c04a9ea8cb22300a459a72a385d7c73d3259e2ed7dcb2af674838cfa9" + + [[package]] + name = "cfg_aliases" +@@ -1478,14 +1470,14 @@ checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" + dependencies = [ + "glob", + "libc", +- "libloading 0.8.9", ++ "libloading 0.8.8", + ] + + [[package]] + name = "clap" +-version = "4.5.51" ++version = "4.5.48" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "4c26d721170e0295f191a69bd9a1f93efcdb0aff38684b61ab5750468972e5f5" ++checksum = "e2134bb3ea021b78629caa971416385309e0131b351b25e01dc16fb54e1b5fae" + dependencies = [ + "clap_builder", + "clap_derive", +@@ -1493,9 +1485,9 @@ dependencies = [ + + [[package]] + name = "clap_builder" +-version = "4.5.51" ++version = "4.5.48" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "75835f0c7bf681bfd05abe44e965760fea999a5286c6eb2d59883634fd02011a" ++checksum = "c2ba64afa3c0a6df7fa517765e31314e983f51dda798ffba27b988194fb65dc9" + dependencies = [ + "anstream", + "anstyle", +@@ -1505,21 +1497,21 @@ dependencies = [ + + [[package]] + name = "clap_derive" +-version = "4.5.49" ++version = "4.5.47" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "2a0b5487afeab2deb2ff4e03a807ad1a03ac532ff5a2cee5d86884440c7f7671" ++checksum = "bbfd7eae0b0f1a6e63d4b13c9c478de77c2eb546fba158ad50b4203dc24b9f9c" + dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", +- "syn 2.0.108", ++ "syn 2.0.106", + ] + + [[package]] + name = "clap_lex" +-version = "0.7.6" ++version = "0.7.5" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "a1d728cc89cf3aee9ff92b05e62b19ee65a02b5702cff7d5a377e32c6ae29d8d" ++checksum = "b94f61472cee1439c0b966b47e3aca9ae07e45d070759512cd390ea2bebc6675" + + [[package]] + name = "clickhouse" +@@ -1558,7 +1550,7 @@ dependencies = [ + "proc-macro2", + "quote", + "serde_derive_internals", +- "syn 2.0.108", ++ "syn 2.0.106", + ] + + [[package]] +@@ -1877,7 +1869,7 @@ version = "0.24.0" + source = "registry+https://github.com/rust-lang/crates.io-index" + checksum = "fa95a34622365fa5bbf40b20b75dba8dfa8c94c734aea8ac9a5ca38af14316f1" + dependencies = [ +- "bitflags 2.10.0", ++ "bitflags 2.9.4", + "core-foundation 0.10.1", + "core-graphics-types", + "foreign-types", +@@ -1890,7 +1882,7 @@ version = "0.2.0" + source = "registry+https://github.com/rust-lang/crates.io-index" + checksum = "3d44a101f213f6c4cdc1853d4b78aef6db6bdfa3468798cc1d9912f4735013eb" + dependencies = [ +- "bitflags 2.10.0", ++ "bitflags 2.9.4", + "core-foundation 0.10.1", + "libc", + ] +@@ -2029,26 +2021,26 @@ source = "registry+https://github.com/rust-lang/crates.io-index" + checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" + dependencies = [ + "quote", +- "syn 2.0.108", ++ "syn 2.0.106", + ] + + [[package]] + name = "csv" +-version = "1.4.0" ++version = "1.3.1" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "52cd9d68cf7efc6ddfaaee42e7288d3a99d613d4b50f76ce9827ae0c6e14f938" ++checksum = "acdc4883a9c96732e4733212c01447ebd805833b7275a73ca3ee080fd77afdaf" + dependencies = [ + "csv-core", + "itoa", + "ryu", +- "serde_core", ++ "serde", + ] + + [[package]] + name = "csv-core" +-version = "0.1.13" ++version = "0.1.12" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "704a3c26996a80471189265814dbc2c257598b96b8a7feae2d31ace646bb9782" ++checksum = "7d02f3b0da4c6504f86e9cd789d8dbafab48c2321be74e9987593de5a894d93d" + dependencies = [ + "memchr", + ] +@@ -2060,7 +2052,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" + checksum = "32a2785755761f3ddc1492979ce1e48d2c00d09311c39e4466429188f3dd6501" + dependencies = [ + "quote", +- "syn 2.0.108", ++ "syn 2.0.106", + ] + + [[package]] +@@ -2084,7 +2076,7 @@ dependencies = [ + "dashmap", + "dotenvy", + "futures", +- "indexmap 2.12.0", ++ "indexmap 2.11.4", + "itertools 0.14.0", + "reqwest", + "rust-s3", +@@ -2130,7 +2122,7 @@ dependencies = [ + "proc-macro2", + "quote", + "strsim", +- "syn 2.0.108", ++ "syn 2.0.106", + ] + + [[package]] +@@ -2144,7 +2136,7 @@ dependencies = [ + "proc-macro2", + "quote", + "strsim", +- "syn 2.0.108", ++ "syn 2.0.106", + ] + + [[package]] +@@ -2155,7 +2147,7 @@ checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" + dependencies = [ + "darling_core 0.20.11", + "quote", +- "syn 2.0.108", ++ "syn 2.0.106", + ] + + [[package]] +@@ -2166,7 +2158,7 @@ checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" + dependencies = [ + "darling_core 0.21.3", + "quote", +- "syn 2.0.108", ++ "syn 2.0.106", + ] + + [[package]] +@@ -2256,9 +2248,9 @@ dependencies = [ + + [[package]] + name = "deranged" +-version = "0.5.5" ++version = "0.5.4" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "ececcb659e7ba858fb4f10388c250a7252eb0a27373f1a72b8748afdd248e587" ++checksum = "a41953f86f8a05768a6cda24def994fd2f424b04ec5c719cf89989779f199071" + dependencies = [ + "powerfmt", + "serde_core", +@@ -2272,7 +2264,7 @@ checksum = "1e567bd82dcff979e4b03460c307b3cdc9e96fde3d73bed1496d2bc75d9dd62a" + dependencies = [ + "proc-macro2", + "quote", +- "syn 2.0.108", ++ "syn 2.0.106", + ] + + [[package]] +@@ -2293,7 +2285,7 @@ dependencies = [ + "darling 0.20.11", + "proc-macro2", + "quote", +- "syn 2.0.108", ++ "syn 2.0.106", + ] + + [[package]] +@@ -2303,7 +2295,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" + checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c" + dependencies = [ + "derive_builder_core", +- "syn 2.0.108", ++ "syn 2.0.106", + ] + + [[package]] +@@ -2316,7 +2308,7 @@ dependencies = [ + "proc-macro2", + "quote", + "rustc_version", +- "syn 2.0.108", ++ "syn 2.0.106", + ] + + [[package]] +@@ -2336,7 +2328,7 @@ checksum = "bda628edc44c4bb645fbe0f758797143e4e07926f7ebf4e9bdfbd3d2ce621df3" + dependencies = [ + "proc-macro2", + "quote", +- "syn 2.0.108", ++ "syn 2.0.106", + "unicode-xid", + ] + +@@ -2430,7 +2422,7 @@ version = "0.3.0" + source = "registry+https://github.com/rust-lang/crates.io-index" + checksum = "89a09f22a6c6069a18470eb92d2298acf25463f14256d24778e1230d789a2aec" + dependencies = [ +- "bitflags 2.10.0", ++ "bitflags 2.9.4", + "block2 0.6.2", + "libc", + "objc2 0.6.3", +@@ -2444,7 +2436,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" + dependencies = [ + "proc-macro2", + "quote", +- "syn 2.0.108", ++ "syn 2.0.106", + ] + + [[package]] +@@ -2453,7 +2445,7 @@ version = "0.5.2" + source = "registry+https://github.com/rust-lang/crates.io-index" + checksum = "330c60081dcc4c72131f8eb70510f1ac07223e5d4163db481a04a0befcffa412" + dependencies = [ +- "libloading 0.8.9", ++ "libloading 0.8.8", + ] + + [[package]] +@@ -2476,7 +2468,7 @@ checksum = "788160fb30de9cdd857af31c6a2675904b16ece8fc2737b2c7127ba368c9d0f4" + dependencies = [ + "proc-macro2", + "quote", +- "syn 2.0.108", ++ "syn 2.0.106", + ] + + [[package]] +@@ -2490,9 +2482,9 @@ dependencies = [ + + [[package]] + name = "document-features" +-version = "0.2.12" ++version = "0.2.11" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "d4b8a88685455ed29a21542a33abd9cb6510b6b129abadabdcef0f4c55bc8f61" ++checksum = "95249b50c6c185bee49034bcb378a49dc2b5dff0be90ff6616d31d64febab05d" + dependencies = [ + "litrs", + ] +@@ -2660,7 +2652,7 @@ dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", +- "syn 2.0.108", ++ "syn 2.0.106", + ] + + [[package]] +@@ -2681,7 +2673,7 @@ checksum = "67c78a4d8fdf9953a5c9d458f9efe940fd97a0cab0941c075a813ac594733827" + dependencies = [ + "proc-macro2", + "quote", +- "syn 2.0.108", ++ "syn 2.0.106", + ] + + [[package]] +@@ -2703,7 +2695,7 @@ dependencies = [ + "darling 0.21.3", + "proc-macro2", + "quote", +- "syn 2.0.108", ++ "syn 2.0.106", + ] + + [[package]] +@@ -2748,7 +2740,7 @@ checksum = "44f23cf4b44bfce11a86ace86f8a73ffdec849c9fd00a386a53d278bd9e81fb3" + dependencies = [ + "proc-macro2", + "quote", +- "syn 2.0.108", ++ "syn 2.0.106", + ] + + [[package]] +@@ -2823,7 +2815,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" + checksum = "f83197f59927b46c04a183a619b7c29df34e63e63c7869320862268c0ef687e0" + dependencies = [ + "bit_field", +- "half 2.7.1", ++ "half 2.7.0", + "lebe", + "miniz_oxide", + "rayon-core", +@@ -2884,7 +2876,7 @@ checksum = "a0aca10fb742cb43f9e7bb8467c91aa9bcb8e3ffbc6a6f7389bb93ffc920577d" + dependencies = [ + "proc-macro2", + "quote", +- "syn 2.0.108", ++ "syn 2.0.106", + ] + + [[package]] +@@ -2948,9 +2940,9 @@ dependencies = [ + + [[package]] + name = "flate2" +-version = "1.1.5" ++version = "1.1.4" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "bfe33edd8e85a12a67454e37f8c75e730830d83e313556ab9ebf9ee7fbeb3bfb" ++checksum = "dc5a4e564e38c699f2880d3fda590bedc2e69f3f84cd48b457bd892ce61d0aa9" + dependencies = [ + "crc32fast", + "libz-rs-sys", +@@ -2998,7 +2990,7 @@ checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" + dependencies = [ + "proc-macro2", + "quote", +- "syn 2.0.108", ++ "syn 2.0.106", + ] + + [[package]] +@@ -3159,7 +3151,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" + dependencies = [ + "proc-macro2", + "quote", +- "syn 2.0.108", ++ "syn 2.0.106", + ] + + [[package]] +@@ -3313,12 +3305,12 @@ dependencies = [ + + [[package]] + name = "gethostname" +-version = "1.1.0" ++version = "1.0.2" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "1bd49230192a3797a9a4d6abe9b3eed6f7fa4c8a8a4947977c6f80025f92cbd8" ++checksum = "fc257fdb4038301ce4b9cd1b3b51704509692bb3ff716a410cbd07925d9dae55" + dependencies = [ + "rustix 1.1.2", +- "windows-link 0.2.1", ++ "windows-targets 0.52.6", + ] + + [[package]] +@@ -3347,15 +3339,15 @@ dependencies = [ + + [[package]] + name = "getrandom" +-version = "0.3.4" ++version = "0.3.3" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" ++checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" + dependencies = [ + "cfg-if", + "js-sys", + "libc", + "r-efi", +- "wasip2", ++ "wasi 0.14.7+wasi-0.2.4", + "wasm-bindgen", + ] + +@@ -3413,7 +3405,7 @@ version = "0.18.5" + source = "registry+https://github.com/rust-lang/crates.io-index" + checksum = "233daaf6e83ae6a12a52055f568f9d7cf4671dabb78ff9560ab6da230ce00ee5" + dependencies = [ +- "bitflags 2.10.0", ++ "bitflags 2.9.4", + "futures-channel", + "futures-core", + "futures-executor", +@@ -3441,7 +3433,7 @@ dependencies = [ + "proc-macro-error", + "proc-macro2", + "quote", +- "syn 2.0.108", ++ "syn 2.0.106", + ] + + [[package]] +@@ -3531,7 +3523,7 @@ dependencies = [ + "proc-macro-error", + "proc-macro2", + "quote", +- "syn 2.0.108", ++ "syn 2.0.106", + ] + + [[package]] +@@ -3546,7 +3538,7 @@ dependencies = [ + "futures-sink", + "futures-util", + "http 0.2.12", +- "indexmap 2.12.0", ++ "indexmap 2.11.4", + "slab", + "tokio", + "tokio-util", +@@ -3565,7 +3557,7 @@ dependencies = [ + "futures-core", + "futures-sink", + "http 1.3.1", +- "indexmap 2.12.0", ++ "indexmap 2.11.4", + "slab", + "tokio", + "tokio-util", +@@ -3580,9 +3572,9 @@ checksum = "1b43ede17f21864e81be2fa654110bf1e793774238d86ef8555c37e6519c0403" + + [[package]] + name = "half" +-version = "2.7.1" ++version = "2.7.0" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "6ea2d84b969582b4b1864a92dc5d27cd2b77b622a8d79306834f1be5ba20d84b" ++checksum = "e54c115d4f30f52c67202f079c5f9d8b49db4691f460fdb0b4c2e838261b2ba5" + dependencies = [ + "cfg-if", + "crunchy", +@@ -3737,11 +3729,11 @@ dependencies = [ + + [[package]] + name = "home" +-version = "0.5.12" ++version = "0.5.11" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "cc627f471c528ff0c4a49e1d5e60450c8f6461dd6d10ba9dcd3a61d3dff7728d" ++checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf" + dependencies = [ +- "windows-sys 0.61.2", ++ "windows-sys 0.59.0", + ] + + [[package]] +@@ -3940,8 +3932,8 @@ dependencies = [ + "http 1.3.1", + "hyper 1.7.0", + "hyper-util", +- "rustls 0.23.34", +- "rustls-native-certs 0.8.2", ++ "rustls 0.23.32", ++ "rustls-native-certs 0.8.1", + "rustls-pki-types", + "tokio", + "tokio-rustls 0.26.4", +@@ -4024,9 +4016,9 @@ dependencies = [ + + [[package]] + name = "icu_collections" +-version = "2.1.1" ++version = "2.0.0" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "4c6b649701667bbe825c3b7e6388cb521c23d88644678e83c0c4d0a621a34b43" ++checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47" + dependencies = [ + "displaydoc", + "potential_utf", +@@ -4037,9 +4029,9 @@ dependencies = [ + + [[package]] + name = "icu_locale_core" +-version = "2.1.1" ++version = "2.0.0" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "edba7861004dd3714265b4db54a3c390e880ab658fec5f7db895fae2046b5bb6" ++checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a" + dependencies = [ + "displaydoc", + "litemap", +@@ -4050,10 +4042,11 @@ dependencies = [ + + [[package]] + name = "icu_normalizer" +-version = "2.1.1" ++version = "2.0.0" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "5f6c8828b67bf8908d82127b2054ea1b4427ff0230ee9141c54251934ab1b599" ++checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979" + dependencies = [ ++ "displaydoc", + "icu_collections", + "icu_normalizer_data", + "icu_properties", +@@ -4064,38 +4057,42 @@ dependencies = [ + + [[package]] + name = "icu_normalizer_data" +-version = "2.1.1" ++version = "2.0.0" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a" ++checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" + + [[package]] + name = "icu_properties" +-version = "2.1.1" ++version = "2.0.1" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "e93fcd3157766c0c8da2f8cff6ce651a31f0810eaa1c51ec363ef790bbb5fb99" ++checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b" + dependencies = [ ++ "displaydoc", + "icu_collections", + "icu_locale_core", + "icu_properties_data", + "icu_provider", ++ "potential_utf", + "zerotrie", + "zerovec", + ] + + [[package]] + name = "icu_properties_data" +-version = "2.1.1" ++version = "2.0.1" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "02845b3647bb045f1100ecd6480ff52f34c35f82d9880e029d329c21d1054899" ++checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632" + + [[package]] + name = "icu_provider" +-version = "2.1.1" ++version = "2.0.0" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "85962cf0ce02e1e0a629cc34e7ca3e373ce20dda4c4d7294bbd0bf1fdb59e614" ++checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af" + dependencies = [ + "displaydoc", + "icu_locale_core", ++ "stable_deref_trait", ++ "tinystr", + "writeable", + "yoke", + "zerofrom", +@@ -4195,9 +4192,9 @@ dependencies = [ + + [[package]] + name = "indexmap" +-version = "2.12.0" ++version = "2.11.4" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "6717a8d2a5a929a1a2eb43a12812498ed141a0bcfb7e8f7844fbdbe4303bba9f" ++checksum = "4b0f83760fb341a774ed326568e19f5a863af4a952def8c39f9ab92fd95b88e5" + dependencies = [ + "equivalent", + "hashbrown 0.16.0", +@@ -4207,9 +4204,9 @@ dependencies = [ + + [[package]] + name = "indicatif" +-version = "0.18.2" ++version = "0.18.0" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "ade6dfcba0dfb62ad59e59e7241ec8912af34fd29e0e743e3db992bd278e8b65" ++checksum = "70a646d946d06bedbbc4cac4c218acf4bbf2d87757a784857025f4d447e4e1cd" + dependencies = [ + "console", + "portable-atomic", +@@ -4245,7 +4242,7 @@ dependencies = [ + "crossbeam-utils", + "dashmap", + "env_logger", +- "indexmap 2.12.0", ++ "indexmap 2.11.4", + "itoa", + "log", + "num-format", +@@ -4261,7 +4258,7 @@ version = "0.11.0" + source = "registry+https://github.com/rust-lang/crates.io-index" + checksum = "f37dccff2791ab604f9babef0ba14fbe0be30bd368dc541e2b08d07c8aa908f3" + dependencies = [ +- "bitflags 2.10.0", ++ "bitflags 2.9.4", + "inotify-sys", + "libc", + ] +@@ -4292,7 +4289,18 @@ checksum = "c34819042dc3d3971c46c2190835914dfbe0c3c13f61449b2997f4e9722dfa60" + dependencies = [ + "proc-macro2", + "quote", +- "syn 2.0.108", ++ "syn 2.0.106", ++] ++ ++[[package]] ++name = "io-uring" ++version = "0.7.10" ++source = "registry+https://github.com/rust-lang/crates.io-index" ++checksum = "046fa2d4d00aea763528b4950358d0ead425372445dc8ff86312b3c69ff7727b" ++dependencies = [ ++ "bitflags 2.9.4", ++ "cfg-if", ++ "libc", + ] + + [[package]] +@@ -4340,13 +4348,13 @@ dependencies = [ + + [[package]] + name = "is-terminal" +-version = "0.4.17" ++version = "0.4.16" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "3640c1c38b8e4e43584d8df18be5fc6b0aa314ce6ebf51b53313d4306cca8e46" ++checksum = "e04d7f318608d35d4b61ddd75cbdaee86b023ebe2bd5a66ee0915f0bf93095a9" + dependencies = [ + "hermit-abi", + "libc", +- "windows-sys 0.61.2", ++ "windows-sys 0.59.0", + ] + + [[package]] +@@ -4361,9 +4369,9 @@ dependencies = [ + + [[package]] + name = "is_terminal_polyfill" +-version = "1.70.2" ++version = "1.70.1" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" ++checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" + + [[package]] + name = "iso8601" +@@ -4475,15 +4483,15 @@ version = "0.1.34" + source = "registry+https://github.com/rust-lang/crates.io-index" + checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" + dependencies = [ +- "getrandom 0.3.4", ++ "getrandom 0.3.3", + "libc", + ] + + [[package]] + name = "js-sys" +-version = "0.3.82" ++version = "0.3.81" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "b011eec8cc36da2aab2d5cff675ec18454fad408585853910a202391cf9f8e65" ++checksum = "ec48937a97411dcb524a265206ccd4c90bb711fca92b2792c407f268825b9305" + dependencies = [ + "once_cell", + "wasm-bindgen", +@@ -4552,7 +4560,7 @@ version = "0.7.0" + source = "registry+https://github.com/rust-lang/crates.io-index" + checksum = "b750dcadc39a09dbadd74e118f6dd6598df77fa01df0cfcdc52c28dece74528a" + dependencies = [ +- "bitflags 2.10.0", ++ "bitflags 2.9.4", + "serde", + "unicode-segmentation", + ] +@@ -4585,7 +4593,7 @@ checksum = "02cb977175687f33fa4afa0c95c112b987ea1443e5a51c8f8ff27dc618270cc2" + dependencies = [ + "cssparser", + "html5ever", +- "indexmap 2.12.0", ++ "indexmap 2.11.4", + "selectors", + ] + +@@ -4606,7 +4614,7 @@ dependencies = [ + "async-stripe", + "async-trait", + "base64 0.22.1", +- "bitflags 2.10.0", ++ "bitflags 2.9.4", + "bytes", + "censor", + "chrono", +@@ -4648,7 +4656,7 @@ dependencies = [ + "rust-s3", + "rust_decimal", + "rust_iso3166", +- "rustls 0.23.34", ++ "rustls 0.23.32", + "rusty-money", + "sentry", + "sentry-actix", +@@ -4725,8 +4733,8 @@ dependencies = [ + "nom 8.0.0", + "percent-encoding", + "quoted_printable", +- "rustls 0.23.34", +- "rustls-native-certs 0.8.2", ++ "rustls 0.23.32", ++ "rustls-native-certs 0.8.1", + "socket2 0.6.1", + "tokio", + "tokio-rustls 0.26.4", +@@ -4791,12 +4799,12 @@ dependencies = [ + + [[package]] + name = "libloading" +-version = "0.8.9" ++version = "0.8.8" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "d7c4b02199fee7c5d21a5ae7d8cfa79a6ef5bb2fc834d6e9058e89c825efdc55" ++checksum = "07033963ba89ebaf1584d767badaa2e8fcec21aedea6b8c0346d487d49c28667" + dependencies = [ + "cfg-if", +- "windows-link 0.2.1", ++ "windows-targets 0.53.5", + ] + + [[package]] +@@ -4811,7 +4819,7 @@ version = "0.1.10" + source = "registry+https://github.com/rust-lang/crates.io-index" + checksum = "416f7e718bdb06000964960ffa43b4335ad4012ae8b99060261aa4a8088d5ccb" + dependencies = [ +- "bitflags 2.10.0", ++ "bitflags 2.9.4", + "libc", + "redox_syscall", + ] +@@ -4860,15 +4868,15 @@ checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" + + [[package]] + name = "litemap" +-version = "0.8.1" ++version = "0.8.0" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77" ++checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" + + [[package]] + name = "litrs" +-version = "1.0.0" ++version = "0.4.2" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "11d3d7f243d5c5a8b9bb5d6dd2b1602c0cb0b9db1621bafc7ed66e35ff9fe092" ++checksum = "f5e54036fe321fd421e10d732f155734c4e4afd610dd556d9a82833ab3ee0bed" + + [[package]] + name = "local-channel" +@@ -4964,7 +4972,7 @@ checksum = "88a9689d8d44bf9964484516275f5cd4c9b59457a6940c1d5d0ecbb94510a36b" + dependencies = [ + "proc-macro2", + "quote", +- "syn 2.0.108", ++ "syn 2.0.106", + ] + + [[package]] +@@ -5009,7 +5017,7 @@ checksum = "5cf92c10c7e361d6b99666ec1c6f9805b0bea2c3bd8c78dc6fe98ac5bd78db11" + dependencies = [ + "proc-macro2", + "quote", +- "syn 2.0.108", ++ "syn 2.0.106", + ] + + [[package]] +@@ -5048,7 +5056,7 @@ dependencies = [ + "proc-macro2", + "quote", + "structmeta", +- "syn 2.0.108", ++ "syn 2.0.106", + ] + + [[package]] +@@ -5145,14 +5153,14 @@ dependencies = [ + + [[package]] + name = "mio" +-version = "1.1.0" ++version = "1.0.4" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "69d83b0086dc8ecf3ce9ae2874b2d1290252e2a30720bea58a5c6639b0092873" ++checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" + dependencies = [ + "libc", + "log", + "wasi 0.11.1+wasi-snapshot-preview1", +- "windows-sys 0.61.2", ++ "windows-sys 0.59.0", + ] + + [[package]] +@@ -5204,9 +5212,9 @@ dependencies = [ + + [[package]] + name = "moxcms" +-version = "0.7.9" ++version = "0.7.7" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "0fbdd3d7436f8b5e892b8b7ea114271ff0fa00bc5acae845d53b07d498616ef6" ++checksum = "c588e11a3082784af229e23e8e4ecf5bcc6fbe4f69101e0421ce8d79da7f0b40" + dependencies = [ + "num-traits", + "pxfm", +@@ -5275,7 +5283,7 @@ version = "0.9.0" + source = "registry+https://github.com/rust-lang/crates.io-index" + checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4" + dependencies = [ +- "bitflags 2.10.0", ++ "bitflags 2.9.4", + "jni-sys", + "log", + "ndk-sys", +@@ -5311,7 +5319,7 @@ version = "0.30.1" + source = "registry+https://github.com/rust-lang/crates.io-index" + checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6" + dependencies = [ +- "bitflags 2.10.0", ++ "bitflags 2.9.4", + "cfg-if", + "cfg_aliases", + "libc", +@@ -5355,7 +5363,7 @@ version = "8.2.0" + source = "registry+https://github.com/rust-lang/crates.io-index" + checksum = "4d3d07927151ff8575b7087f245456e549fea62edf0ec4e565a5ee50c8402bc3" + dependencies = [ +- "bitflags 2.10.0", ++ "bitflags 2.9.4", + "fsevent-sys", + "inotify", + "kqueue", +@@ -5429,10 +5437,11 @@ dependencies = [ + + [[package]] + name = "num-bigint-dig" +-version = "0.8.5" ++version = "0.8.4" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "82c79c15c05d4bf82b6f5ef163104cc81a760d8e874d38ac50ab67c8877b647b" ++checksum = "dc84195820f291c7697304f3cbdadd1cb7199c0efc917ff5eafd71225c136151" + dependencies = [ ++ "byteorder", + "lazy_static", + "libm", + "num-integer", +@@ -5466,7 +5475,7 @@ checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" + dependencies = [ + "proc-macro2", + "quote", +- "syn 2.0.108", ++ "syn 2.0.106", + ] + + [[package]] +@@ -5532,9 +5541,9 @@ dependencies = [ + + [[package]] + name = "num_enum" +-version = "0.7.5" ++version = "0.7.4" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "b1207a7e20ad57b847bbddc6776b968420d38292bbfe2089accff5e19e82454c" ++checksum = "a973b4e44ce6cad84ce69d797acf9a044532e4184c4f267913d1b546a0727b7a" + dependencies = [ + "num_enum_derive", + "rustversion", +@@ -5542,14 +5551,14 @@ dependencies = [ + + [[package]] + name = "num_enum_derive" +-version = "0.7.5" ++version = "0.7.4" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "ff32365de1b6743cb203b710788263c44a03de03802daf96092f2da4fe6ba4d7" ++checksum = "77e878c846a8abae00dd069496dbe8751b16ac1c3d6bd2a7283a938e8228f90d" + dependencies = [ + "proc-macro-crate 3.4.0", + "proc-macro2", + "quote", +- "syn 2.0.108", ++ "syn 2.0.106", + ] + + [[package]] +@@ -5584,7 +5593,7 @@ version = "0.3.2" + source = "registry+https://github.com/rust-lang/crates.io-index" + checksum = "d49e936b501e5c5bf01fda3a9452ff86dc3ea98ad5f283e1455153142d97518c" + dependencies = [ +- "bitflags 2.10.0", ++ "bitflags 2.9.4", + "block2 0.6.2", + "libc", + "objc2 0.6.3", +@@ -5605,7 +5614,7 @@ version = "0.3.2" + source = "registry+https://github.com/rust-lang/crates.io-index" + checksum = "73ad74d880bb43877038da939b7427bba67e9dd42004a18b809ba7d87cee241c" + dependencies = [ +- "bitflags 2.10.0", ++ "bitflags 2.9.4", + "objc2 0.6.3", + "objc2-foundation 0.3.2", + ] +@@ -5616,7 +5625,7 @@ version = "0.3.2" + source = "registry+https://github.com/rust-lang/crates.io-index" + checksum = "0b402a653efbb5e82ce4df10683b6b28027616a2715e90009947d50b8dd298fa" + dependencies = [ +- "bitflags 2.10.0", ++ "bitflags 2.9.4", + "objc2 0.6.3", + "objc2-foundation 0.3.2", + ] +@@ -5627,7 +5636,7 @@ version = "0.3.2" + source = "registry+https://github.com/rust-lang/crates.io-index" + checksum = "2a180dd8642fa45cdb7dd721cd4c11b1cadd4929ce112ebd8b9f5803cc79d536" + dependencies = [ +- "bitflags 2.10.0", ++ "bitflags 2.9.4", + "dispatch2", + "objc2 0.6.3", + ] +@@ -5638,7 +5647,7 @@ version = "0.3.2" + source = "registry+https://github.com/rust-lang/crates.io-index" + checksum = "e022c9d066895efa1345f8e33e584b9f958da2fd4cd116792e15e07e4720a807" + dependencies = [ +- "bitflags 2.10.0", ++ "bitflags 2.9.4", + "dispatch2", + "objc2 0.6.3", + "objc2-core-foundation", +@@ -5661,7 +5670,7 @@ version = "0.3.2" + source = "registry+https://github.com/rust-lang/crates.io-index" + checksum = "0cde0dfb48d25d2b4862161a4d5fcc0e3c24367869ad306b0c9ec0073bfed92d" + dependencies = [ +- "bitflags 2.10.0", ++ "bitflags 2.9.4", + "objc2 0.6.3", + "objc2-core-foundation", + "objc2-core-graphics", +@@ -5673,7 +5682,7 @@ version = "0.3.2" + source = "registry+https://github.com/rust-lang/crates.io-index" + checksum = "d425caf1df73233f29fd8a5c3e5edbc30d2d4307870f802d18f00d83dc5141a6" + dependencies = [ +- "bitflags 2.10.0", ++ "bitflags 2.9.4", + "objc2 0.6.3", + "objc2-core-foundation", + "objc2-core-graphics", +@@ -5701,7 +5710,7 @@ version = "0.2.2" + source = "registry+https://github.com/rust-lang/crates.io-index" + checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8" + dependencies = [ +- "bitflags 2.10.0", ++ "bitflags 2.9.4", + "block2 0.5.1", + "libc", + "objc2 0.5.2", +@@ -5713,7 +5722,7 @@ version = "0.3.2" + source = "registry+https://github.com/rust-lang/crates.io-index" + checksum = "e3e0adef53c21f888deb4fa59fc59f7eb17404926ee8a6f59f5df0fd7f9f3272" + dependencies = [ +- "bitflags 2.10.0", ++ "bitflags 2.9.4", + "block2 0.6.2", + "libc", + "objc2 0.6.3", +@@ -5736,7 +5745,7 @@ version = "0.3.2" + source = "registry+https://github.com/rust-lang/crates.io-index" + checksum = "180788110936d59bab6bd83b6060ffdfffb3b922ba1396b312ae795e1de9d81d" + dependencies = [ +- "bitflags 2.10.0", ++ "bitflags 2.9.4", + "objc2 0.6.3", + "objc2-core-foundation", + ] +@@ -5757,7 +5766,7 @@ version = "0.2.2" + source = "registry+https://github.com/rust-lang/crates.io-index" + checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6" + dependencies = [ +- "bitflags 2.10.0", ++ "bitflags 2.9.4", + "block2 0.5.1", + "objc2 0.5.2", + "objc2-foundation 0.2.2", +@@ -5769,7 +5778,7 @@ version = "0.3.2" + source = "registry+https://github.com/rust-lang/crates.io-index" + checksum = "f112d1746737b0da274ef79a23aac283376f335f4095a083a267a082f21db0c0" + dependencies = [ +- "bitflags 2.10.0", ++ "bitflags 2.9.4", + "objc2 0.6.3", + "objc2-app-kit", + "objc2-foundation 0.3.2", +@@ -5781,7 +5790,7 @@ version = "0.2.2" + source = "registry+https://github.com/rust-lang/crates.io-index" + checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a" + dependencies = [ +- "bitflags 2.10.0", ++ "bitflags 2.9.4", + "block2 0.5.1", + "objc2 0.5.2", + "objc2-foundation 0.2.2", +@@ -5794,7 +5803,7 @@ version = "0.3.2" + source = "registry+https://github.com/rust-lang/crates.io-index" + checksum = "96c1358452b371bf9f104e21ec536d37a650eb10f7ee379fff67d2e08d537f1f" + dependencies = [ +- "bitflags 2.10.0", ++ "bitflags 2.9.4", + "objc2 0.6.3", + "objc2-foundation 0.3.2", + ] +@@ -5805,7 +5814,7 @@ version = "0.3.2" + source = "registry+https://github.com/rust-lang/crates.io-index" + checksum = "709fe137109bd1e8b5a99390f77a7d8b2961dafc1a1c5db8f2e60329ad6d895a" + dependencies = [ +- "bitflags 2.10.0", ++ "bitflags 2.9.4", + "objc2 0.6.3", + "objc2-core-foundation", + ] +@@ -5816,7 +5825,7 @@ version = "0.3.2" + source = "registry+https://github.com/rust-lang/crates.io-index" + checksum = "d87d638e33c06f577498cbcc50491496a3ed4246998a7fbba7ccb98b1e7eab22" + dependencies = [ +- "bitflags 2.10.0", ++ "bitflags 2.9.4", + "objc2 0.6.3", + "objc2-core-foundation", + "objc2-foundation 0.3.2", +@@ -5828,7 +5837,7 @@ version = "0.3.2" + source = "registry+https://github.com/rust-lang/crates.io-index" + checksum = "b2e5aaab980c433cf470df9d7af96a7b46a9d892d521a2cbbb2f8a4c16751e7f" + dependencies = [ +- "bitflags 2.10.0", ++ "bitflags 2.9.4", + "block2 0.6.2", + "objc2 0.6.3", + "objc2-app-kit", +@@ -5838,15 +5847,6 @@ dependencies = [ + "objc2-security", + ] + +-[[package]] +-name = "object" +-version = "0.32.2" +-source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" +-dependencies = [ +- "memchr", +-] +- + [[package]] + name = "object" + version = "0.37.3" +@@ -5868,9 +5868,9 @@ dependencies = [ + + [[package]] + name = "once_cell_polyfill" +-version = "1.70.2" ++version = "1.70.1" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" ++checksum = "a4895175b425cb1f87721b59f0f286c2092bd4af812243672510e1ac53e2e0ad" + + [[package]] + name = "open" +@@ -6193,7 +6193,7 @@ dependencies = [ + "phf_shared 0.11.3", + "proc-macro2", + "quote", +- "syn 2.0.108", ++ "syn 2.0.106", + ] + + [[package]] +@@ -6206,7 +6206,7 @@ dependencies = [ + "phf_shared 0.13.1", + "proc-macro2", + "quote", +- "syn 2.0.108", ++ "syn 2.0.106", + ] + + [[package]] +@@ -6262,7 +6262,7 @@ checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" + dependencies = [ + "proc-macro2", + "quote", +- "syn 2.0.108", ++ "syn 2.0.106", + ] + + [[package]] +@@ -6322,7 +6322,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" + checksum = "740ebea15c5d1428f910cd1a5f52cebf8d25006245ed8ade92702f4943d91e07" + dependencies = [ + "base64 0.22.1", +- "indexmap 2.12.0", ++ "indexmap 2.11.4", + "quick-xml 0.38.3", + "serde", + "time", +@@ -6347,7 +6347,7 @@ version = "0.18.0" + source = "registry+https://github.com/rust-lang/crates.io-index" + checksum = "97baced388464909d42d89643fe4361939af9b7ce7a31ee32a168f832a70f2a0" + dependencies = [ +- "bitflags 2.10.0", ++ "bitflags 2.9.4", + "crc32fast", + "fdeflate", + "flate2", +@@ -6376,9 +6376,9 @@ checksum = "f84267b20a16ea918e43c6a88433c2d54fa145c92a811b5b047ccbe153674483" + + [[package]] + name = "potential_utf" +-version = "0.1.4" ++version = "0.1.3" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "b73949432f5e2a09657003c25bca5e19a0e9c84f8058ca374f49e0ebe605af77" ++checksum = "84df19adbe5b5a0782edcab45899906947ab039ccf4573713735ee7de1e6b08a" + dependencies = [ + "zerovec", + ] +@@ -6426,7 +6426,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" + checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" + dependencies = [ + "proc-macro2", +- "syn 2.0.108", ++ "syn 2.0.106", + ] + + [[package]] +@@ -6524,7 +6524,7 @@ dependencies = [ + "proc-macro-error-attr2", + "proc-macro2", + "quote", +- "syn 2.0.108", ++ "syn 2.0.106", + ] + + [[package]] +@@ -6535,9 +6535,9 @@ checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" + + [[package]] + name = "proc-macro2" +-version = "1.0.103" ++version = "1.0.101" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8" ++checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de" + dependencies = [ + "unicode-ident", + ] +@@ -6548,7 +6548,7 @@ version = "0.17.0" + source = "registry+https://github.com/rust-lang/crates.io-index" + checksum = "cc5b72d8145275d844d4b5f6d4e1eef00c8cd889edb6035c21675d1bb1f45c9f" + dependencies = [ +- "bitflags 2.10.0", ++ "bitflags 2.9.4", + "hex", + "procfs-core", + "rustix 0.38.44", +@@ -6560,7 +6560,7 @@ version = "0.17.0" + source = "registry+https://github.com/rust-lang/crates.io-index" + checksum = "239df02d8349b06fc07398a3a1697b06418223b1c7725085e801e7c0fc6a12ec" + dependencies = [ +- "bitflags 2.10.0", ++ "bitflags 2.9.4", + "hex", + ] + +@@ -6580,7 +6580,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" + checksum = "52717f9a02b6965224f95ca2a81e2e0c5c43baacd28ca057577988930b6c3d5b" + dependencies = [ + "quote", +- "syn 2.0.108", ++ "syn 2.0.106", + ] + + [[package]] +@@ -6620,7 +6620,7 @@ dependencies = [ + "itertools 0.14.0", + "proc-macro2", + "quote", +- "syn 2.0.108", ++ "syn 2.0.106", + ] + + [[package]] +@@ -6660,11 +6660,10 @@ checksum = "33cb294fe86a74cbcf50d4445b37da762029549ebeea341421c7c70370f86cac" + + [[package]] + name = "psm" +-version = "0.1.28" ++version = "0.1.27" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "d11f2fedc3b7dafdc2851bc52f277377c5473d378859be234bc7ebb593144d01" ++checksum = "e66fcd288453b748497d8fb18bccc83a16b0518e3906d4b8df0a8d42d93dbb1c" + dependencies = [ +- "ar_archive_writer", + "cc", + ] + +@@ -6779,7 +6778,7 @@ dependencies = [ + "quinn-proto", + "quinn-udp", + "rustc-hash", +- "rustls 0.23.34", ++ "rustls 0.23.32", + "socket2 0.6.1", + "thiserror 2.0.17", + "tokio", +@@ -6794,12 +6793,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" + checksum = "f1906b49b0c3bc04b5fe5d86a77925ae6524a19b816ae38ce1e426255f1d8a31" + dependencies = [ + "bytes", +- "getrandom 0.3.4", ++ "getrandom 0.3.3", + "lru-slab", + "rand 0.9.2", + "ring", + "rustc-hash", +- "rustls 0.23.34", ++ "rustls 0.23.32", + "rustls-pki-types", + "slab", + "thiserror 2.0.17", +@@ -6949,7 +6948,7 @@ version = "0.9.3" + source = "registry+https://github.com/rust-lang/crates.io-index" + checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" + dependencies = [ +- "getrandom 0.3.4", ++ "getrandom 0.3.3", + ] + + [[package]] +@@ -7076,7 +7075,7 @@ version = "0.5.18" + source = "registry+https://github.com/rust-lang/crates.io-index" + checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" + dependencies = [ +- "bitflags 2.10.0", ++ "bitflags 2.9.4", + ] + + [[package]] +@@ -7118,7 +7117,7 @@ checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" + dependencies = [ + "proc-macro2", + "quote", +- "syn 2.0.108", ++ "syn 2.0.106", + ] + + [[package]] +@@ -7200,8 +7199,8 @@ dependencies = [ + "percent-encoding", + "pin-project-lite", + "quinn", +- "rustls 0.23.34", +- "rustls-native-certs 0.8.2", ++ "rustls 0.23.32", ++ "rustls-native-certs 0.8.1", + "rustls-pki-types", + "serde", + "serde_json", +@@ -7360,7 +7359,7 @@ dependencies = [ + "proc-macro2", + "quote", + "rust-embed-utils", +- "syn 2.0.108", ++ "syn 2.0.106", + "walkdir", + ] + +@@ -7442,7 +7441,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" + checksum = "ae8c0cb48f413ebe24dc2d148788e0efbe09ba3e011d9277162f2eaf8e1069a3" + dependencies = [ + "quote", +- "syn 2.0.108", ++ "syn 2.0.106", + ] + + [[package]] +@@ -7484,7 +7483,7 @@ version = "0.38.44" + source = "registry+https://github.com/rust-lang/crates.io-index" + checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" + dependencies = [ +- "bitflags 2.10.0", ++ "bitflags 2.9.4", + "errno", + "libc", + "linux-raw-sys 0.4.15", +@@ -7497,7 +7496,7 @@ version = "1.1.2" + source = "registry+https://github.com/rust-lang/crates.io-index" + checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e" + dependencies = [ +- "bitflags 2.10.0", ++ "bitflags 2.9.4", + "errno", + "libc", + "linux-raw-sys 0.11.0", +@@ -7518,16 +7517,16 @@ dependencies = [ + + [[package]] + name = "rustls" +-version = "0.23.34" ++version = "0.23.32" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "6a9586e9ee2b4f8fab52a0048ca7334d7024eef48e2cb9407e3497bb7cab7fa7" ++checksum = "cd3c25631629d034ce7cd9940adc9d45762d46de2b0f57193c4443b92c6d4d40" + dependencies = [ + "aws-lc-rs", + "log", + "once_cell", + "ring", + "rustls-pki-types", +- "rustls-webpki 0.103.8", ++ "rustls-webpki 0.103.7", + "subtle", + "zeroize", + ] +@@ -7546,9 +7545,9 @@ dependencies = [ + + [[package]] + name = "rustls-native-certs" +-version = "0.8.2" ++version = "0.8.1" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "9980d917ebb0c0536119ba501e90834767bffc3d60641457fd84a1f3fd337923" ++checksum = "7fcff2dd52b58a8d98a70243663a0d234c4e2b79235637849d15913394a247d3" + dependencies = [ + "openssl-probe", + "rustls-pki-types", +@@ -7576,9 +7575,9 @@ dependencies = [ + + [[package]] + name = "rustls-pki-types" +-version = "1.13.0" ++version = "1.12.0" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "94182ad936a0c91c324cd46c6511b9510ed16af436d7b5bab34beab0afd55f7a" ++checksum = "229a4a4c221013e7e1f1a043678c5cc39fe5171437c88fb47151a21e6f5b5c79" + dependencies = [ + "web-time", + "zeroize", +@@ -7596,9 +7595,9 @@ dependencies = [ + + [[package]] + name = "rustls-webpki" +-version = "0.103.8" ++version = "0.103.7" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "2ffdfa2f5286e2247234e03f680868ac2815974dc39e00ea15adc445d0aafe52" ++checksum = "e10b3f4191e8a80e6b43eebabfac91e5dcecebb27a71f04e820c47ec41d314bf" + dependencies = [ + "aws-lc-rs", + "ring", +@@ -7722,7 +7721,7 @@ dependencies = [ + "proc-macro2", + "quote", + "serde_derive_internals", +- "syn 2.0.108", ++ "syn 2.0.106", + ] + + [[package]] +@@ -7761,7 +7760,7 @@ checksum = "22f968c5ea23d555e670b449c1c5e7b2fc399fdaec1d304a17cd48e288abc107" + dependencies = [ + "proc-macro2", + "quote", +- "syn 2.0.108", ++ "syn 2.0.106", + ] + + [[package]] +@@ -7784,7 +7783,7 @@ version = "2.11.1" + source = "registry+https://github.com/rust-lang/crates.io-index" + checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" + dependencies = [ +- "bitflags 2.10.0", ++ "bitflags 2.9.4", + "core-foundation 0.9.4", + "core-foundation-sys", + "libc", +@@ -7797,7 +7796,7 @@ version = "3.5.1" + source = "registry+https://github.com/rust-lang/crates.io-index" + checksum = "b3297343eaf830f66ede390ea39da1d462b6b0c1b000f420d0a83f898bbbe6ef" + dependencies = [ +- "bitflags 2.10.0", ++ "bitflags 2.9.4", + "core-foundation 0.10.1", + "core-foundation-sys", + "libc", +@@ -7850,7 +7849,7 @@ checksum = "48b85e25e8a1fc13928885e8bf13abe8a09e15c46993aed05d6405f7755d6e20" + dependencies = [ + "httpdate", + "reqwest", +- "rustls 0.23.34", ++ "rustls 0.23.32", + "sentry-backtrace", + "sentry-contexts", + "sentry-core", +@@ -7938,7 +7937,7 @@ version = "0.45.0" + source = "registry+https://github.com/rust-lang/crates.io-index" + checksum = "428f780866a613142dcc81b7f8551ae4d1c056f4df22b6d7ddd9154a9974eb03" + dependencies = [ +- "bitflags 2.10.0", ++ "bitflags 2.9.4", + "sentry-backtrace", + "sentry-core", + "tracing-core", +@@ -8033,7 +8032,7 @@ checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" + dependencies = [ + "proc-macro2", + "quote", +- "syn 2.0.108", ++ "syn 2.0.106", + ] + + [[package]] +@@ -8044,7 +8043,7 @@ checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" + dependencies = [ + "proc-macro2", + "quote", +- "syn 2.0.108", ++ "syn 2.0.106", + ] + + [[package]] +@@ -8121,7 +8120,7 @@ checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" + dependencies = [ + "proc-macro2", + "quote", +- "syn 2.0.108", ++ "syn 2.0.106", + ] + + [[package]] +@@ -8151,7 +8150,7 @@ dependencies = [ + "proc-macro2", + "quote", + "serde", +- "syn 2.0.108", ++ "syn 2.0.106", + ] + + [[package]] +@@ -8168,15 +8167,15 @@ dependencies = [ + + [[package]] + name = "serde_with" +-version = "3.15.1" ++version = "3.15.0" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "aa66c845eee442168b2c8134fec70ac50dc20e760769c8ba0ad1319ca1959b04" ++checksum = "6093cd8c01b25262b84927e0f7151692158fab02d961e04c979d3903eba7ecc5" + dependencies = [ + "base64 0.22.1", + "chrono", + "hex", + "indexmap 1.9.3", +- "indexmap 2.12.0", ++ "indexmap 2.11.4", + "schemars 0.9.0", + "schemars 1.0.4", + "serde_core", +@@ -8187,14 +8186,14 @@ dependencies = [ + + [[package]] + name = "serde_with_macros" +-version = "3.15.1" ++version = "3.15.0" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "b91a903660542fced4e99881aa481bdbaec1634568ee02e0b8bd57c64cb38955" ++checksum = "a7e6c180db0816026a61afa1cff5344fb7ebded7e4d3062772179f2501481c27" + dependencies = [ + "darling 0.21.3", + "proc-macro2", + "quote", +- "syn 2.0.108", ++ "syn 2.0.106", + ] + + [[package]] +@@ -8216,7 +8215,7 @@ checksum = "772ee033c0916d670af7860b6e1ef7d658a4629a6d0b4c8c3e67f09b3765b75d" + dependencies = [ + "proc-macro2", + "quote", +- "syn 2.0.108", ++ "syn 2.0.106", + ] + + [[package]] +@@ -8487,13 +8486,13 @@ dependencies = [ + "futures-util", + "hashbrown 0.15.5", + "hashlink", +- "indexmap 2.12.0", ++ "indexmap 2.11.4", + "log", + "memchr", + "once_cell", + "percent-encoding", + "rust_decimal", +- "rustls 0.23.34", ++ "rustls 0.23.32", + "serde", + "serde_json", + "sha2", +@@ -8517,7 +8516,7 @@ dependencies = [ + "quote", + "sqlx-core", + "sqlx-macros-core", +- "syn 2.0.108", ++ "syn 2.0.106", + ] + + [[package]] +@@ -8540,7 +8539,7 @@ dependencies = [ + "sqlx-mysql", + "sqlx-postgres", + "sqlx-sqlite", +- "syn 2.0.108", ++ "syn 2.0.106", + "tokio", + "url", + ] +@@ -8553,7 +8552,7 @@ checksum = "aa003f0038df784eb8fecbbac13affe3da23b45194bd57dba231c8f48199c526" + dependencies = [ + "atoi", + "base64 0.22.1", +- "bitflags 2.10.0", ++ "bitflags 2.9.4", + "byteorder", + "bytes", + "chrono", +@@ -8598,7 +8597,7 @@ checksum = "db58fcd5a53cf07c184b154801ff91347e4c30d17a3562a635ff028ad5deda46" + dependencies = [ + "atoi", + "base64 0.22.1", +- "bitflags 2.10.0", ++ "bitflags 2.9.4", + "byteorder", + "chrono", + "crc", +@@ -8744,7 +8743,7 @@ dependencies = [ + "proc-macro2", + "quote", + "structmeta-derive", +- "syn 2.0.108", ++ "syn 2.0.106", + ] + + [[package]] +@@ -8755,7 +8754,7 @@ checksum = "152a0b65a590ff6c3da95cabe2353ee04e6167c896b28e3b14478c2636c922fc" + dependencies = [ + "proc-macro2", + "quote", +- "syn 2.0.108", ++ "syn 2.0.106", + ] + + [[package]] +@@ -8788,9 +8787,9 @@ dependencies = [ + + [[package]] + name = "syn" +-version = "2.0.108" ++version = "2.0.106" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "da58917d35242480a05c2897064da0a80589a2a0476c9a3f2fdc83b53502e917" ++checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6" + dependencies = [ + "proc-macro2", + "quote", +@@ -8814,7 +8813,7 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" + dependencies = [ + "proc-macro2", + "quote", +- "syn 2.0.108", ++ "syn 2.0.106", + ] + + [[package]] +@@ -8846,7 +8845,7 @@ version = "0.6.1" + source = "registry+https://github.com/rust-lang/crates.io-index" + checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" + dependencies = [ +- "bitflags 2.10.0", ++ "bitflags 2.9.4", + "core-foundation 0.9.4", + "system-configuration-sys", + ] +@@ -8882,11 +8881,11 @@ checksum = "7b2093cf4c8eb1e67749a6762251bc9cd836b6fc171623bd0a9d324d37af2417" + + [[package]] + name = "tao" +-version = "0.34.5" ++version = "0.34.3" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "f3a753bdc39c07b192151523a3f77cd0394aa75413802c883a0f6f6a0e5ee2e7" ++checksum = "959469667dbcea91e5485fc48ba7dd6023face91bb0f1a14681a70f99847c3f7" + dependencies = [ +- "bitflags 2.10.0", ++ "bitflags 2.9.4", + "block2 0.6.2", + "core-foundation 0.10.1", + "core-graphics", +@@ -8928,7 +8927,7 @@ checksum = "f4e16beb8b2ac17db28eab8bca40e62dbfbb34c0fcdc6d9826b11b7b5d047dfd" + dependencies = [ + "proc-macro2", + "quote", +- "syn 2.0.108", ++ "syn 2.0.106", + ] + + [[package]] +@@ -8956,9 +8955,9 @@ checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" + + [[package]] + name = "tauri" +-version = "2.9.2" ++version = "2.8.5" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "8bceb52453e507c505b330afe3398510e87f428ea42b6e76ecb6bd63b15965b5" ++checksum = "d4d1d3b3dc4c101ac989fd7db77e045cc6d91a25349cd410455cb5c57d510c1c" + dependencies = [ + "anyhow", + "bytes", +@@ -8966,7 +8965,7 @@ dependencies = [ + "dirs", + "dunce", + "embed_plist", +- "getrandom 0.3.4", ++ "getrandom 0.3.3", + "glob", + "gtk", + "heck 0.5.0", +@@ -9000,6 +8999,7 @@ dependencies = [ + "tokio", + "tray-icon", + "url", ++ "urlpattern", + "webkit2gtk", + "webview2-com", + "window-vibrancy", +@@ -9008,9 +9008,9 @@ dependencies = [ + + [[package]] + name = "tauri-build" +-version = "2.5.1" ++version = "2.4.1" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "a924b6c50fe83193f0f8b14072afa7c25b7a72752a2a73d9549b463f5fe91a38" ++checksum = "9c432ccc9ff661803dab74c6cd78de11026a578a9307610bbc39d3c55be7943f" + dependencies = [ + "anyhow", + "cargo_toml", +@@ -9032,9 +9032,9 @@ dependencies = [ + + [[package]] + name = "tauri-codegen" +-version = "2.5.0" ++version = "2.4.0" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "6c1fe64c74cc40f90848281a90058a6db931eb400b60205840e09801ee30f190" ++checksum = "1ab3a62cf2e6253936a8b267c2e95839674e7439f104fa96ad0025e149d54d8a" + dependencies = [ + "base64 0.22.1", + "brotli", +@@ -9048,7 +9048,7 @@ dependencies = [ + "serde", + "serde_json", + "sha2", +- "syn 2.0.108", ++ "syn 2.0.106", + "tauri-utils", + "thiserror 2.0.17", + "time", +@@ -9059,23 +9059,23 @@ dependencies = [ + + [[package]] + name = "tauri-macros" +-version = "2.5.0" ++version = "2.4.0" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "260c5d2eb036b76206b9fca20b7be3614cfd21046c5396f7959e0e64a4b07f2f" ++checksum = "4368ea8094e7045217edb690f493b55b30caf9f3e61f79b4c24b6db91f07995e" + dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", +- "syn 2.0.108", ++ "syn 2.0.106", + "tauri-codegen", + "tauri-utils", + ] + + [[package]] + name = "tauri-plugin" +-version = "2.5.1" ++version = "2.4.0" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "076c78a474a7247c90cad0b6e87e593c4c620ed4efdb79cbe0214f0021f6c39d" ++checksum = "9946a3cede302eac0c6eb6c6070ac47b1768e326092d32efbb91f21ed58d978f" + dependencies = [ + "anyhow", + "glob", +@@ -9090,9 +9090,9 @@ dependencies = [ + + [[package]] + name = "tauri-plugin-deep-link" +-version = "2.4.5" ++version = "2.4.3" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "6e82759f7c7d51de3cbde51c04b3f2332de52436ed84541182cd8944b04e9e73" ++checksum = "cd67112fb1131834c2a7398ffcba520dbbf62c17de3b10329acd1a3554b1a9bb" + dependencies = [ + "dunce", + "plist", +@@ -9111,9 +9111,9 @@ dependencies = [ + + [[package]] + name = "tauri-plugin-dialog" +-version = "2.4.2" ++version = "2.4.0" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "313f8138692ddc4a2127c4c9607d616a46f5c042e77b3722450866da0aad2f19" ++checksum = "0beee42a4002bc695550599b011728d9dfabf82f767f134754ed6655e434824e" + dependencies = [ + "log", + "raw-window-handle", +@@ -9129,9 +9129,9 @@ dependencies = [ + + [[package]] + name = "tauri-plugin-fs" +-version = "2.4.4" ++version = "2.4.2" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "47df422695255ecbe7bac7012440eddaeefd026656171eac9559f5243d3230d9" ++checksum = "315784ec4be45e90a987687bae7235e6be3d6e9e350d2b75c16b8a4bf22c1db7" + dependencies = [ + "anyhow", + "dunce", +@@ -9151,9 +9151,9 @@ dependencies = [ + + [[package]] + name = "tauri-plugin-http" +-version = "2.5.4" ++version = "2.5.2" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "c00685aceab12643cf024f712ab0448ba8fcadf86f2391d49d2e5aa732aacc70" ++checksum = "938a3d7051c9a82b431e3a0f3468f85715b3442b3c3a3913095e9fa509e2652c" + dependencies = [ + "bytes", + "cookie_store", +@@ -9175,9 +9175,9 @@ dependencies = [ + + [[package]] + name = "tauri-plugin-opener" +-version = "2.5.2" ++version = "2.5.0" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "c26b72571d25dee25667940027114e60f569fc3974f8cefbe50c2cbc5fd65e3b" ++checksum = "786156aa8e89e03d271fbd3fe642207da8e65f3c961baa9e2930f332bf80a1f5" + dependencies = [ + "dunce", + "glob", +@@ -9197,9 +9197,9 @@ dependencies = [ + + [[package]] + name = "tauri-plugin-os" +-version = "2.3.2" ++version = "2.3.1" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "d8f08346c8deb39e96f86973da0e2d76cbb933d7ac9b750f6dc4daf955a6f997" ++checksum = "77a1c77ebf6f20417ab2a74e8c310820ba52151406d0c80fbcea7df232e3f6ba" + dependencies = [ + "gethostname", + "log", +@@ -9215,9 +9215,9 @@ dependencies = [ + + [[package]] + name = "tauri-plugin-single-instance" +-version = "2.3.6" ++version = "2.3.4" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "dd707f8c86b4e3004e2c141fa24351f1909ba40ce1b8437e30d5ed5277dd3710" ++checksum = "fb9cac815bf11c4a80fb498666bcdad66d65b89e3ae24669e47806febb76389c" + dependencies = [ + "serde", + "serde_json", +@@ -9262,11 +9262,11 @@ dependencies = [ + + [[package]] + name = "tauri-plugin-window-state" +-version = "2.4.1" ++version = "2.4.0" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "73736611e14142408d15353e21e3cca2f12a3cfb523ad0ce85999b6d2ef1a704" ++checksum = "2d5f6fe3291bfa609c7e0b0ee3bedac294d94c7018934086ce782c1d0f2a468e" + dependencies = [ +- "bitflags 2.10.0", ++ "bitflags 2.9.4", + "log", + "serde", + "serde_json", +@@ -9277,9 +9277,9 @@ dependencies = [ + + [[package]] + name = "tauri-runtime" +-version = "2.9.1" ++version = "2.8.0" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "9368f09358496f2229313fccb37682ad116b7f46fa76981efe116994a0628926" ++checksum = "d4cfc9ad45b487d3fded5a4731a567872a4812e9552e3964161b08edabf93846" + dependencies = [ + "cookie 0.18.1", + "dpi", +@@ -9302,9 +9302,9 @@ dependencies = [ + + [[package]] + name = "tauri-runtime-wry" +-version = "2.9.1" ++version = "2.8.1" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "929f5df216f5c02a9e894554401bcdab6eec3e39ec6a4a7731c7067fc8688a93" ++checksum = "c1fe9d48bd122ff002064e88cfcd7027090d789c4302714e68fcccba0f4b7807" + dependencies = [ + "gtk", + "http 1.3.1", +@@ -9329,9 +9329,9 @@ dependencies = [ + + [[package]] + name = "tauri-utils" +-version = "2.8.0" ++version = "2.7.0" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "f6b8bbe426abdbf52d050e52ed693130dbd68375b9ad82a3fb17efb4c8d85673" ++checksum = "41a3852fdf9a4f8fbeaa63dc3e9a85284dd6ef7200751f0bd66ceee30c93f212" + dependencies = [ + "anyhow", + "brotli", +@@ -9382,7 +9382,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" + checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16" + dependencies = [ + "fastrand 2.3.0", +- "getrandom 0.3.4", ++ "getrandom 0.3.3", + "once_cell", + "rustix 1.1.2", + "windows-sys 0.61.2", +@@ -9558,7 +9558,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" + dependencies = [ + "proc-macro2", + "quote", +- "syn 2.0.108", ++ "syn 2.0.106", + ] + + [[package]] +@@ -9569,7 +9569,7 @@ checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" + dependencies = [ + "proc-macro2", + "quote", +- "syn 2.0.108", ++ "syn 2.0.106", + ] + + [[package]] +@@ -9589,7 +9589,7 @@ checksum = "af9605de7fee8d9551863fd692cce7637f548dbd9db9180fcc07ccc6d26c336f" + dependencies = [ + "fax", + "flate2", +- "half 2.7.1", ++ "half 2.7.0", + "quick-error", + "weezl", + "zune-jpeg", +@@ -9597,9 +9597,9 @@ dependencies = [ + + [[package]] + name = "tikv-jemalloc-ctl" +-version = "0.6.1" ++version = "0.6.0" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "661f1f6a57b3a36dc9174a2c10f19513b4866816e13425d3e418b11cc37bc24c" ++checksum = "f21f216790c8df74ce3ab25b534e0718da5a1916719771d3fec23315c99e468b" + dependencies = [ + "libc", + "paste", +@@ -9608,9 +9608,9 @@ dependencies = [ + + [[package]] + name = "tikv-jemalloc-sys" +-version = "0.6.1+5.3.0-1-ge13ca993e8ccb9ba9847cc330696e02839f328f7" ++version = "0.6.0+5.3.0-1-ge13ca993e8ccb9ba9847cc330696e02839f328f7" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "cd8aa5b2ab86a2cefa406d889139c162cbb230092f7d1d7cbc1716405d852a3b" ++checksum = "cd3c60906412afa9c2b5b5a48ca6a5abe5736aec9eb48ad05037a677e52e4e2d" + dependencies = [ + "cc", + "libc", +@@ -9618,9 +9618,9 @@ dependencies = [ + + [[package]] + name = "tikv-jemallocator" +-version = "0.6.1" ++version = "0.6.0" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "0359b4327f954e0567e69fb191cf1436617748813819c94b8cd4a431422d053a" ++checksum = "4cec5ff18518d81584f477e9bfdf957f5bb0979b0bac3af4ca30b5b3ae2d2865" + dependencies = [ + "libc", + "tikv-jemalloc-sys", +@@ -9668,9 +9668,9 @@ dependencies = [ + + [[package]] + name = "tinystr" +-version = "0.8.2" ++version = "0.8.1" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "42d3e9c45c09de15d06dd8acf5f4e0e399e85927b7f00711024eb7ae10fa4869" ++checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b" + dependencies = [ + "displaydoc", + "zerovec", +@@ -9693,31 +9693,34 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + + [[package]] + name = "tokio" +-version = "1.48.0" ++version = "1.47.1" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "ff360e02eab121e0bc37a2d3b4d4dc622e6eda3a8e5253d5435ecf5bd4c68408" ++checksum = "89e49afdadebb872d3145a5638b59eb0691ea23e46ca484037cfab3b76b95038" + dependencies = [ ++ "backtrace", + "bytes", ++ "io-uring", + "libc", + "mio", + "parking_lot", + "pin-project-lite", + "signal-hook-registry", ++ "slab", + "socket2 0.6.1", + "tokio-macros", + "tracing", +- "windows-sys 0.61.2", ++ "windows-sys 0.59.0", + ] + + [[package]] + name = "tokio-macros" +-version = "2.6.0" ++version = "2.5.0" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" ++checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" + dependencies = [ + "proc-macro2", + "quote", +- "syn 2.0.108", ++ "syn 2.0.106", + ] + + [[package]] +@@ -9736,7 +9739,7 @@ version = "0.26.4" + source = "registry+https://github.com/rust-lang/crates.io-index" + checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" + dependencies = [ +- "rustls 0.23.34", ++ "rustls 0.23.32", + "tokio", + ] + +@@ -9784,7 +9787,7 @@ version = "0.9.8" + source = "registry+https://github.com/rust-lang/crates.io-index" + checksum = "f0dc8b1fb61449e27716ec0e1bdf0f6b8f3e8f6b05391e8497b8b6d7804ea6d8" + dependencies = [ +- "indexmap 2.12.0", ++ "indexmap 2.11.4", + "serde_core", + "serde_spanned 1.0.3", + "toml_datetime 0.7.3", +@@ -9817,7 +9820,7 @@ version = "0.19.15" + source = "registry+https://github.com/rust-lang/crates.io-index" + checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" + dependencies = [ +- "indexmap 2.12.0", ++ "indexmap 2.11.4", + "toml_datetime 0.6.3", + "winnow 0.5.40", + ] +@@ -9828,7 +9831,7 @@ version = "0.20.2" + source = "registry+https://github.com/rust-lang/crates.io-index" + checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338" + dependencies = [ +- "indexmap 2.12.0", ++ "indexmap 2.11.4", + "serde", + "serde_spanned 0.6.9", + "toml_datetime 0.6.3", +@@ -9841,7 +9844,7 @@ version = "0.23.7" + source = "registry+https://github.com/rust-lang/crates.io-index" + checksum = "6485ef6d0d9b5d0ec17244ff7eb05310113c3f316f2d14200d4de56b3cb98f8d" + dependencies = [ +- "indexmap 2.12.0", ++ "indexmap 2.11.4", + "toml_datetime 0.7.3", + "toml_parser", + "winnow 0.7.13", +@@ -9947,7 +9950,7 @@ version = "0.6.6" + source = "registry+https://github.com/rust-lang/crates.io-index" + checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2" + dependencies = [ +- "bitflags 2.10.0", ++ "bitflags 2.9.4", + "bytes", + "futures-util", + "http 1.3.1", +@@ -10004,7 +10007,7 @@ checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" + dependencies = [ + "proc-macro2", + "quote", +- "syn 2.0.108", ++ "syn 2.0.106", + ] + + [[package]] +@@ -10075,9 +10078,9 @@ dependencies = [ + + [[package]] + name = "tray-icon" +-version = "0.21.2" ++version = "0.21.1" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "e3d5572781bee8e3f994d7467084e1b1fd7a93ce66bd480f8156ba89dee55a2b" ++checksum = "a0d92153331e7d02ec09137538996a7786fe679c629c279e82a6be762b7e6fe2" + dependencies = [ + "crossbeam-channel", + "dirs", +@@ -10092,7 +10095,7 @@ dependencies = [ + "png 0.17.16", + "serde", + "thiserror 2.0.17", +- "windows-sys 0.60.2", ++ "windows-sys 0.59.0", + ] + + [[package]] +@@ -10113,7 +10116,7 @@ dependencies = [ + "httparse", + "log", + "rand 0.9.2", +- "rustls 0.23.34", ++ "rustls 0.23.32", + "rustls-pki-types", + "sha1", + "thiserror 2.0.17", +@@ -10213,24 +10216,24 @@ checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5" + + [[package]] + name = "unicode-ident" +-version = "1.0.22" ++version = "1.0.19" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5" ++checksum = "f63a545481291138910575129486daeaf8ac54aee4387fe7906919f7830c7d9d" + + [[package]] + name = "unicode-normalization" +-version = "0.1.25" ++version = "0.1.24" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "5fd4f6878c9cb28d874b009da9e8d183b5abc80117c40bbd187a1fde336be6e8" ++checksum = "5033c97c4262335cded6d6fc3e5c18ab755e1a3dc96376350f3d8e9f009ad956" + dependencies = [ + "tinyvec", + ] + + [[package]] + name = "unicode-properties" +-version = "0.1.4" ++version = "0.1.3" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "7df058c713841ad818f1dc5d3fd88063241cc61f49f5fbea4b951e8cf5a8d71d" ++checksum = "e70f2a8b45122e719eb623c01822704c4e0907e7e426a05927e1a1cfff5b75d0" + + [[package]] + name = "unicode-segmentation" +@@ -10277,7 +10280,7 @@ dependencies = [ + "base64 0.22.1", + "log", + "percent-encoding", +- "rustls 0.23.34", ++ "rustls 0.23.32", + "rustls-pemfile 2.2.0", + "rustls-pki-types", + "ureq-proto", +@@ -10351,7 +10354,7 @@ version = "5.4.0" + source = "registry+https://github.com/rust-lang/crates.io-index" + checksum = "2fcc29c80c21c31608227e0912b2d7fddba57ad76b606890627ba8ee7964e993" + dependencies = [ +- "indexmap 2.12.0", ++ "indexmap 2.11.4", + "serde", + "serde_json", + "utoipa-gen", +@@ -10377,7 +10380,7 @@ dependencies = [ + "proc-macro2", + "quote", + "regex", +- "syn 2.0.108", ++ "syn 2.0.106", + ] + + [[package]] +@@ -10420,7 +10423,7 @@ version = "1.18.1" + source = "registry+https://github.com/rust-lang/crates.io-index" + checksum = "2f87b8aa10b915a06587d0dec516c282ff295b475d94abf425d62b57710070a2" + dependencies = [ +- "getrandom 0.3.4", ++ "getrandom 0.3.3", + "js-sys", + "rand 0.9.2", + "serde", +@@ -10471,7 +10474,7 @@ dependencies = [ + "proc-macro-error2", + "proc-macro2", + "quote", +- "syn 2.0.108", ++ "syn 2.0.106", + ] + + [[package]] +@@ -10488,9 +10491,9 @@ checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + + [[package]] + name = "version-compare" +-version = "0.2.1" ++version = "0.2.0" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "03c2856837ef78f57382f06b2b8563a2f512f7185d732608fd9176cb3b8edf0e" ++checksum = "852e951cb7832cb45cb1169900d19760cfa39b82bc0ea9c0e5a14ae88411c98b" + + [[package]] + name = "version_check" +@@ -10571,6 +10574,15 @@ version = "0.11.1+wasi-snapshot-preview1" + source = "registry+https://github.com/rust-lang/crates.io-index" + checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" + ++[[package]] ++name = "wasi" ++version = "0.14.7+wasi-0.2.4" ++source = "registry+https://github.com/rust-lang/crates.io-index" ++checksum = "883478de20367e224c0090af9cf5f9fa85bed63a95c1abf3afc5c083ebc06e8c" ++dependencies = [ ++ "wasip2", ++] ++ + [[package]] + name = "wasip2" + version = "1.0.1+wasi-0.2.4" +@@ -10588,9 +10600,9 @@ checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" + + [[package]] + name = "wasm-bindgen" +-version = "0.2.105" ++version = "0.2.104" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "da95793dfc411fbbd93f5be7715b0578ec61fe87cb1a42b12eb625caa5c5ea60" ++checksum = "c1da10c01ae9f1ae40cbfac0bac3b1e724b320abfcf52229f80b547c0d250e2d" + dependencies = [ + "cfg-if", + "once_cell", +@@ -10599,11 +10611,25 @@ dependencies = [ + "wasm-bindgen-shared", + ] + ++[[package]] ++name = "wasm-bindgen-backend" ++version = "0.2.104" ++source = "registry+https://github.com/rust-lang/crates.io-index" ++checksum = "671c9a5a66f49d8a47345ab942e2cb93c7d1d0339065d4f8139c486121b43b19" ++dependencies = [ ++ "bumpalo", ++ "log", ++ "proc-macro2", ++ "quote", ++ "syn 2.0.106", ++ "wasm-bindgen-shared", ++] ++ + [[package]] + name = "wasm-bindgen-futures" +-version = "0.4.55" ++version = "0.4.54" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "551f88106c6d5e7ccc7cd9a16f312dd3b5d36ea8b4954304657d5dfba115d4a0" ++checksum = "7e038d41e478cc73bae0ff9b36c60cff1c98b8f38f8d7e8061e79ee63608ac5c" + dependencies = [ + "cfg-if", + "js-sys", +@@ -10614,9 +10640,9 @@ dependencies = [ + + [[package]] + name = "wasm-bindgen-macro" +-version = "0.2.105" ++version = "0.2.104" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "04264334509e04a7bf8690f2384ef5265f05143a4bff3889ab7a3269adab59c2" ++checksum = "7ca60477e4c59f5f2986c50191cd972e3a50d8a95603bc9434501cf156a9a119" + dependencies = [ + "quote", + "wasm-bindgen-macro-support", +@@ -10624,22 +10650,22 @@ dependencies = [ + + [[package]] + name = "wasm-bindgen-macro-support" +-version = "0.2.105" ++version = "0.2.104" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "420bc339d9f322e562942d52e115d57e950d12d88983a14c79b86859ee6c7ebc" ++checksum = "9f07d2f20d4da7b26400c9f4a0511e6e0345b040694e8a75bd41d578fa4421d7" + dependencies = [ +- "bumpalo", + "proc-macro2", + "quote", +- "syn 2.0.108", ++ "syn 2.0.106", ++ "wasm-bindgen-backend", + "wasm-bindgen-shared", + ] + + [[package]] + name = "wasm-bindgen-shared" +-version = "0.2.105" ++version = "0.2.104" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "76f218a38c84bcb33c25ec7059b07847d465ce0e0a76b995e134a45adcb6af76" ++checksum = "bad67dc8b2a1a6e5448428adec4c3e84c43e561d8c9ee8a9e5aabeb193ec41d1" + dependencies = [ + "unicode-ident", + ] +@@ -10677,7 +10703,7 @@ version = "0.31.11" + source = "registry+https://github.com/rust-lang/crates.io-index" + checksum = "c66a47e840dc20793f2264eb4b3e4ecb4b75d91c0dd4af04b456128e0bdd449d" + dependencies = [ +- "bitflags 2.10.0", ++ "bitflags 2.9.4", + "rustix 1.1.2", + "wayland-backend", + "wayland-scanner", +@@ -10689,7 +10715,7 @@ version = "0.32.9" + source = "registry+https://github.com/rust-lang/crates.io-index" + checksum = "efa790ed75fbfd71283bd2521a1cfdc022aabcc28bdcff00851f9e4ae88d9901" + dependencies = [ +- "bitflags 2.10.0", ++ "bitflags 2.9.4", + "wayland-backend", + "wayland-client", + "wayland-scanner", +@@ -10719,9 +10745,9 @@ dependencies = [ + + [[package]] + name = "web-sys" +-version = "0.3.82" ++version = "0.3.81" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "3a1f95c0d03a47f4ae1f7a64643a6bb97465d9b740f0fa8f90ea33915c99a9a1" ++checksum = "9367c417a924a74cae129e6a2ae3b47fabb1f8995595ab474029da749a8be120" + dependencies = [ + "js-sys", + "wasm-bindgen", +@@ -10830,7 +10856,7 @@ checksum = "1d228f15bba3b9d56dde8bddbee66fa24545bd17b48d5128ccf4a8742b18e431" + dependencies = [ + "proc-macro2", + "quote", +- "syn 2.0.108", ++ "syn 2.0.106", + ] + + [[package]] +@@ -11002,7 +11028,7 @@ checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" + dependencies = [ + "proc-macro2", + "quote", +- "syn 2.0.108", ++ "syn 2.0.106", + ] + + [[package]] +@@ -11013,7 +11039,7 @@ checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" + dependencies = [ + "proc-macro2", + "quote", +- "syn 2.0.108", ++ "syn 2.0.106", + ] + + [[package]] +@@ -11462,15 +11488,15 @@ dependencies = [ + + [[package]] + name = "writeable" +-version = "0.6.2" ++version = "0.6.1" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9" ++checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" + + [[package]] + name = "wry" +-version = "0.53.5" ++version = "0.53.4" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "728b7d4c8ec8d81cab295e0b5b8a4c263c0d41a785fb8f8c4df284e5411140a2" ++checksum = "6d78ec082b80fa088569a970d043bb3050abaabf4454101d44514ee8d9a8c9f6" + dependencies = [ + "base64 0.22.1", + "block2 0.6.2", +@@ -11553,9 +11579,9 @@ dependencies = [ + + [[package]] + name = "xml-rs" +-version = "0.8.28" ++version = "0.8.27" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "3ae8337f8a065cfc972643663ea4279e04e7256de865aa66fe25cec5fb912d3f" ++checksum = "6fd8403733700263c6eb89f192880191f1b83e332f7a20371ddcf421c4a337c7" + + [[package]] + name = "yaserde" +@@ -11580,7 +11606,7 @@ dependencies = [ + "quote", + "serde", + "serde_tokenstream", +- "syn 2.0.108", ++ "syn 2.0.106", + "xml-rs", + ] + +@@ -11597,10 +11623,11 @@ dependencies = [ + + [[package]] + name = "yoke" +-version = "0.8.1" ++version = "0.8.0" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "72d6e5c6afb84d73944e5cedb052c4680d5657337201555f9f2a16b7406d4954" ++checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc" + dependencies = [ ++ "serde", + "stable_deref_trait", + "yoke-derive", + "zerofrom", +@@ -11608,21 +11635,21 @@ dependencies = [ + + [[package]] + name = "yoke-derive" +-version = "0.8.1" ++version = "0.8.0" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d" ++checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" + dependencies = [ + "proc-macro2", + "quote", +- "syn 2.0.108", ++ "syn 2.0.106", + "synstructure", + ] + + [[package]] + name = "zbus" +-version = "5.12.0" ++version = "5.11.0" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "b622b18155f7a93d1cd2dc8c01d2d6a44e08fb9ebb7b3f9e6ed101488bad6c91" ++checksum = "2d07e46d035fb8e375b2ce63ba4e4ff90a7f73cf2ffb0138b29e1158d2eaadf7" + dependencies = [ + "async-broadcast", + "async-executor", +@@ -11645,8 +11672,7 @@ dependencies = [ + "tokio", + "tracing", + "uds_windows", +- "uuid 1.18.1", +- "windows-sys 0.61.2", ++ "windows-sys 0.60.2", + "winnow 0.7.13", + "zbus_macros", + "zbus_names", +@@ -11655,14 +11681,14 @@ dependencies = [ + + [[package]] + name = "zbus_macros" +-version = "5.12.0" ++version = "5.11.0" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "1cdb94821ca8a87ca9c298b5d1cbd80e2a8b67115d99f6e4551ac49e42b6a314" ++checksum = "57e797a9c847ed3ccc5b6254e8bcce056494b375b511b3d6edcec0aeb4defaca" + dependencies = [ + "proc-macro-crate 3.4.0", + "proc-macro2", + "quote", +- "syn 2.0.108", ++ "syn 2.0.106", + "zbus_names", + "zvariant", + "zvariant_utils", +@@ -11697,7 +11723,7 @@ checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" + dependencies = [ + "proc-macro2", + "quote", +- "syn 2.0.108", ++ "syn 2.0.106", + ] + + [[package]] +@@ -11717,7 +11743,7 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" + dependencies = [ + "proc-macro2", + "quote", +- "syn 2.0.108", ++ "syn 2.0.106", + "synstructure", + ] + +@@ -11729,9 +11755,9 @@ checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" + + [[package]] + name = "zerotrie" +-version = "0.2.3" ++version = "0.2.2" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "2a59c17a5562d507e4b54960e8569ebee33bee890c70aa3fe7b97e85a9fd7851" ++checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595" + dependencies = [ + "displaydoc", + "yoke", +@@ -11740,9 +11766,9 @@ dependencies = [ + + [[package]] + name = "zerovec" +-version = "0.11.5" ++version = "0.11.4" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "6c28719294829477f525be0186d13efa9a3c602f7ec202ca9e353d310fb9a002" ++checksum = "e7aa2bd55086f1ab526693ecbe444205da57e25f4489879da80635a46d90e73b" + dependencies = [ + "yoke", + "zerofrom", +@@ -11751,13 +11777,13 @@ dependencies = [ + + [[package]] + name = "zerovec-derive" +-version = "0.11.2" ++version = "0.11.1" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3" ++checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" + dependencies = [ + "proc-macro2", + "quote", +- "syn 2.0.108", ++ "syn 2.0.106", + ] + + [[package]] +@@ -11769,7 +11795,7 @@ dependencies = [ + "arbitrary", + "crc32fast", + "flate2", +- "indexmap 2.12.0", ++ "indexmap 2.11.4", + "memchr", + "zopfli", + ] +@@ -11782,7 +11808,7 @@ checksum = "caa8cd6af31c3b31c6631b8f483848b91589021b28fffe50adada48d4f4d2ed1" + dependencies = [ + "arbitrary", + "crc32fast", +- "indexmap 2.12.0", ++ "indexmap 2.11.4", + "memchr", + ] + +@@ -11797,7 +11823,7 @@ dependencies = [ + "crc32fast", + "deflate64", + "flate2", +- "indexmap 2.12.0", ++ "indexmap 2.11.4", + "memchr", + "zopfli", + "zstd", +@@ -11811,9 +11837,9 @@ checksum = "2f06ae92f42f5e5c42443fd094f245eb656abf56dd7cce9b8b263236565e00f2" + + [[package]] + name = "zopfli" +-version = "0.8.3" ++version = "0.8.2" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "f05cd8797d63865425ff89b5c4a48804f35ba0ce8d125800027ad6017d2b5249" ++checksum = "edfc5ee405f504cd4984ecc6f14d02d55cfda60fa4b689434ef4102aae150cd7" + dependencies = [ + "bumpalo", + "crc32fast", +@@ -11875,9 +11901,9 @@ dependencies = [ + + [[package]] + name = "zvariant" +-version = "5.8.0" ++version = "5.7.0" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "2be61892e4f2b1772727be11630a62664a1826b62efa43a6fe7449521cb8744c" ++checksum = "999dd3be73c52b1fccd109a4a81e4fcd20fab1d3599c8121b38d04e1419498db" + dependencies = [ + "endi", + "enumflags2", +@@ -11890,14 +11916,14 @@ dependencies = [ + + [[package]] + name = "zvariant_derive" +-version = "5.8.0" ++version = "5.7.0" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "da58575a1b2b20766513b1ec59d8e2e68db2745379f961f86650655e862d2006" ++checksum = "6643fd0b26a46d226bd90d3f07c1b5321fe9bb7f04673cb37ac6d6883885b68e" + dependencies = [ + "proc-macro-crate 3.4.0", + "proc-macro2", + "quote", +- "syn 2.0.108", ++ "syn 2.0.106", + "zvariant_utils", + ] + +@@ -11910,7 +11936,7 @@ dependencies = [ + "proc-macro2", + "quote", + "serde", +- "syn 2.0.108", ++ "syn 2.0.106", + "winnow 0.7.13", + ] + +diff --git a/README.md b/README.md +index 6bd709c34..74def556e 100644 +--- a/README.md ++++ b/README.md +@@ -1,125 +1,39 @@ +-# 📘 Navigation ++# ![Modrinth Monorepo Cover](/.github/assets/monorepo_cover.png) + +-- [🔧 Install Instructions](#install-instructions) +-- [✨ Features](#features) +-- [🚀 Getting Started](#getting-started) +-- [⚠️ Disclaimer](#disclaimer) +-- [💰 Donate](#support-our-project-crypto-wallets) ++![Issues](https://img.shields.io/github/issues-raw/Modrinth/code?color=c78aff&label=issues&style=for-the-badge) ++![Pull Requests](https://img.shields.io/github/issues-pr-raw/Modrinth/code?color=c78aff&label=PRs&style=for-the-badge) ++![Contributors](https://img.shields.io/github/contributors/Modrinth/code?color=c78aff&label=contributors&style=for-the-badge) ++![Lines](https://img.shields.io/endpoint?url=https://ghloc.vercel.app/api/modrinth/code/badge?style=flat&logoColor=white&color=c78aff&style=for-the-badge) ++![Commit Activity](https://img.shields.io/github/commit-activity/m/Modrinth/code?color=c78aff&label=commits&style=for-the-badge) ++![Last Commit](https://img.shields.io/github/last-commit/Modrinth/code?color=c78aff&label=last%20commit&style=for-the-badge) + +-## Other languages +-> [Русский](readme/ru_ru/README.md) ++## Modrinth Monorepo + +-## Support channel +-> [Telegram](https://me.astralium.su/ref/telegram_channel) ++Welcome to the Modrinth Monorepo, the primary codebase for the Modrinth web interface and app. It contains ![Lines](https://img.shields.io/endpoint?url=https://ghloc.vercel.app/api/modrinth/olympus/badge?logoColor=white&color=black&label=) lines of code and has ![Contributors](https://img.shields.io/github/contributors/Modrinth/code?color=black&label=) contributors! + +---- ++If you're not a developer and you've stumbled upon this repository, you can access the web interface on the [Modrinth website](https://modrinth.com) and download the latest release of the app [here](https://modrinth.com/app). + +-# About Project ++## Development + +-## **AstralRinth • Empowering Your Minecraft Adventure** ++This repository contains two primary packages. For detailed development information, please refer to their respective READMEs: + +-Welcome to **AstralRinth (AR)** — a powerful fork of Modrinth, reimagined to enhance your Minecraft journey. Whether you're a GUI enthusiast or a developer building with Modrinth’s API, **Theseus Core** is your launchpad into a new era of Minecraft gameplay. ++- [Web Interface](apps/frontend/README.md) ++- [Desktop App](apps/app/README.md) + +-- *Recently, improved integration with the Git Astralium API has been added.* ++## Contributing + +-## **About the Software** ++We welcome contributions! Before submitting any contributions, please read our [contributing guidelines](https://docs.modrinth.com/contributing/getting-started/). + +-**AstralRinth** is a dedicated branch of the Theseus project, focused on **offline authentication**, offering you more flexibility and control. Play Minecraft without the need for constant online verification — a user-first approach to modern modded gaming. ++If you plan to fork this repository for your own purposes, please review our [copying guidelines](COPYING.md). + +-## **AR • Unlocking Minecraft's Boundless Horizon** ++## Security + +-This unique fork introduces a **free trial Minecraft experience**, bypassing license checks while maintaining rich functionality. Currently includes: ++If you discover a security vulnerability within our codebase, please follow our [responsible disclosure guidelines](https://modrinth.com/legal/security). + +---- ++## Support + +-# Install Instructions ++If you need help with the Modrinth web interface or app, please visit our [support page](https://support.modrinth.com). For general inquiries, you can also join our [Discord server](https://discord.modrinth.com). + +-To install the launcher: ++## License + +-1. Visit the [releases page](https://git.astralium.su/didirus/AstralRinth/releases) to download the correct version for your system. +-2. Run the downloaded file or extract and launch it, depending on the format. +- +-### Downloadable File Extensions +- +-| Extension | OS | Notes | +-| --------- | ------- | --------------------------------------------------------------------- | +-| `.msi` | Windows | Supported on all recent Windows versions | +-| `.dmg` | macOS | Works on Ventura, Sonoma, Sequoia _(may also support older versions)_ | +-| `.deb` | Linux | Basic support; compatibility may vary by distribution | +- +-### Installation Warnings +- +-Avoid using builds with these prefixes — they may be unstable or experimental: +- +-- `dev` +-- `nightly` +-- `dirty` +-- `dirty-dev` +-- `dirty-nightly` +-- `dirty_dev` +-- `dirty_nightly` +- +---- +- +-# Features +- +-> _The launcher provides an opportunity to use the well-known Modrinth, but with an improved user experience._ +- +-## Included exclusive features +- +-- No ads in the entire launcher. +-- Custom `.svg` vector icons for a distinct UI. +-- Improved compatibility with both licensed and pirate accounts. +- - Use **official microsoft accounts** or **offline/pirate accounts** — login won't break. +- - Supports license-free access for testing or personal use. +- - No dependence on official authentication services. +-- Discord Rich Presence integration: +- - Dynamic status messages. +- - In-game timer and AFK counter. +-- Strict disabling of statistics and other Modrinth metrics. +-- Optimized archive/package size. +-- Integrated update fetcher for seamless version management. +- - Built-in update alerts for new versions posted on Git Astralium. +- - Automatic download and installation capabilities. +-- Database migration fixes, when error occurred (Interactive Mode) (Modrinth issue) +-- Ely.by full integration +- - The official account skin system is managed by ely.by +- - Offline accounts must install AuthLib through the instance settings +- +---- +- +-# Getting Started +- +-To begin using AstralRinth: +- +-1. **Download Your OS Version** +- +- - Go to the [releases page](https://git.astralium.su/didirus/AstralRinth/releases) +- - [How to choose a file](#downloadable-file-extensions) +- - [How to choose a release](#installation-warnings) +- +-2. **Log In** +- +- - Use your official Mojang/Microsoft account, or test using a non-licensed account. +- +-3. **Launch Minecraft** +- - Start Minecraft from the launcher. +- - The launcher will auto-detect the recommended JVM version. +- - You can also configure Java manually in the settings. +- +---- +- +-# Disclaimer +- +-- **AstralRinth** is intended **solely for educational and experimental use**. +-- We **do not condone piracy** — users are encouraged to purchase a legitimate Minecraft license. +-- Respect all relevant licensing agreements and support Minecraft developers. +- +---- +- +-# Support Our Project (Crypto Wallets) +- +-If you'd like to support development, you can donate via the following crypto wallets: +- +-- Toncoin (TON): UQA5pGOJhIz9UAVEOh5t2ur1QVbNr_FC1eq9bOb3GwTgaiqk +-- USDT (TON): UQA5pGOJhIz9UAVEOh5t2ur1QVbNr_FC1eq9bOb3GwTgaiqk ++All packages in this repository are licensed under their respective licenses. Refer to the LICENSE file in each package for more information. +diff --git a/apps/app-frontend/index.html b/apps/app-frontend/index.html +index 876739c33..50867a419 100644 +--- a/apps/app-frontend/index.html ++++ b/apps/app-frontend/index.html +@@ -4,7 +4,7 @@ + + + +- AstralRinth App ++ Modrinth App + + + +diff --git a/apps/app-frontend/src/App.vue b/apps/app-frontend/src/App.vue +index e70f31776..e281beb6e 100644 +--- a/apps/app-frontend/src/App.vue ++++ b/apps/app-frontend/src/App.vue +@@ -32,7 +32,7 @@ import { + NotificationPanel, + OverflowMenu, + ProgressSpinner, +- provideNotificationManager ++ provideNotificationManager, + } from '@modrinth/ui' + import { renderString } from '@modrinth/utils' + import { getVersion } from '@tauri-apps/api/app' +@@ -43,9 +43,10 @@ import { type } from '@tauri-apps/plugin-os' + import { saveWindowState, StateFlags } from '@tauri-apps/plugin-window-state' + import { defineMessages, useVIntl } from '@vintl/vintl' + import { $fetch } from 'ofetch' +-import { computed, onMounted, onUnmounted, provide, ref } from 'vue' ++import { computed, onMounted, onUnmounted, provide, ref, watch } from 'vue' + import { RouterView, useRoute, useRouter } from 'vue-router' + ++import ModrinthAppLogo from '@/assets/modrinth_app.svg?component' + import ModrinthLoadingIndicator from '@/components/LoadingIndicatorBar.vue' + import AccountsCard from '@/components/ui/AccountsCard.vue' + import Breadcrumbs from '@/components/ui/Breadcrumbs.vue' +@@ -58,12 +59,15 @@ import InstanceCreationModal from '@/components/ui/InstanceCreationModal.vue' + import AppSettingsModal from '@/components/ui/modal/AppSettingsModal.vue' + import AuthGrantFlowWaitModal from '@/components/ui/modal/AuthGrantFlowWaitModal.vue' + import NavButton from '@/components/ui/NavButton.vue' ++import PromotionWrapper from '@/components/ui/PromotionWrapper.vue' + import QuickInstanceSwitcher from '@/components/ui/QuickInstanceSwitcher.vue' + import RunningAppBar from '@/components/ui/RunningAppBar.vue' + import SplashScreen from '@/components/ui/SplashScreen.vue' ++import UpdateToast from '@/components/ui/UpdateToast.vue' + import URLConfirmModal from '@/components/ui/URLConfirmModal.vue' + import { useCheckDisableMouseover } from '@/composables/macCssFix.js' +-import { debugAnalytics, optOutAnalytics, trackEvent } from '@/helpers/analytics' ++import { hide_ads_window, init_ads_window, show_ads_window } from '@/helpers/ads.js' ++import { debugAnalytics, initAnalytics, optOutAnalytics, trackEvent } from '@/helpers/analytics' + import { get_user } from '@/helpers/cache.js' + import { command_listener, warning_listener } from '@/helpers/events.js' + import { useFetch } from '@/helpers/fetch.js' +@@ -72,11 +76,16 @@ import { list } from '@/helpers/profile.js' + import { get as getSettings, set as setSettings } from '@/helpers/settings.ts' + import { get_opening_command, initialize_state } from '@/helpers/state' + import { ++ areUpdatesEnabled, ++ enqueueUpdateForInstallation, + getOS, +- isDev ++ getUpdateSize, ++ isDev, ++ isNetworkMetered, + } from '@/helpers/utils.js' + import { +- provideAppUpdateDownloadProgress ++ provideAppUpdateDownloadProgress, ++ subscribeToDownloadProgress, + } from '@/providers/download-progress.ts' + import { useError } from '@/store/error.js' + import { useInstall } from '@/store/install.js' +@@ -87,10 +96,6 @@ import { generateSkinPreviews } from './helpers/rendering/batch-skin-renderer' + import { get_available_capes, get_available_skins } from './helpers/skins' + import { AppNotificationManager } from './providers/app-notifications' + +-// [AR] Imports +-import { get, set } from '@/helpers/settings.ts' +-import { getRemote, updateState } from '@/helpers/update.js' +- + const themeStore = useTheming() + + const notificationManager = new AppNotificationManager() +@@ -123,15 +128,18 @@ const isMaximized = ref(false) + + onMounted(async () => { + await useCheckDisableMouseover() +- await getRemote(false) // [AR] Check for updates + + document.querySelector('body').addEventListener('click', handleClick) + document.querySelector('body').addEventListener('auxclick', handleAuxClick) ++ ++ checkUpdates() + }) + + onUnmounted(async () => { + document.querySelector('body').removeEventListener('click', handleClick) + document.querySelector('body').removeEventListener('auxclick', handleAuxClick) ++ ++ await unlistenUpdateDownload?.() + }) + + const { formatMessage } = useVIntl() +@@ -159,18 +167,11 @@ const messages = defineMessages({ + }) + + async function setupApp() { +- // [AR] Patched +- const settings = await get() +- settings.personalized_ads = false +- settings.telemetry = false +- await set(settings) +- + stateInitialized.value = true + const { + native_decorations, + theme, + telemetry, +- personalized_ads, + collapsed_navigation, + advanced_rendering, + onboarded, +@@ -206,14 +207,10 @@ async function setupApp() { + isMaximized.value = await getCurrentWindow().isMaximized() + }) + +- // [AR] Patched ++ initAnalytics() + if (!telemetry) { +- console.info("[AR] • Telemetry disabled by default (Hard patched).") +- optOutAnalytics() +- } +- if (!personalized_ads) { +- console.info("[AR] • Personalized ads disabled by default (Hard patched).") +- } ++ optOutAnalytics() ++ } + if (dev) debugAnalytics() + trackEvent('Launched', { version, dev, onboarded }) + +@@ -386,6 +383,19 @@ const forceSidebar = computed( + () => route.path.startsWith('/browse') || route.path.startsWith('/project'), + ) + const sidebarVisible = computed(() => sidebarToggled.value || forceSidebar.value) ++const showAd = computed(() => !(!sidebarVisible.value || hasPlus.value)) ++ ++watch( ++ showAd, ++ () => { ++ if (!showAd.value) { ++ hide_ads_window(true) ++ } else { ++ init_ads_window(true) ++ } ++ }, ++ { immediate: true }, ++) + + onMounted(() => { + invoke('show_window') +@@ -422,6 +432,108 @@ const appUpdateDownload = { + progress: ref(0), + version: ref(), + } ++let unlistenUpdateDownload ++ ++const downloadProgress = computed(() => appUpdateDownload.progress.value) ++const downloadPercent = computed(() => Math.trunc(appUpdateDownload.progress.value * 100)) ++ ++const metered = ref(true) ++const finishedDownloading = ref(false) ++const restarting = ref(false) ++const updateToastDismissed = ref(false) ++const availableUpdate = ref(null) ++const updateSize = ref(null) ++async function checkUpdates() { ++ if (!(await areUpdatesEnabled())) { ++ console.log('Skipping update check as updates are disabled in this build or environment') ++ return ++ } ++ ++ async function performCheck() { ++ const update = await invoke('plugin:updater|check') ++ const isExistingUpdate = update.version === availableUpdate.value?.version ++ ++ if (!update) { ++ console.log('No update available') ++ return ++ } ++ ++ if (isExistingUpdate) { ++ console.log('Update is already known') ++ return ++ } ++ ++ appUpdateDownload.progress.value = 0 ++ finishedDownloading.value = false ++ updateToastDismissed.value = false ++ ++ console.log(`Update ${update.version} is available.`) ++ ++ metered.value = await isNetworkMetered() ++ if (!metered.value) { ++ console.log('Starting download of update') ++ downloadUpdate(update) ++ } else { ++ console.log(`Metered connection detected, not auto-downloading update.`) ++ } ++ ++ getUpdateSize(update.rid).then((size) => (updateSize.value = size)) ++ ++ availableUpdate.value = update ++ } ++ ++ await performCheck() ++ setTimeout( ++ () => { ++ checkUpdates() ++ }, ++ 5 /* min */ * 60 /* sec */ * 1000 /* ms */, ++ ) ++} ++ ++async function showUpdateToast() { ++ updateToastDismissed.value = false ++} ++ ++async function downloadAvailableUpdate() { ++ return downloadUpdate(availableUpdate.value) ++} ++ ++async function downloadUpdate(versionToDownload) { ++ if (!versionToDownload) { ++ handleError(`Failed to download update: no version available`) ++ } ++ ++ if (appUpdateDownload.progress.value !== 0) { ++ console.error(`Update ${versionToDownload.version} already downloading`) ++ return ++ } ++ ++ console.log(`Downloading update ${versionToDownload.version}`) ++ ++ try { ++ enqueueUpdateForInstallation(versionToDownload.rid).then(() => { ++ finishedDownloading.value = true ++ unlistenUpdateDownload?.().then(() => { ++ unlistenUpdateDownload = null ++ }) ++ console.log('Finished downloading!') ++ }) ++ unlistenUpdateDownload = await subscribeToDownloadProgress( ++ appUpdateDownload, ++ versionToDownload.version, ++ ) ++ } catch (e) { ++ handleError(e) ++ } ++} ++ ++async function installUpdate() { ++ restarting.value = true ++ setTimeout(async () => { ++ await handleClose() ++ }, 250) ++} + + function handleClick(e) { + let target = e.target +@@ -496,20 +608,24 @@ async function openSurvey() { + onOpen: () => console.info('Opened user survey'), + onClose: () => { + console.info('Closed user survey') ++ show_ads_window() + }, + onSubmit: () => console.info('Active user survey submitted'), + } + + try { ++ hide_ads_window() + if (window.Tally?.openPopup) { + console.info(`Opening Tally popup for user survey (form ID: ${formId})`) + dismissSurvey() + window.Tally.openPopup(formId, popupOptions) + } else { + console.warn('Tally script not yet loaded') ++ show_ads_window() + } + } catch (e) { + console.error('Error opening Tally popup:', e) ++ show_ads_window() + } + + console.info(`Found user survey to show with tally_id: ${formId}`) +@@ -564,13 +680,46 @@ async function processPendingSurveys() { + } + } + +-provideAppUpdateDownloadProgress(appUpdateDownload) // [AR Note] If delete this shit line -> SettingsModal will not work. ++provideAppUpdateDownloadProgress(appUpdateDownload) + + + + + +diff --git a/apps/app-frontend/src/components/ui/ErrorModal.vue b/apps/app-frontend/src/components/ui/ErrorModal.vue +index 1636ce4af..17a9dffc7 100644 +--- a/apps/app-frontend/src/components/ui/ErrorModal.vue ++++ b/apps/app-frontend/src/components/ui/ErrorModal.vue +@@ -19,18 +19,12 @@ import { install } from '@/helpers/profile.js' + import { cancel_directory_change } from '@/helpers/settings.ts' + import { handleSevereError } from '@/store/error.js' + +-// [AR] Imports +-import { applyMigrationFix } from '@/helpers/utils.js' +-import { restartApp } from '@/helpers/utils.js' +- + const { handleError } = injectNotificationManager() + + const errorModal = ref() + const error = ref() + const closable = ref(true) + const errorCollapsed = ref(false) +-const migrationFixSuccess = ref(null) // null | true | false +-const migrationFixCallbackModel = ref() + + const title = ref('An error occurred') + const errorType = ref('unknown') +@@ -78,7 +72,7 @@ defineExpose({ + supportLink.value = 'https://support.modrinth.com' + metadata.value.profilePath = context.profilePath + } else if (source === 'state_init') { +- title.value = 'Error initializing AstralRinth App' ++ title.value = 'Error initializing Modrinth App' + errorType.value = 'state_init' + supportLink.value = 'https://support.modrinth.com' + } else { +@@ -156,26 +150,6 @@ async function copyToClipboard(text) { + copied.value = false + }, 3000) + } +- +-async function onApplyMigrationFix(eol) { +- console.log(`[AR] • Attempting to apply migration ${eol.toUpperCase()} fix`) +- try { +- const result = await applyMigrationFix(eol) +- migrationFixSuccess.value = result === true +- console.log(`[AR] • Successfully applied migration ${eol.toUpperCase()} fix`, result) +- } catch (err) { +- console.error(`[AR] • Failed to apply migration fix:`, err) +- migrationFixSuccess.value = false +- } finally { +- migrationFixCallbackModel.value?.show?.() +- if (migrationFixSuccess.value === true) { +- setTimeout(async () => { +- await restartApp() +- }, 3000) +- } +- } +-} +- + + + + + + + +diff --git a/apps/app-frontend/src/components/ui/instance_settings/InstallationSettings.vue b/apps/app-frontend/src/components/ui/instance_settings/InstallationSettings.vue +index ec6806fc0..72474057c 100644 +--- a/apps/app-frontend/src/components/ui/instance_settings/InstallationSettings.vue ++++ b/apps/app-frontend/src/components/ui/instance_settings/InstallationSettings.vue +@@ -25,7 +25,6 @@ import { + type Project, + type Version, + } from '@modrinth/utils' +-import ModalWrapper from '@/components/ui/modal/ModalWrapper.vue' + import { defineMessages, useVIntl } from '@vintl/vintl' + import dayjs from 'dayjs' + import { computed, type ComputedRef, type Ref, ref, shallowRef, watch } from 'vue' +@@ -44,11 +43,6 @@ import type { + ManifestLoaderVersion, + } from '../../../helpers/types' + +-import { initAuthlibPatching } from '@/helpers/utils.js' +-const authLibPatchingModal = ref(null) +-const isAuthLibPatchedSuccess = ref(false) +-const isAuthLibPatching = ref(false) +- + const { handleError } = injectNotificationManager() + const { formatMessage } = useVIntl() + +@@ -462,43 +456,9 @@ const messages = defineMessages({ + defaultMessage: 'reinstall', + }, + }) +- +-async function handleInitAuthLibPatching(ismojang: boolean) { +- isAuthLibPatching.value = true +- let state = false +- let instance_path = props.instance.loader_version != null ? props.instance.game_version + "-" + props.instance.loader_version : props.instance.game_version +- try { +- state = await initAuthlibPatching(instance_path, ismojang) +- } catch (err) { +- console.error(err) +- } +- isAuthLibPatching.value = false +- isAuthLibPatchedSuccess.value = state +- authLibPatchingModal.value.show() +-} + + + + +- +- +diff --git a/apps/app-frontend/src/components/ui/modal/AppSettingsModal.vue b/apps/app-frontend/src/components/ui/modal/AppSettingsModal.vue +index c4dbed402..932540de9 100644 +--- a/apps/app-frontend/src/components/ui/modal/AppSettingsModal.vue ++++ b/apps/app-frontend/src/components/ui/modal/AppSettingsModal.vue +@@ -3,9 +3,7 @@ import { + CoffeeIcon, + GameIcon, + GaugeIcon, +- AstralRinthLogo, +- DownloadIcon, +- SpinnerIcon, ++ ModrinthIcon, + PaintbrushIcon, + ReportIcon, + SettingsIcon, +@@ -25,24 +23,6 @@ import JavaSettings from '@/components/ui/settings/JavaSettings.vue' + import PrivacySettings from '@/components/ui/settings/PrivacySettings.vue' + import ResourceManagementSettings from '@/components/ui/settings/ResourceManagementSettings.vue' + import { get, set } from '@/helpers/settings.ts' +- +-// [AR] Imports +-import { installState, getRemote, updateState } from '@/helpers/update.js' +- +-const updateModalView = ref(null) +-const updateRequestFailView = ref(null) +- +-const initUpdateModal = async () => { +- updateModalView.value.show() +-} +- +-const initDownload = async () => { +- updateModalView.value.hide() +- const result = await getRemote(true); +- if (!result) { +- updateRequestFailView.value.show() +- } +-} + import { injectAppUpdateDownloadProgress } from '@/providers/download-progress.ts' + import { useTheming } from '@/store/state' + +@@ -185,103 +165,19 @@ const messages = defineMessages({ + }" + @click="devModeCount" + > +- ++ + +
+-

AstralRinth App {{ version }}

++

Modrinth App {{ version }}

+

+ macOS + {{ osPlatform }} + {{ osVersion }} +

+
+-
+- +- +-
+ + + + +- +- +-
+-
+- The new version of the AstralRinth launcher is available! +-

Your version is outdated. We recommend that you update to the latest version.

+-
+-
+-

⚠️ Please, read this notice before initialize update process

+-

+- Before updating, make sure that you have saved and closed all running instances and made a backup copy of the launcher data such as +- %appdata%\Roaming\AstralRinthApp on Windows or ~/Library/Application Support/AstralRinthApp on macOS. +- Remember that the authors of the product are not responsible for the breakdown of +- your files, so you should always make back up copies of them and keep them in a safe place. +-

+-
+-
+-

+- ☁️ Latest release tag: +- +-
+- ☁️ Latest release title: +- +-
+- 💾 Installed & Running version: +- v{{ version }} +-

+-
+- +- Checkout our git repository +- +-
+- +- +-
+-
+-
+- +-
+-
+-

Error occurred

+-

Unfortunately, the program was unable to download the file from our servers.

+-

+- Please try downloading it yourself from +- Git +- Astralium +- if there are any updates available. +-

+-
+- +-
+-

+- Local AstralRinth: +- v{{ version }} +-

+-
+- +-
+- +-
+-
+-
+ + +- +- +diff --git a/apps/app-frontend/src/components/ui/modal/ConfirmModalWrapper.vue b/apps/app-frontend/src/components/ui/modal/ConfirmModalWrapper.vue +index fbae0e7d0..06e23d2e8 100644 +--- a/apps/app-frontend/src/components/ui/modal/ConfirmModalWrapper.vue ++++ b/apps/app-frontend/src/components/ui/modal/ConfirmModalWrapper.vue +@@ -2,7 +2,7 @@ + import { ConfirmModal } from '@modrinth/ui' + import { ref } from 'vue' + +-// import { hide_ads_window, show_ads_window } from '@/helpers/ads.js' ++import { hide_ads_window, show_ads_window } from '@/helpers/ads.js' + import { useTheming } from '@/store/theme.ts' + + const themeStore = useTheming() +@@ -38,10 +38,10 @@ const props = defineProps({ + type: Boolean, + default: true, + }, +- // showAdOnClose: { +- // type: Boolean, +- // default: true, +- // }, ++ showAdOnClose: { ++ type: Boolean, ++ default: true, ++ }, + markdown: { + type: Boolean, + default: true, +@@ -53,7 +53,7 @@ const modal = ref(null) + + defineExpose({ + show: () => { +- // hide_ads_window() ++ hide_ads_window() + modal.value.show() + }, + hide: () => { +@@ -62,11 +62,11 @@ defineExpose({ + }, + }) + +-// function onModalHide() { +-// if (props.showAdOnClose) { +-// show_ads_window() +-// } +-// } ++function onModalHide() { ++ if (props.showAdOnClose) { ++ show_ads_window() ++ } ++} + + function proceed() { + emit('proceed') +diff --git a/apps/app-frontend/src/components/ui/modal/ModalWrapper.vue b/apps/app-frontend/src/components/ui/modal/ModalWrapper.vue +index ce19cd5db..8f1f3db3f 100644 +--- a/apps/app-frontend/src/components/ui/modal/ModalWrapper.vue ++++ b/apps/app-frontend/src/components/ui/modal/ModalWrapper.vue +@@ -2,7 +2,7 @@ + import { NewModal as Modal } from '@modrinth/ui' + import { useTemplateRef } from 'vue' + +-// import { hide_ads_window, show_ads_window } from '@/helpers/ads.js' ++import { hide_ads_window, show_ads_window } from '@/helpers/ads.js' + import { useTheming } from '@/store/theme.ts' + + const themeStore = useTheming() +@@ -26,16 +26,16 @@ const props = defineProps({ + return () => {} + }, + }, +- // showAdOnClose: { +- // type: Boolean, +- // default: true, +- // }, ++ showAdOnClose: { ++ type: Boolean, ++ default: true, ++ }, + }) + const modal = useTemplateRef('modal') + + defineExpose({ + show: (e: MouseEvent) => { +- // hide_ads_window() ++ hide_ads_window() + modal.value?.show(e) + }, + hide: () => { +@@ -45,9 +45,9 @@ defineExpose({ + }) + + function onModalHide() { +- // if (props.showAdOnClose) { +- // show_ads_window() +- // } ++ if (props.showAdOnClose) { ++ show_ads_window() ++ } + props.onHide?.() + } + +diff --git a/apps/app-frontend/src/components/ui/modal/ShareModalWrapper.vue b/apps/app-frontend/src/components/ui/modal/ShareModalWrapper.vue +index aefea372e..9358ee908 100644 +--- a/apps/app-frontend/src/components/ui/modal/ShareModalWrapper.vue ++++ b/apps/app-frontend/src/components/ui/modal/ShareModalWrapper.vue +@@ -2,7 +2,7 @@ + import { ShareModal } from '@modrinth/ui' + import { ref } from 'vue' + +-// import { hide_ads_window, show_ads_window } from '@/helpers/ads.js' ++import { hide_ads_window, show_ads_window } from '@/helpers/ads.js' + import { useTheming } from '@/store/theme.ts' + + const themeStore = useTheming() +@@ -34,7 +34,7 @@ const modal = ref(null) + + defineExpose({ + show: (passedContent) => { +- // hide_ads_window() ++ hide_ads_window() + modal.value.show(passedContent) + }, + hide: () => { +@@ -43,9 +43,9 @@ defineExpose({ + }, + }) + +-// function onModalHide() { +-// show_ads_window() +-// } ++function onModalHide() { ++ show_ads_window() ++} + + +