From 278d3d87dda76cfea063ba7d1d6ed5226da8419d Mon Sep 17 00:00:00 2001 From: Adam Date: Tue, 7 Jan 2025 09:37:16 +0100 Subject: [PATCH] Command Line Interface (#365) --- .github/workflows/make-binary.yaml | 47 + .github/workflows/release.yaml | 55 +- package.json | 94 +- pnpm-lock.yaml | 2526 +++++++++-------- ...025feabb43bdba8ec78a1adb79e8870dbac9.json} | 42 +- src-tauri/Cargo.lock | 715 ++--- src-tauri/Cargo.toml | 55 +- src-tauri/cli/Cargo.toml | 27 + src-tauri/cli/Cross.toml | 41 + src-tauri/cli/build.rs | 16 + src-tauri/cli/src/bin/dg.rs | 498 ++++ src-tauri/common/Cargo.toml | 10 + src-tauri/common/src/lib.rs | 49 + src-tauri/proto | 2 +- src-tauri/src/app_config.rs | 4 +- src-tauri/src/appstate.rs | 2 +- src-tauri/src/bin/defguard-client.rs | 6 +- src-tauri/src/bin/defguard-service.rs | 2 +- src-tauri/src/commands.rs | 52 +- src-tauri/src/database/mod.rs | 13 +- src-tauri/src/database/models/instance.rs | 58 +- src-tauri/src/database/models/location.rs | 16 +- src-tauri/src/database/models/tunnel.rs | 19 +- .../src/database/models/wireguard_keys.rs | 24 +- src-tauri/src/enterprise/periodic/config.rs | 11 +- src-tauri/src/lib.rs | 35 +- src-tauri/src/service/mod.rs | 16 +- src-tauri/src/service/utils.rs | 11 +- src-tauri/src/service/windows.rs | 2 +- src-tauri/src/tray.rs | 5 +- src-tauri/src/utils.rs | 266 +- src-tauri/tauri.conf.json | 2 +- .../StatsLayoutSelect/StatsLayoutSelect.tsx | 2 +- src/shared/defguard-ui | 2 +- tsconfig.json | 32 +- 35 files changed, 2891 insertions(+), 1866 deletions(-) create mode 100644 .github/workflows/make-binary.yaml rename src-tauri/.sqlx/{query-be25a82798d12394363f3379f2b966d29003dd126f4ac0f8c5236d00891b31c5.json => query-e83851eee8a8ccbf3729ba0de91a025feabb43bdba8ec78a1adb79e8870dbac9.json} (52%) create mode 100644 src-tauri/cli/Cargo.toml create mode 100644 src-tauri/cli/Cross.toml create mode 100644 src-tauri/cli/build.rs create mode 100644 src-tauri/cli/src/bin/dg.rs create mode 100644 src-tauri/common/Cargo.toml create mode 100644 src-tauri/common/src/lib.rs diff --git a/.github/workflows/make-binary.yaml b/.github/workflows/make-binary.yaml new file mode 100644 index 00000000..773b17dd --- /dev/null +++ b/.github/workflows/make-binary.yaml @@ -0,0 +1,47 @@ +name: Build DG + +on: + workflow_call: + inputs: + name: + description: 'Name of binary to archive and upload' + required: true + type: string + binary_arch: + description: 'Architecture name' + required: true + type: string + system: + description: 'Operating system name' + required: true + type: string + runner: + description: 'Runner to run this job on' + required: true + type: string + +jobs: + make-binary: + runs-on: + - self-hosted + - Linux + - ${{ inputs.runner }} + steps: + - name: Rename client binary + run: mv src-tauri/target/release/${{ inputs.flavor }} ${{ inputs.flavor }}-${{ inputs.system }}-${{ inputs.binary_arch }}-${{ github.ref_name }} + - name: Tar client binary + uses: a7ul/tar-action@v1.1.0 + with: + command: c + files: | + ${{ inputs.flavor }}-${{ inputs.system }}-${{ inputs.binary_arch }}-${{ github.ref_name }} + outPath: ${{ inputs.flavor }}-${{ inputs.system }}-${{ inputs.binary_arch }}-${{ github.ref_name }}.tar.gz + - name: Upload client archive + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ needs.create-release.outputs.upload_url }} + asset_path: ${{ inputs.flavor }}-${{ inputs.system }}-${{ inputs.binary_arch }}-${{ github.ref_name }}.tar.gz + asset_name: ${{ inputs.flavor }}-${{ inputs.system }}-${{ inputs.binary_arch }}-${{ github.ref_name }}.tar.gz + asset_content_type: application/octet-stream diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index e19966e6..d2c39b34 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -46,7 +46,7 @@ jobs: steps: - name: Create GitHub release id: release - uses: softprops/action-gh-release@v1 + uses: softprops/action-gh-release@v2 with: draft: true generate_release_notes: true @@ -110,7 +110,7 @@ jobs: run: | rpmbuild --build-in-place --define "_topdir $(pwd)" --define "version ${{ env.VERSION }}" -bb resources-linux/defguard-client.spec - name: Upload RPM - uses: actions/upload-release-asset@v1.0.2 + uses: actions/upload-release-asset@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: @@ -119,7 +119,7 @@ jobs: asset_name: defguard-client-${{ env.VERSION }}-1.${{ matrix.binary_arch }}.rpm asset_content_type: application/octet-stream - name: Upload DEB - uses: actions/upload-release-asset@v1.0.2 + uses: actions/upload-release-asset@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: @@ -130,14 +130,14 @@ jobs: - name: Rename client binary run: mv src-tauri/target/release/defguard-client defguard-client-linux-${{ matrix.binary_arch }}-${{ github.ref_name }} - name: Tar client binary - uses: a7ul/tar-action@v1.1.0 + uses: a7ul/tar-action@v1.2.0 with: command: c files: | defguard-client-linux-${{ matrix.binary_arch }}-${{ github.ref_name }} outPath: defguard-client-linux-${{ matrix.binary_arch }}-${{ github.ref_name }}.tar.gz - name: Upload client archive - uses: actions/upload-release-asset@v1.0.2 + uses: actions/upload-release-asset@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: @@ -148,14 +148,14 @@ jobs: - name: Rename daemon binary run: mv src-tauri/target/release/defguard-service defguard-service-linux-${{ matrix.binary_arch }}-${{ github.ref_name }} - name: Tar daemon binary - uses: a7ul/tar-action@v1.1.0 + uses: a7ul/tar-action@v1.2.0 with: command: c files: | defguard-service-linux-${{ matrix.binary_arch }}-${{ github.ref_name }} outPath: defguard-service-linux-${{ matrix.binary_arch }}-${{ github.ref_name }}.tar.gz - name: Upload daemon archive - uses: actions/upload-release-asset@v1.0.2 + uses: actions/upload-release-asset@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: @@ -163,6 +163,26 @@ jobs: asset_path: defguard-service-linux-${{ matrix.binary_arch }}-${{ github.ref_name }}.tar.gz asset_name: defguard-service-linux-${{ matrix.binary_arch }}-${{ github.ref_name }}.tar.gz asset_content_type: application/octet-stream + + - name: Rename dg binary + run: mv src-tauri/target/release/dg dg-linux-${{ matrix.binary_arch }}-${{ github.ref_name }} + - name: Tar dg binary + uses: a7ul/tar-action@v1.2.0 + with: + command: c + files: | + dg-linux-${{ matrix.binary_arch }}-${{ github.ref_name }} + outPath: dg-linux-${{ matrix.binary_arch }}-${{ github.ref_name }}.tar.gz + - name: Upload dg archive + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ needs.create-release.outputs.upload_url }} + asset_path: dg-linux-${{ matrix.binary_arch }}-${{ github.ref_name }}.tar.gz + asset_name: dg-linux-${{ matrix.binary_arch }}-${{ github.ref_name }}.tar.gz + asset_content_type: application/octet-stream + build-macos: needs: - create-release @@ -232,7 +252,7 @@ jobs: xcrun notarytool submit --wait --apple-id admin@teonite.com --password ${{ secrets.NOTARYTOOL_APP_SPECIFIC_PASSWORD }} --team-id 6WD6W6WQNV src-tauri/target/${{ matrix.target }}/product-signed/defguard.pkg xcrun stapler staple src-tauri/target/${{ matrix.target }}/product-signed/defguard.pkg - name: Upload installation package - uses: actions/upload-release-asset@v1.0.2 + uses: actions/upload-release-asset@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: @@ -241,13 +261,13 @@ jobs: asset_name: defguard-${{ matrix.target }}-${{ env.VERSION }}.pkg asset_content_type: application/octet-stream - # Building signed windows bundle involves a few steps as described here: + # Building signed Windows bundle involves a few steps as described here: # https://wixtoolset.org/docs/tools/signing/#signing-bundles-at-the-command-line - # 1. Build defguard & bundle the binaries (defguard & wireguard) using wix (windows) - # 2. Detach the burn engine from the bundle so that it can be signed (also windows) - # 3. Sign the burn engine (linux) - # 4. Reattach the burn engine back to the bundle (windows again) - # 5. Sign the whole bundle (linux) + # 1. Build Defguard and bundle the binaries (Defguard and WireGuard) using Wix (Windows) + # 2. Detach the burn engine from the bundle so that it can be signed (also Windows) + # 3. Sign the burn engine (Linux) + # 4. Reattach the burn engine back to the bundle (Windows again) + # 5. Sign the whole bundle (Linux) build-windows: needs: - create-release @@ -294,12 +314,9 @@ jobs: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Bundle application run: | - # prepare wix extension dotnet tool install --global wix --version 4.0.5 wix extension add WixToolset.Bal.wixext/4 - # bundle defguard & wireguard binaries together wix build .\src-tauri\resources-windows\defguard-client.wxs -ext .\.wix\extensions\WixToolset.Bal.wixext\4\wixext4\WixToolset.Bal.wixext.dll - # detach burn engine from the bundle to be signed wix burn detach .\src-tauri\resources-windows\defguard-client.exe -engine .\src-tauri\resources-windows\burnengine.exe - name: Upload unsigned bundle and burn-engine uses: actions/upload-artifact@v4 @@ -345,10 +362,8 @@ jobs: name: unsigned-bundle-and-signed-burnengine - name: Reattach burn-engine run: | - # prepare wix extension dotnet tool install --global wix --version 4.0.5 wix extension add WixToolset.Bal.wixext/4 - # reattach burn engine to the bundle wix burn reattach defguard-client.exe -engine burnengine-signed.exe -o defguard-client-reattached.exe - name: Upload bundle with reattached burn-engine uses: actions/upload-artifact@v4 @@ -376,7 +391,7 @@ jobs: - name: Sign bundle run: osslsigncode sign -pkcs11module /srv/codesign/certum/sc30pkcs11-3.0.6.68-MS.so -certs /srv/codesign/29ee7778ca5217107841bbbf6b3062e1.pem -key ${{ secrets.CODESIGN_KEYID }} -pass ${{ secrets.CODESIGN_PIN }} -h sha256 -t http://time.certum.pl/ -in defguard-client-reattached.exe -out defguard-client-signed.exe - name: Upload installer asset - uses: actions/upload-release-asset@v1.0.2 + uses: actions/upload-release-asset@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: diff --git a/package.json b/package.json index f79727a7..0e97b134 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "defguard-client", "private": false, - "version": "1.1.0", + "version": "1.1.1", "type": "module", "scripts": { "dev": "npm-run-all --parallel vite typesafe-i18n", @@ -40,80 +40,84 @@ } }, "dependencies": { - "@floating-ui/react": "^0.26.3", - "@hookform/resolvers": "^3.3.2", - "@ladle/react": "^4.1.1", + "@floating-ui/react": "^0.26.28", + "@hookform/resolvers": "^3.9.1", + "@ladle/react": "^4.1.2", + "@react-hook/resize-observer": "^2.0.2", "@stablelib/base64": "^1.0.1", "@stablelib/x25519": "^1.0.3", - "@tanstack/query-core": "^5.12.1", + "@tanstack/query-core": "^5.62.8", "@tanstack/react-virtual": "3.0.0-beta.54", "@tauri-apps/api": "^1.6.0", "@types/byte-size": "^8.1.2", - "byte-size": "^8.1.1", - "classnames": "^2.3.2", - "compare-versions": "^6.1.0", + "byte-size": "^8.2.1", + "classnames": "^2.5.1", + "clsx": "^2.1.1", + "compare-versions": "^6.1.1", "dayjs": "^1.11.13", "detect-browser": "^5.3.0", "fast-deep-equal": "^3.1.3", "file-saver": "^2.0.5", - "framer-motion": "^10.16.12", - "html-react-parser": "^5.0.7", - "itertools": "^2.1.2", + "framer-motion": "^10.18.0", + "get-text-width": "^1.0.3", + "html-react-parser": "^5.2.1", + "itertools": "^2.3.2", "lodash-es": "^4.17.21", - "p-timeout": "^6.1.2", + "merge-refs": "^1.3.0", + "p-timeout": "^6.1.3", "prop-types": "^15.8.1", "radash": "^11.0.0", - "react": "^18.2.0", + "react": "^18.3.1", "react-auth-code-input": "^3.2.1", - "react-click-away-listener": "^2.2.3", - "react-dom": "^18.2.0", - "react-hook-form": "^7.48.2", - "react-loading-skeleton": "^3.3.1", + "react-click-away-listener": "^2.2.4", + "react-dom": "^18.3.1", + "react-hook-form": "^7.54.1", + "react-loading-skeleton": "^3.5.0", "react-markdown": "^9.0.1", "react-qr-code": "^2.0.15", - "react-router-dom": "^6.20.1", - "react-virtualized-auto-sizer": "^1.0.24", - "recharts": "^2.10.3", + "react-router-dom": "^6.28.0", + "react-virtualized-auto-sizer": "^1.0.25", + "recharts": "^2.15.0", "rehype-sanitize": "^6.0.0", "rxjs": "^7.8.1", "tauri-plugin-log-api": "github:tauri-apps/tauri-plugin-log", "tauri-plugin-window-state-api": "github:tauri-apps/tauri-plugin-window-state#v1", - "use-breakpoint": "^4.0.1", - "zod": "^3.22.4", - "zustand": "^4.4.7" + "use-breakpoint": "^4.0.5", + "zod": "^3.24.1", + "zustand": "^5.0.2" }, "devDependencies": { - "@hookform/devtools": "^4.3.1", + "@hookform/devtools": "^4.3.3", "@svgr/cli": "^8.1.0", - "@tanstack/react-query": "^5.12.2", - "@tanstack/react-query-devtools": "^5.12.2", - "@tauri-apps/cli": "^1.6.2", + "@tanstack/react-query": "^5.62.8", + "@tanstack/react-query-devtools": "^5.62.8", + "@tauri-apps/cli": "^1.6.3", "@types/file-saver": "^2.0.7", "@types/lodash-es": "^4.17.12", - "@types/node": "^20.10.3", - "@types/react": "^18.2.41", - "@types/react-dom": "^18.2.17", - "@typescript-eslint/eslint-plugin": "^6.13.1", - "@typescript-eslint/parser": "^6.13.1", - "@vitejs/plugin-react": "^4.2.0", - "@vitejs/plugin-react-swc": "^3.5.0", + "@types/node": "^20.17.10", + "@types/react": "^18.3.17", + "@types/react-dom": "^18.3.5", + "@typescript-eslint/eslint-plugin": "^6.21.0", + "@typescript-eslint/parser": "^6.21.0", + "@vitejs/plugin-react": "^4.3.4", + "@vitejs/plugin-react-swc": "^3.7.2", "autoprefixer": "^10.4.20", - "eslint": "^8.55.0", + "eslint": "^8.57.1", "eslint-config-prettier": "^9.1.0", - "eslint-plugin-import": "^2.29.0", - "eslint-plugin-prettier": "^5.0.1", - "eslint-plugin-react": "^7.33.2", - "eslint-plugin-react-hooks": "^4.6.0", - "eslint-plugin-react-refresh": "^0.4.5", + "eslint-plugin-import": "^2.31.0", + "eslint-plugin-prettier": "^5.2.1", + "eslint-plugin-react": "^7.37.2", + "eslint-plugin-react-hooks": "^4.6.2", + "eslint-plugin-react-refresh": "^0.4.16", "eslint-plugin-simple-import-sort": "^10.0.0", "npm-run-all": "^4.1.5", - "postcss": "^8.4.32", - "sass": "^1.69.5", - "typedoc": "^0.25.4", + "postcss": "^8.4.49", + "sass": "^1.83.0", + "typedoc": "^0.25.13", "typesafe-i18n": "^5.26.2", - "typescript": "^5.3.2", + "typescript": "^5.2.2", "typescript-eslint-language-service": "^5.0.5", - "vite": "^4.5.3" + "vite": "^4.5.5" }, "volta": { "node": "20.5.1" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8428672b..0f3c92b5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,14 +9,17 @@ importers: .: dependencies: '@floating-ui/react': - specifier: ^0.26.3 - version: 0.26.3(react-dom@18.2.0)(react@18.2.0) + specifier: ^0.26.28 + version: 0.26.28(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@hookform/resolvers': - specifier: ^3.3.2 - version: 3.3.2(react-hook-form@7.48.2) + specifier: ^3.9.1 + version: 3.9.1(react-hook-form@7.54.1(react@18.3.1)) '@ladle/react': - specifier: ^4.1.1 - version: 4.1.1(@types/node@20.10.3)(@types/react@18.2.41)(acorn@8.14.0)(react-dom@18.2.0)(react@18.2.0)(sass@1.69.5)(typescript@5.3.2) + specifier: ^4.1.2 + version: 4.1.2(@types/node@20.17.10)(@types/react@18.3.17)(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.83.0)(typescript@5.2.2) + '@react-hook/resize-observer': + specifier: ^2.0.2 + version: 2.0.2(react@18.3.1) '@stablelib/base64': specifier: ^1.0.1 version: 1.0.1 @@ -24,11 +27,11 @@ importers: specifier: ^1.0.3 version: 1.0.3 '@tanstack/query-core': - specifier: ^5.12.1 - version: 5.12.1 + specifier: ^5.62.8 + version: 5.62.8 '@tanstack/react-virtual': specifier: 3.0.0-beta.54 - version: 3.0.0-beta.54(react@18.2.0) + version: 3.0.0-beta.54(react@18.3.1) '@tauri-apps/api': specifier: ^1.6.0 version: 1.6.0 @@ -36,14 +39,17 @@ importers: specifier: ^8.1.2 version: 8.1.2 byte-size: - specifier: ^8.1.1 - version: 8.1.1 + specifier: ^8.2.1 + version: 8.2.1 classnames: - specifier: ^2.3.2 - version: 2.3.2 + specifier: ^2.5.1 + version: 2.5.1 + clsx: + specifier: ^2.1.1 + version: 2.1.1 compare-versions: - specifier: ^6.1.0 - version: 6.1.0 + specifier: ^6.1.1 + version: 6.1.1 dayjs: specifier: ^1.11.13 version: 1.11.13 @@ -57,20 +63,26 @@ importers: specifier: ^2.0.5 version: 2.0.5 framer-motion: - specifier: ^10.16.12 - version: 10.16.12(react-dom@18.2.0)(react@18.2.0) + specifier: ^10.18.0 + version: 10.18.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + get-text-width: + specifier: ^1.0.3 + version: 1.0.3 html-react-parser: - specifier: ^5.0.7 - version: 5.0.7(react@18.2.0) + specifier: ^5.2.1 + version: 5.2.1(@types/react@18.3.17)(react@18.3.1) itertools: - specifier: ^2.1.2 - version: 2.1.2 + specifier: ^2.3.2 + version: 2.3.2 lodash-es: specifier: ^4.17.21 version: 4.17.21 + merge-refs: + specifier: ^1.3.0 + version: 1.3.0(@types/react@18.3.17) p-timeout: - specifier: ^6.1.2 - version: 6.1.2 + specifier: ^6.1.3 + version: 6.1.3 prop-types: specifier: ^15.8.1 version: 15.8.1 @@ -78,38 +90,38 @@ importers: specifier: ^11.0.0 version: 11.0.0 react: - specifier: ^18.2.0 - version: 18.2.0 + specifier: ^18.3.1 + version: 18.3.1 react-auth-code-input: specifier: ^3.2.1 - version: 3.2.1(react@18.2.0) + version: 3.2.1(react@18.3.1) react-click-away-listener: - specifier: ^2.2.3 - version: 2.2.3(react-dom@18.2.0)(react@18.2.0) + specifier: ^2.2.4 + version: 2.2.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-dom: - specifier: ^18.2.0 - version: 18.2.0(react@18.2.0) + specifier: ^18.3.1 + version: 18.3.1(react@18.3.1) react-hook-form: - specifier: ^7.48.2 - version: 7.48.2(react@18.2.0) + specifier: ^7.54.1 + version: 7.54.1(react@18.3.1) react-loading-skeleton: - specifier: ^3.3.1 - version: 3.3.1(react@18.2.0) + specifier: ^3.5.0 + version: 3.5.0(react@18.3.1) react-markdown: specifier: ^9.0.1 - version: 9.0.1(@types/react@18.2.41)(react@18.2.0) + version: 9.0.1(@types/react@18.3.17)(react@18.3.1) react-qr-code: specifier: ^2.0.15 - version: 2.0.15(react@18.2.0) + version: 2.0.15(react@18.3.1) react-router-dom: - specifier: ^6.20.1 - version: 6.20.1(react-dom@18.2.0)(react@18.2.0) + specifier: ^6.28.0 + version: 6.28.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-virtualized-auto-sizer: - specifier: ^1.0.24 - version: 1.0.24(react-dom@18.2.0)(react@18.2.0) + specifier: ^1.0.25 + version: 1.0.25(react-dom@18.3.1(react@18.3.1))(react@18.3.1) recharts: - specifier: ^2.10.3 - version: 2.10.3(prop-types@15.8.1)(react-dom@18.2.0)(react@18.2.0) + specifier: ^2.15.0 + version: 2.15.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) rehype-sanitize: specifier: ^6.0.0 version: 6.0.0 @@ -123,30 +135,30 @@ importers: specifier: github:tauri-apps/tauri-plugin-window-state#v1 version: https://codeload.github.com/tauri-apps/tauri-plugin-window-state/tar.gz/e4f784d8313c937fe4944827da5b51274ef1b93e use-breakpoint: - specifier: ^4.0.1 - version: 4.0.1(react-dom@18.2.0)(react@18.2.0) + specifier: ^4.0.5 + version: 4.0.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) zod: - specifier: ^3.22.4 - version: 3.22.4 + specifier: ^3.24.1 + version: 3.24.1 zustand: - specifier: ^4.4.7 - version: 4.4.7(@types/react@18.2.41)(react@18.2.0) + specifier: ^5.0.2 + version: 5.0.2(@types/react@18.3.17)(react@18.3.1)(use-sync-external-store@1.2.2(react@18.3.1)) devDependencies: '@hookform/devtools': - specifier: ^4.3.1 - version: 4.3.1(@types/react@18.2.41)(react-dom@18.2.0)(react@18.2.0) + specifier: ^4.3.3 + version: 4.3.3(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@svgr/cli': specifier: ^8.1.0 - version: 8.1.0(typescript@5.3.2) + version: 8.1.0(typescript@5.2.2) '@tanstack/react-query': - specifier: ^5.12.2 - version: 5.12.2(react@18.2.0) + specifier: ^5.62.8 + version: 5.62.8(react@18.3.1) '@tanstack/react-query-devtools': - specifier: ^5.12.2 - version: 5.12.2(@tanstack/react-query@5.12.2)(react@18.2.0) + specifier: ^5.62.8 + version: 5.62.8(@tanstack/react-query@5.62.8(react@18.3.1))(react@18.3.1) '@tauri-apps/cli': - specifier: ^1.6.2 - version: 1.6.2 + specifier: ^1.6.3 + version: 1.6.3 '@types/file-saver': specifier: ^2.0.7 version: 2.0.7 @@ -154,77 +166,77 @@ importers: specifier: ^4.17.12 version: 4.17.12 '@types/node': - specifier: ^20.10.3 - version: 20.10.3 + specifier: ^20.17.10 + version: 20.17.10 '@types/react': - specifier: ^18.2.41 - version: 18.2.41 + specifier: ^18.3.17 + version: 18.3.17 '@types/react-dom': - specifier: ^18.2.17 - version: 18.2.17 + specifier: ^18.3.5 + version: 18.3.5(@types/react@18.3.17) '@typescript-eslint/eslint-plugin': - specifier: ^6.13.1 - version: 6.13.1(@typescript-eslint/parser@6.13.1)(eslint@8.55.0)(typescript@5.3.2) + specifier: ^6.21.0 + version: 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.2.2))(eslint@8.57.1)(typescript@5.2.2) '@typescript-eslint/parser': - specifier: ^6.13.1 - version: 6.13.1(eslint@8.55.0)(typescript@5.3.2) + specifier: ^6.21.0 + version: 6.21.0(eslint@8.57.1)(typescript@5.2.2) '@vitejs/plugin-react': - specifier: ^4.2.0 - version: 4.2.0(vite@4.5.3) + specifier: ^4.3.4 + version: 4.3.4(vite@4.5.5(@types/node@20.17.10)(sass@1.83.0)) '@vitejs/plugin-react-swc': - specifier: ^3.5.0 - version: 3.5.0(vite@4.5.3) + specifier: ^3.7.2 + version: 3.7.2(vite@4.5.5(@types/node@20.17.10)(sass@1.83.0)) autoprefixer: specifier: ^10.4.20 - version: 10.4.20(postcss@8.4.32) + version: 10.4.20(postcss@8.4.49) eslint: - specifier: ^8.55.0 - version: 8.55.0 + specifier: ^8.57.1 + version: 8.57.1 eslint-config-prettier: specifier: ^9.1.0 - version: 9.1.0(eslint@8.55.0) + version: 9.1.0(eslint@8.57.1) eslint-plugin-import: - specifier: ^2.29.0 - version: 2.29.0(@typescript-eslint/parser@6.13.1)(eslint@8.55.0) + specifier: ^2.31.0 + version: 2.31.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.2.2))(eslint@8.57.1) eslint-plugin-prettier: - specifier: ^5.0.1 - version: 5.0.1(eslint-config-prettier@9.1.0)(eslint@8.55.0)(prettier@3.3.3) + specifier: ^5.2.1 + version: 5.2.1(eslint-config-prettier@9.1.0(eslint@8.57.1))(eslint@8.57.1)(prettier@3.3.3) eslint-plugin-react: - specifier: ^7.33.2 - version: 7.33.2(eslint@8.55.0) + specifier: ^7.37.2 + version: 7.37.2(eslint@8.57.1) eslint-plugin-react-hooks: - specifier: ^4.6.0 - version: 4.6.0(eslint@8.55.0) + specifier: ^4.6.2 + version: 4.6.2(eslint@8.57.1) eslint-plugin-react-refresh: - specifier: ^0.4.5 - version: 0.4.5(eslint@8.55.0) + specifier: ^0.4.16 + version: 0.4.16(eslint@8.57.1) eslint-plugin-simple-import-sort: specifier: ^10.0.0 - version: 10.0.0(eslint@8.55.0) + version: 10.0.0(eslint@8.57.1) npm-run-all: specifier: ^4.1.5 version: 4.1.5 postcss: - specifier: ^8.4.32 - version: 8.4.32 + specifier: ^8.4.49 + version: 8.4.49 sass: - specifier: ^1.69.5 - version: 1.69.5 + specifier: ^1.83.0 + version: 1.83.0 typedoc: - specifier: ^0.25.4 - version: 0.25.4(typescript@5.3.2) + specifier: ^0.25.13 + version: 0.25.13(typescript@5.2.2) typesafe-i18n: specifier: ^5.26.2 - version: 5.26.2(typescript@5.3.2) + version: 5.26.2(typescript@5.2.2) typescript: - specifier: ^5.3.2 - version: 5.3.2 + specifier: ^5.2.2 + version: 5.2.2 typescript-eslint-language-service: specifier: ^5.0.5 - version: 5.0.5(@typescript-eslint/parser@6.13.1)(eslint@8.55.0)(typescript@5.3.2) + version: 5.0.5(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.2.2))(eslint@8.57.1)(typescript@5.2.2) vite: - specifier: ^4.5.3 - version: 4.5.3(@types/node@20.10.3)(sass@1.69.5) + specifier: ^4.5.5 + version: 4.5.5(@types/node@20.17.10)(sass@1.83.0) packages: @@ -236,16 +248,16 @@ packages: resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} engines: {node: '>=6.9.0'} - '@babel/compat-data@7.26.2': - resolution: {integrity: sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg==} + '@babel/compat-data@7.26.3': + resolution: {integrity: sha512-nHIxvKPniQXpmQLb0vhY3VaFb3S0YrTAwpOWJZh1wn3oJPjJk9Asva204PsBdmAE8vpzfHudT8DB0scYvy9q0g==} engines: {node: '>=6.9.0'} '@babel/core@7.26.0': resolution: {integrity: sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==} engines: {node: '>=6.9.0'} - '@babel/generator@7.26.2': - resolution: {integrity: sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==} + '@babel/generator@7.26.3': + resolution: {integrity: sha512-6FF/urZvD0sTeO7k6/B15pMLC4CHUv1426lzr3N01aHJTl046uCAh9LXW/fzeXXjPNCJ6iABW5XaWOsIZB93aQ==} engines: {node: '>=6.9.0'} '@babel/helper-compilation-targets@7.25.9': @@ -282,8 +294,8 @@ packages: resolution: {integrity: sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==} engines: {node: '>=6.9.0'} - '@babel/parser@7.26.2': - resolution: {integrity: sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==} + '@babel/parser@7.26.3': + resolution: {integrity: sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA==} engines: {node: '>=6.0.0'} hasBin: true @@ -307,12 +319,12 @@ packages: resolution: {integrity: sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.25.9': - resolution: {integrity: sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==} + '@babel/traverse@7.26.4': + resolution: {integrity: sha512-fH+b7Y4p3yqvApJALCPJcwb0/XaOSgtK4pzV6WVjPR5GLFQBRI7pfoX2V2iM48NXvX07NUxxm1Vw98YjqTcU5w==} engines: {node: '>=6.9.0'} - '@babel/types@7.26.0': - resolution: {integrity: sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==} + '@babel/types@7.26.3': + resolution: {integrity: sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA==} engines: {node: '>=6.9.0'} '@bundled-es-modules/cookie@2.0.1': @@ -324,11 +336,11 @@ packages: '@bundled-es-modules/tough-cookie@0.1.6': resolution: {integrity: sha512-dvMHbL464C0zI+Yqxbz6kZ5TOEp7GLW+pry/RWndAR8MJQAXZ2rPmIs8tziTZjeIyhSNZgZbCePtfSbdWqStJw==} - '@emotion/babel-plugin@11.12.0': - resolution: {integrity: sha512-y2WQb+oP8Jqvvclh8Q55gLUyb7UFvgv7eJfsj7td5TToBrIUtPay2kMrZi4xjq9qw2vD0ZR5fSho0yqoFgX7Rw==} + '@emotion/babel-plugin@11.13.5': + resolution: {integrity: sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==} - '@emotion/cache@11.13.1': - resolution: {integrity: sha512-iqouYkuEblRcXmylXIwwOodiEK5Ifl7JcX7o6V4jI3iW4mLXX3dmt5xwBtIkJiQEXFAI+pC8X0i67yiPkH9Ucw==} + '@emotion/cache@11.13.5': + resolution: {integrity: sha512-Z3xbtJ+UcK76eWkagZ1onvn/wAVb1GOMuR15s30Fm2wrMgC7jzpnO2JZXr4eujTTqoQFUrZIw/rT0c6Zzjca1g==} '@emotion/hash@0.9.2': resolution: {integrity: sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==} @@ -345,8 +357,8 @@ packages: '@emotion/memoize@0.9.0': resolution: {integrity: sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==} - '@emotion/react@11.13.3': - resolution: {integrity: sha512-lIsdU6JNrmYfJ5EbUCf4xW1ovy5wKQ2CkPRM4xogziOxH1nXxBSjpC9YqbFAP7circxMfYp+6x676BqWcEiixg==} + '@emotion/react@11.13.5': + resolution: {integrity: sha512-6zeCUxUH+EPF1s+YF/2hPVODeV/7V07YU5x+2tfuRL8MdW6rv5vb2+CBEGTGwBdux0OIERcOS+RzxeK80k2DsQ==} peerDependencies: '@types/react': '*' react: '>=16.8.0' @@ -354,14 +366,14 @@ packages: '@types/react': optional: true - '@emotion/serialize@1.3.2': - resolution: {integrity: sha512-grVnMvVPK9yUVE6rkKfAJlYZgo0cu3l9iMC77V7DW6E1DUIrU68pSEXRmFZFOFB1QFo57TncmOcvcbMDWsL4yA==} + '@emotion/serialize@1.3.3': + resolution: {integrity: sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA==} '@emotion/sheet@1.4.0': resolution: {integrity: sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==} - '@emotion/styled@11.13.0': - resolution: {integrity: sha512-tkzkY7nQhW/zC4hztlwucpT8QEZ6eUzpXDRhww/Eej4tFfO0FxQYWRyg/c5CCXa4d/f174kqeXYjuQRnhzf6dA==} + '@emotion/styled@11.13.5': + resolution: {integrity: sha512-gnOQ+nGLPvDXgIx119JqGalys64lhMdnNQA9TMxhDA4K0Hq5+++OE20Zs5GxiCV9r814xQ2K5WmtofSpHVW6BQ==} peerDependencies: '@emotion/react': ^11.0.0-rc.0 '@types/react': '*' @@ -378,8 +390,8 @@ packages: peerDependencies: react: '>=16.8.0' - '@emotion/utils@1.4.1': - resolution: {integrity: sha512-BymCXzCG3r72VKJxaYVwOXATqXIZ85cuvg0YOUDxMGNrKc1DJRZk8MgV5wyXRyEayIMd4FuXJIUgTBXvDNW5cA==} + '@emotion/utils@1.4.2': + resolution: {integrity: sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA==} '@emotion/weak-memoize@0.4.0': resolution: {integrity: sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==} @@ -668,8 +680,8 @@ packages: resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - '@eslint/js@8.55.0': - resolution: {integrity: sha512-qQfo2mxH5yVom1kacMtZZJFVdW+E70mqHMJvVg6WTLo+VBuQJ4TojZlfWBjK0ve5BdEeNAVxOsl/nvNMpJOaJA==} + '@eslint/js@8.57.1': + resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} '@floating-ui/core@1.6.8': @@ -684,31 +696,28 @@ packages: react: '>=16.8.0' react-dom: '>=16.8.0' - '@floating-ui/react@0.26.3': - resolution: {integrity: sha512-iKH8WRR0L/nLiM6qavFZxkyegIZRMxGnM9aKEc71M4wRlUNkgTamjPsOQXy11oZbDOH37MiTbk/nAPn9M2+shA==} + '@floating-ui/react@0.26.28': + resolution: {integrity: sha512-yORQuuAtVpiRjpMhdc0wJj06b9JFjrYF4qp96j++v2NBpbi6SEGF7donUJ3TMieerQ6qVkAv1tgr7L4r5roTqw==} peerDependencies: react: '>=16.8.0' react-dom: '>=16.8.0' - '@floating-ui/utils@0.1.6': - resolution: {integrity: sha512-OfX7E2oUDYxtBvsuS4e/jSn4Q9Qb6DzgeYtsAdkPZ47znpoNsMgZw0+tVijiv3uGNR6dgNlty6r9rzIzHjtd/A==} - '@floating-ui/utils@0.2.8': resolution: {integrity: sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==} - '@hookform/devtools@4.3.1': - resolution: {integrity: sha512-CrWxEoHQZaOXJZVQ8KBgOuAa8p2LI8M0DAN5GTRTmdCieRwFVjVDEmuTAVazWVRRkpEQSgSt3KYp7VmmqXdEnw==} + '@hookform/devtools@4.3.3': + resolution: {integrity: sha512-W9MipDe6P5y2XLos9coN4/fZhbt0YE2c+PaUx7tiKdc9XNQ2UOWCYTtysCnbj7fipZWEJht8J/UyQmXprWEhgw==} peerDependencies: - react: ^16.8.0 || ^17 || ^18 - react-dom: ^16.8.0 || ^17 || ^18 + react: ^16.8.0 || ^17 || ^18 || ^19 + react-dom: ^16.8.0 || ^17 || ^18 || ^19 - '@hookform/resolvers@3.3.2': - resolution: {integrity: sha512-Tw+GGPnBp+5DOsSg4ek3LCPgkBOuOgS5DsDV7qsWNH9LZc433kgsWICjlsh2J9p04H2K66hsXPPb9qn9ILdUtA==} + '@hookform/resolvers@3.9.1': + resolution: {integrity: sha512-ud2HqmGBM0P0IABqoskKWI6PEf6ZDDBZkFqe2Vnl+mTHCEHzr3ISjjZyCwTjC/qpL25JC9aIDkloQejvMeq0ug==} peerDependencies: react-hook-form: ^7.0.0 - '@humanwhocodes/config-array@0.11.14': - resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} + '@humanwhocodes/config-array@0.13.0': + resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==} engines: {node: '>=10.10.0'} deprecated: Use @eslint/config-array instead @@ -720,14 +729,14 @@ packages: resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} deprecated: Use @eslint/object-schema instead - '@inquirer/confirm@5.0.2': - resolution: {integrity: sha512-KJLUHOaKnNCYzwVbryj3TNBxyZIrr56fR5N45v6K9IPrbT6B7DcudBMfylkV1A8PUdJE15mybkEQyp2/ZUpxUA==} + '@inquirer/confirm@5.1.0': + resolution: {integrity: sha512-osaBbIMEqVFjTX5exoqPXs6PilWQdjaLhGtMDXMXg/yxkHXNq43GlxGyTA35lK2HpzUgDN+Cjh/2AmqCN0QJpw==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' - '@inquirer/core@10.1.0': - resolution: {integrity: sha512-I+ETk2AL+yAVbvuKx5AJpQmoaWhpiTFOg/UJb7ZkMAK4blmtG8ATh5ct+T/8xNld0CZG/2UhtkdMwpgvld92XQ==} + '@inquirer/core@10.1.1': + resolution: {integrity: sha512-rmZVXy9iZvO3ZStEe/ayuuwIJ23LSF13aPMlLMTQARX6lGUBDHGV8UB5i9MRrfy0+mZwt5/9bdy8llszSD3NQA==} engines: {node: '>=18'} '@inquirer/figures@1.0.8': @@ -764,8 +773,8 @@ packages: react: '>=16.14.0' react-dom: '>=16.14.0' - '@ladle/react@4.1.1': - resolution: {integrity: sha512-WSH+abvPwXMgy1PquYBcgmuV8R1WeZhaLKIfoPm4YgfmD3tgsA9MOwa+SFNkIrIHI71Q6J41sguObToof13WfQ==} + '@ladle/react@4.1.2': + resolution: {integrity: sha512-6nMIPCsnkGCjIRz5kpRojJyieqcFPsq34QeqJp5mFpT1xFeX7sKwdCpQJ92d5ORsejmxTyp9gkQA+AXG3i3AGw==} engines: {node: '>=20.0.0'} hasBin: true peerDependencies: @@ -781,8 +790,8 @@ packages: '@types/react': '>=16' react: '>=16' - '@mswjs/interceptors@0.36.10': - resolution: {integrity: sha512-GXrJgakgJW3DWKueebkvtYgGKkxA7s0u5B0P5syJM5rvQUnrpLPigvci8Hukl7yEM+sU06l+er2Fgvx/gmiRgg==} + '@mswjs/interceptors@0.37.3': + resolution: {integrity: sha512-USvgCL/uOGFtVa6SVyRrC8kIAedzRohxIXN5LISlg5C5vLZCn7dgMFVSNhSF9cuBEFrm/O2spDWEZeMnw4ZXYg==} engines: {node: '>=18'} '@nodelib/fs.scandir@2.1.5': @@ -806,104 +815,209 @@ packages: '@open-draft/until@2.1.0': resolution: {integrity: sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==} + '@parcel/watcher-android-arm64@2.5.0': + resolution: {integrity: sha512-qlX4eS28bUcQCdribHkg/herLe+0A9RyYC+mm2PXpncit8z5b3nSqGVzMNR3CmtAOgRutiZ02eIJJgP/b1iEFQ==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [android] + + '@parcel/watcher-darwin-arm64@2.5.0': + resolution: {integrity: sha512-hyZ3TANnzGfLpRA2s/4U1kbw2ZI4qGxaRJbBH2DCSREFfubMswheh8TeiC1sGZ3z2jUf3s37P0BBlrD3sjVTUw==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [darwin] + + '@parcel/watcher-darwin-x64@2.5.0': + resolution: {integrity: sha512-9rhlwd78saKf18fT869/poydQK8YqlU26TMiNg7AIu7eBp9adqbJZqmdFOsbZ5cnLp5XvRo9wcFmNHgHdWaGYA==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [darwin] + + '@parcel/watcher-freebsd-x64@2.5.0': + resolution: {integrity: sha512-syvfhZzyM8kErg3VF0xpV8dixJ+RzbUaaGaeb7uDuz0D3FK97/mZ5AJQ3XNnDsXX7KkFNtyQyFrXZzQIcN49Tw==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [freebsd] + + '@parcel/watcher-linux-arm-glibc@2.5.0': + resolution: {integrity: sha512-0VQY1K35DQET3dVYWpOaPFecqOT9dbuCfzjxoQyif1Wc574t3kOSkKevULddcR9znz1TcklCE7Ht6NIxjvTqLA==} + engines: {node: '>= 10.0.0'} + cpu: [arm] + os: [linux] + + '@parcel/watcher-linux-arm-musl@2.5.0': + resolution: {integrity: sha512-6uHywSIzz8+vi2lAzFeltnYbdHsDm3iIB57d4g5oaB9vKwjb6N6dRIgZMujw4nm5r6v9/BQH0noq6DzHrqr2pA==} + engines: {node: '>= 10.0.0'} + cpu: [arm] + os: [linux] + + '@parcel/watcher-linux-arm64-glibc@2.5.0': + resolution: {integrity: sha512-BfNjXwZKxBy4WibDb/LDCriWSKLz+jJRL3cM/DllnHH5QUyoiUNEp3GmL80ZqxeumoADfCCP19+qiYiC8gUBjA==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [linux] + + '@parcel/watcher-linux-arm64-musl@2.5.0': + resolution: {integrity: sha512-S1qARKOphxfiBEkwLUbHjCY9BWPdWnW9j7f7Hb2jPplu8UZ3nes7zpPOW9bkLbHRvWM0WDTsjdOTUgW0xLBN1Q==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [linux] + + '@parcel/watcher-linux-x64-glibc@2.5.0': + resolution: {integrity: sha512-d9AOkusyXARkFD66S6zlGXyzx5RvY+chTP9Jp0ypSTC9d4lzyRs9ovGf/80VCxjKddcUvnsGwCHWuF2EoPgWjw==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] + + '@parcel/watcher-linux-x64-musl@2.5.0': + resolution: {integrity: sha512-iqOC+GoTDoFyk/VYSFHwjHhYrk8bljW6zOhPuhi5t9ulqiYq1togGJB5e3PwYVFFfeVgc6pbz3JdQyDoBszVaA==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] + + '@parcel/watcher-win32-arm64@2.5.0': + resolution: {integrity: sha512-twtft1d+JRNkM5YbmexfcH/N4znDtjgysFaV9zvZmmJezQsKpkfLYJ+JFV3uygugK6AtIM2oADPkB2AdhBrNig==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [win32] + + '@parcel/watcher-win32-ia32@2.5.0': + resolution: {integrity: sha512-+rgpsNRKwo8A53elqbbHXdOMtY/tAtTzManTWShB5Kk54N8Q9mzNWV7tV+IbGueCbcj826MfWGU3mprWtuf1TA==} + engines: {node: '>= 10.0.0'} + cpu: [ia32] + os: [win32] + + '@parcel/watcher-win32-x64@2.5.0': + resolution: {integrity: sha512-lPrxve92zEHdgeff3aiu4gDOIt4u7sJYha6wbdEZDCDUhtjTsOMiaJzG5lMY4GkWH8p0fMmO2Ppq5G5XXG+DQw==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [win32] + + '@parcel/watcher@2.5.0': + resolution: {integrity: sha512-i0GV1yJnm2n3Yq1qw6QrUrd/LI9bE8WEBOTtOkpCXHHdyN3TAGgqAK/DAT05z4fq2x04cARXt2pDmjWjL92iTQ==} + engines: {node: '>= 10.0.0'} + '@pkgr/core@0.1.1': resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - '@remix-run/router@1.13.1': - resolution: {integrity: sha512-so+DHzZKsoOcoXrILB4rqDkMDy7NLMErRdOxvzvOKb507YINKUP4Di+shbTZDhSE/pBZ+vr7XGIpcOO0VLSA+Q==} + '@react-hook/latest@1.0.3': + resolution: {integrity: sha512-dy6duzl+JnAZcDbNTfmaP3xHiKtbXYOaz3G51MGVljh548Y8MWzTr+PHLOfvpypEVW9zwvl+VyKjbWKEVbV1Rg==} + peerDependencies: + react: '>=16.8' + + '@react-hook/passive-layout-effect@1.2.1': + resolution: {integrity: sha512-IwEphTD75liO8g+6taS+4oqz+nnroocNfWVHWz7j+N+ZO2vYrc6PV1q7GQhuahL0IOR7JccFTsFKQ/mb6iZWAg==} + peerDependencies: + react: '>=16.8' + + '@react-hook/resize-observer@2.0.2': + resolution: {integrity: sha512-tzKKzxNpfE5TWmxuv+5Ae3IF58n0FQgQaWJmcbYkjXTRZATXxClnTprQ2uuYygYTpu1pqbBskpwMpj6jpT1djA==} + peerDependencies: + react: '>=18' + + '@remix-run/router@1.21.0': + resolution: {integrity: sha512-xfSkCAchbdG5PnbrKqFWwia4Bi61nH+wm8wLEqfHDyp7Y3dZzgqS2itV8i4gAq9pC2HsTpwyBC6Ds8VHZ96JlA==} engines: {node: '>=14.0.0'} - '@rollup/rollup-android-arm-eabi@4.25.0': - resolution: {integrity: sha512-CC/ZqFZwlAIbU1wUPisHyV/XRc5RydFrNLtgl3dGYskdwPZdt4HERtKm50a/+DtTlKeCq9IXFEWR+P6blwjqBA==} + '@rollup/rollup-android-arm-eabi@4.28.1': + resolution: {integrity: sha512-2aZp8AES04KI2dy3Ss6/MDjXbwBzj+i0GqKtWXgw2/Ma6E4jJvujryO6gJAghIRVz7Vwr9Gtl/8na3nDUKpraQ==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.25.0': - resolution: {integrity: sha512-/Y76tmLGUJqVBXXCfVS8Q8FJqYGhgH4wl4qTA24E9v/IJM0XvJCGQVSW1QZ4J+VURO9h8YCa28sTFacZXwK7Rg==} + '@rollup/rollup-android-arm64@4.28.1': + resolution: {integrity: sha512-EbkK285O+1YMrg57xVA+Dp0tDBRB93/BZKph9XhMjezf6F4TpYjaUSuPt5J0fZXlSag0LmZAsTmdGGqPp4pQFA==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.25.0': - resolution: {integrity: sha512-YVT6L3UrKTlC0FpCZd0MGA7NVdp7YNaEqkENbWQ7AOVOqd/7VzyHpgIpc1mIaxRAo1ZsJRH45fq8j4N63I/vvg==} + '@rollup/rollup-darwin-arm64@4.28.1': + resolution: {integrity: sha512-prduvrMKU6NzMq6nxzQw445zXgaDBbMQvmKSJaxpaZ5R1QDM8w+eGxo6Y/jhT/cLoCvnZI42oEqf9KQNYz1fqQ==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.25.0': - resolution: {integrity: sha512-ZRL+gexs3+ZmmWmGKEU43Bdn67kWnMeWXLFhcVv5Un8FQcx38yulHBA7XR2+KQdYIOtD0yZDWBCudmfj6lQJoA==} + '@rollup/rollup-darwin-x64@4.28.1': + resolution: {integrity: sha512-WsvbOunsUk0wccO/TV4o7IKgloJ942hVFK1CLatwv6TJspcCZb9umQkPdvB7FihmdxgaKR5JyxDjWpCOp4uZlQ==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.25.0': - resolution: {integrity: sha512-xpEIXhiP27EAylEpreCozozsxWQ2TJbOLSivGfXhU4G1TBVEYtUPi2pOZBnvGXHyOdLAUUhPnJzH3ah5cqF01g==} + '@rollup/rollup-freebsd-arm64@4.28.1': + resolution: {integrity: sha512-HTDPdY1caUcU4qK23FeeGxCdJF64cKkqajU0iBnTVxS8F7H/7BewvYoG+va1KPSL63kQ1PGNyiwKOfReavzvNA==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.25.0': - resolution: {integrity: sha512-sC5FsmZGlJv5dOcURrsnIK7ngc3Kirnx3as2XU9uER+zjfyqIjdcMVgzy4cOawhsssqzoAX19qmxgJ8a14Qrqw==} + '@rollup/rollup-freebsd-x64@4.28.1': + resolution: {integrity: sha512-m/uYasxkUevcFTeRSM9TeLyPe2QDuqtjkeoTpP9SW0XxUWfcYrGDMkO/m2tTw+4NMAF9P2fU3Mw4ahNvo7QmsQ==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.25.0': - resolution: {integrity: sha512-uD/dbLSs1BEPzg564TpRAQ/YvTnCds2XxyOndAO8nJhaQcqQGFgv/DAVko/ZHap3boCvxnzYMa3mTkV/B/3SWA==} + '@rollup/rollup-linux-arm-gnueabihf@4.28.1': + resolution: {integrity: sha512-QAg11ZIt6mcmzpNE6JZBpKfJaKkqTm1A9+y9O+frdZJEuhQxiugM05gnCWiANHj4RmbgeVJpTdmKRmH/a+0QbA==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.25.0': - resolution: {integrity: sha512-ZVt/XkrDlQWegDWrwyC3l0OfAF7yeJUF4fq5RMS07YM72BlSfn2fQQ6lPyBNjt+YbczMguPiJoCfaQC2dnflpQ==} + '@rollup/rollup-linux-arm-musleabihf@4.28.1': + resolution: {integrity: sha512-dRP9PEBfolq1dmMcFqbEPSd9VlRuVWEGSmbxVEfiq2cs2jlZAl0YNxFzAQS2OrQmsLBLAATDMb3Z6MFv5vOcXg==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.25.0': - resolution: {integrity: sha512-qboZ+T0gHAW2kkSDPHxu7quaFaaBlynODXpBVnPxUgvWYaE84xgCKAPEYE+fSMd3Zv5PyFZR+L0tCdYCMAtG0A==} + '@rollup/rollup-linux-arm64-gnu@4.28.1': + resolution: {integrity: sha512-uGr8khxO+CKT4XU8ZUH1TTEUtlktK6Kgtv0+6bIFSeiSlnGJHG1tSFSjm41uQ9sAO/5ULx9mWOz70jYLyv1QkA==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.25.0': - resolution: {integrity: sha512-ndWTSEmAaKr88dBuogGH2NZaxe7u2rDoArsejNslugHZ+r44NfWiwjzizVS1nUOHo+n1Z6qV3X60rqE/HlISgw==} + '@rollup/rollup-linux-arm64-musl@4.28.1': + resolution: {integrity: sha512-QF54q8MYGAqMLrX2t7tNpi01nvq5RI59UBNx+3+37zoKX5KViPo/gk2QLhsuqok05sSCRluj0D00LzCwBikb0A==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-powerpc64le-gnu@4.25.0': - resolution: {integrity: sha512-BVSQvVa2v5hKwJSy6X7W1fjDex6yZnNKy3Kx1JGimccHft6HV0THTwNtC2zawtNXKUu+S5CjXslilYdKBAadzA==} + '@rollup/rollup-linux-loongarch64-gnu@4.28.1': + resolution: {integrity: sha512-vPul4uodvWvLhRco2w0GcyZcdyBfpfDRgNKU+p35AWEbJ/HPs1tOUrkSueVbBS0RQHAf/A+nNtDpvw95PeVKOA==} + cpu: [loong64] + os: [linux] + + '@rollup/rollup-linux-powerpc64le-gnu@4.28.1': + resolution: {integrity: sha512-pTnTdBuC2+pt1Rmm2SV7JWRqzhYpEILML4PKODqLz+C7Ou2apEV52h19CR7es+u04KlqplggmN9sqZlekg3R1A==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.25.0': - resolution: {integrity: sha512-G4hTREQrIdeV0PE2JruzI+vXdRnaK1pg64hemHq2v5fhv8C7WjVaeXc9P5i4Q5UC06d/L+zA0mszYIKl+wY8oA==} + '@rollup/rollup-linux-riscv64-gnu@4.28.1': + resolution: {integrity: sha512-vWXy1Nfg7TPBSuAncfInmAI/WZDd5vOklyLJDdIRKABcZWojNDY0NJwruY2AcnCLnRJKSaBgf/GiJfauu8cQZA==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.25.0': - resolution: {integrity: sha512-9T/w0kQ+upxdkFL9zPVB6zy9vWW1deA3g8IauJxojN4bnz5FwSsUAD034KpXIVX5j5p/rn6XqumBMxfRkcHapQ==} + '@rollup/rollup-linux-s390x-gnu@4.28.1': + resolution: {integrity: sha512-/yqC2Y53oZjb0yz8PVuGOQQNOTwxcizudunl/tFs1aLvObTclTwZ0JhXF2XcPT/zuaymemCDSuuUPXJJyqeDOg==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.25.0': - resolution: {integrity: sha512-ThcnU0EcMDn+J4B9LD++OgBYxZusuA7iemIIiz5yzEcFg04VZFzdFjuwPdlURmYPZw+fgVrFzj4CA64jSTG4Ig==} + '@rollup/rollup-linux-x64-gnu@4.28.1': + resolution: {integrity: sha512-fzgeABz7rrAlKYB0y2kSEiURrI0691CSL0+KXwKwhxvj92VULEDQLpBYLHpF49MSiPG4sq5CK3qHMnb9tlCjBw==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.25.0': - resolution: {integrity: sha512-zx71aY2oQxGxAT1JShfhNG79PnjYhMC6voAjzpu/xmMjDnKNf6Nl/xv7YaB/9SIa9jDYf8RBPWEnjcdlhlv1rQ==} + '@rollup/rollup-linux-x64-musl@4.28.1': + resolution: {integrity: sha512-xQTDVzSGiMlSshpJCtudbWyRfLaNiVPXt1WgdWTwWz9n0U12cI2ZVtWe/Jgwyv/6wjL7b66uu61Vg0POWVfz4g==} cpu: [x64] os: [linux] - '@rollup/rollup-win32-arm64-msvc@4.25.0': - resolution: {integrity: sha512-JT8tcjNocMs4CylWY/CxVLnv8e1lE7ff1fi6kbGocWwxDq9pj30IJ28Peb+Y8yiPNSF28oad42ApJB8oUkwGww==} + '@rollup/rollup-win32-arm64-msvc@4.28.1': + resolution: {integrity: sha512-wSXmDRVupJstFP7elGMgv+2HqXelQhuNf+IS4V+nUpNVi/GUiBgDmfwD0UGN3pcAnWsgKG3I52wMOBnk1VHr/A==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.25.0': - resolution: {integrity: sha512-dRLjLsO3dNOfSN6tjyVlG+Msm4IiZnGkuZ7G5NmpzwF9oOc582FZG05+UdfTbz5Jd4buK/wMb6UeHFhG18+OEg==} + '@rollup/rollup-win32-ia32-msvc@4.28.1': + resolution: {integrity: sha512-ZkyTJ/9vkgrE/Rk9vhMXhf8l9D+eAhbAVbsGsXKy2ohmJaWg0LPQLnIxRdRp/bKyr8tXuPlXhIoGlEB5XpJnGA==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.25.0': - resolution: {integrity: sha512-/RqrIFtLB926frMhZD0a5oDa4eFIbyNEwLLloMTEjmqfwZWXywwVVOVmwTsuyhC9HKkVEZcOOi+KV4U9wmOdlg==} + '@rollup/rollup-win32-x64-msvc@4.28.1': + resolution: {integrity: sha512-ZvK2jBafvttJjoIdKm/Q/Bh7IJ1Ose9IBOwpOXcOvW3ikGTQGmKDgxTC6oCAzW6PynbkKP8+um1du81XJHZ0JA==} cpu: [x64] os: [win32] + '@rtsao/scc@1.1.0': + resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} + '@sindresorhus/merge-streams@2.3.0': resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==} engines: {node: '>=18'} @@ -1017,68 +1131,68 @@ packages: peerDependencies: '@svgr/core': '*' - '@swc/core-darwin-arm64@1.9.2': - resolution: {integrity: sha512-nETmsCoY29krTF2PtspEgicb3tqw7Ci5sInTI03EU5zpqYbPjoPH99BVTjj0OsF53jP5MxwnLI5Hm21lUn1d6A==} + '@swc/core-darwin-arm64@1.10.1': + resolution: {integrity: sha512-NyELPp8EsVZtxH/mEqvzSyWpfPJ1lugpTQcSlMduZLj1EASLO4sC8wt8hmL1aizRlsbjCX+r0PyL+l0xQ64/6Q==} engines: {node: '>=10'} cpu: [arm64] os: [darwin] - '@swc/core-darwin-x64@1.9.2': - resolution: {integrity: sha512-9gD+bwBz8ZByjP6nZTXe/hzd0tySIAjpDHgkFiUrc+5zGF+rdTwhcNrzxNHJmy6mw+PW38jqII4uspFHUqqxuQ==} + '@swc/core-darwin-x64@1.10.1': + resolution: {integrity: sha512-L4BNt1fdQ5ZZhAk5qoDfUnXRabDOXKnXBxMDJ+PWLSxOGBbWE6aJTnu4zbGjJvtot0KM46m2LPAPY8ttknqaZA==} engines: {node: '>=10'} cpu: [x64] os: [darwin] - '@swc/core-linux-arm-gnueabihf@1.9.2': - resolution: {integrity: sha512-kYq8ief1Qrn+WmsTWAYo4r+Coul4dXN6cLFjiPZ29Cv5pyU+GFvSPAB4bEdMzwy99rCR0u2P10UExaeCjurjvg==} + '@swc/core-linux-arm-gnueabihf@1.10.1': + resolution: {integrity: sha512-Y1u9OqCHgvVp2tYQAJ7hcU9qO5brDMIrA5R31rwWQIAKDkJKtv3IlTHF0hrbWk1wPR0ZdngkQSJZple7G+Grvw==} engines: {node: '>=10'} cpu: [arm] os: [linux] - '@swc/core-linux-arm64-gnu@1.9.2': - resolution: {integrity: sha512-n0W4XiXlmEIVqxt+rD3ZpkogsEWUk1jJ+i5bQNgB+1JuWh0fBE8c/blDgTQXa0GB5lTPVDZQussgdNOCnAZwiA==} + '@swc/core-linux-arm64-gnu@1.10.1': + resolution: {integrity: sha512-tNQHO/UKdtnqjc7o04iRXng1wTUXPgVd8Y6LI4qIbHVoVPwksZydISjMcilKNLKIwOoUQAkxyJ16SlOAeADzhQ==} engines: {node: '>=10'} cpu: [arm64] os: [linux] - '@swc/core-linux-arm64-musl@1.9.2': - resolution: {integrity: sha512-8xzrOmsyCC1zrx2Wzx/h8dVsdewO1oMCwBTLc1gSJ/YllZYTb04pNm6NsVbzUX2tKddJVRgSJXV10j/NECLwpA==} + '@swc/core-linux-arm64-musl@1.10.1': + resolution: {integrity: sha512-x0L2Pd9weQ6n8dI1z1Isq00VHFvpBClwQJvrt3NHzmR+1wCT/gcYl1tp9P5xHh3ldM8Cn4UjWCw+7PaUgg8FcQ==} engines: {node: '>=10'} cpu: [arm64] os: [linux] - '@swc/core-linux-x64-gnu@1.9.2': - resolution: {integrity: sha512-kZrNz/PjRQKcchWF6W292jk3K44EoVu1ad5w+zbS4jekIAxsM8WwQ1kd+yjUlN9jFcF8XBat5NKIs9WphJCVXg==} + '@swc/core-linux-x64-gnu@1.10.1': + resolution: {integrity: sha512-yyYEwQcObV3AUsC79rSzN9z6kiWxKAVJ6Ntwq2N9YoZqSPYph+4/Am5fM1xEQYf/kb99csj0FgOelomJSobxQA==} engines: {node: '>=10'} cpu: [x64] os: [linux] - '@swc/core-linux-x64-musl@1.9.2': - resolution: {integrity: sha512-TTIpR4rjMkhX1lnFR+PSXpaL83TrQzp9znRdp2TzYrODlUd/R20zOwSo9vFLCyH6ZoD47bccY7QeGZDYT3nlRg==} + '@swc/core-linux-x64-musl@1.10.1': + resolution: {integrity: sha512-tcaS43Ydd7Fk7sW5ROpaf2Kq1zR+sI5K0RM+0qYLYYurvsJruj3GhBCaiN3gkzd8m/8wkqNqtVklWaQYSDsyqA==} engines: {node: '>=10'} cpu: [x64] os: [linux] - '@swc/core-win32-arm64-msvc@1.9.2': - resolution: {integrity: sha512-+Eg2d4icItKC0PMjZxH7cSYFLWk0aIp94LNmOw6tPq0e69ax6oh10upeq0D1fjWsKLmOJAWEvnXlayZcijEXDw==} + '@swc/core-win32-arm64-msvc@1.10.1': + resolution: {integrity: sha512-D3Qo1voA7AkbOzQ2UGuKNHfYGKL6eejN8VWOoQYtGHHQi1p5KK/Q7V1ku55oxXBsj79Ny5FRMqiRJpVGad7bjQ==} engines: {node: '>=10'} cpu: [arm64] os: [win32] - '@swc/core-win32-ia32-msvc@1.9.2': - resolution: {integrity: sha512-nLWBi4vZDdM/LkiQmPCakof8Dh1/t5EM7eudue04V1lIcqx9YHVRS3KMwEaCoHLGg0c312Wm4YgrWQd9vwZ5zQ==} + '@swc/core-win32-ia32-msvc@1.10.1': + resolution: {integrity: sha512-WalYdFoU3454Og+sDKHM1MrjvxUGwA2oralknXkXL8S0I/8RkWZOB++p3pLaGbTvOO++T+6znFbQdR8KRaa7DA==} engines: {node: '>=10'} cpu: [ia32] os: [win32] - '@swc/core-win32-x64-msvc@1.9.2': - resolution: {integrity: sha512-ik/k+JjRJBFkXARukdU82tSVx0CbExFQoQ78qTO682esbYXzjdB5eLVkoUbwen299pnfr88Kn4kyIqFPTje8Xw==} + '@swc/core-win32-x64-msvc@1.10.1': + resolution: {integrity: sha512-JWobfQDbTnoqaIwPKQ3DVSywihVXlQMbDuwik/dDWlj33A8oEHcjPOGs4OqcA3RHv24i+lfCQpM3Mn4FAMfacA==} engines: {node: '>=10'} cpu: [x64] os: [win32] - '@swc/core@1.9.2': - resolution: {integrity: sha512-dYyEkO6mRYtZFpnOsnYzv9rY69fHAHoawYOjGOEcxk9WYtaJhowMdP/w6NcOKnz2G7GlZaenjkzkMa6ZeQeMsg==} + '@swc/core@1.10.1': + resolution: {integrity: sha512-rQ4dS6GAdmtzKiCRt3LFVxl37FaY1cgL9kSUTnhQ2xc3fmHOd7jdJK/V4pSZMG1ruGTd0bsi34O2R0Olg9Zo/w==} engines: {node: '>=10'} peerDependencies: '@swc/helpers': '*' @@ -1089,25 +1203,25 @@ packages: '@swc/counter@0.1.3': resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} - '@swc/types@0.1.15': - resolution: {integrity: sha512-XKaZ+dzDIQ9Ot9o89oJQ/aluI17+VvUnIpYJTcZtvv1iYX6MzHh3Ik2CSR7MdPKpPwfZXHBeCingb2b4PoDVdw==} + '@swc/types@0.1.17': + resolution: {integrity: sha512-V5gRru+aD8YVyCOMAjMpWR1Ui577DD5KSJsHP8RAxopAH22jFz6GZd/qxqjO6MJHQhcsjvjOFXyDhyLQUnMveQ==} - '@tanstack/query-core@5.12.1': - resolution: {integrity: sha512-WbZztNmKq0t6QjdNmHzezbi/uifYo9j6e2GLJkodsYaYUlzMbAp91RDyeHkIZrm7EfO4wa6Sm5sxJZm5SPlh6w==} + '@tanstack/query-core@5.62.8': + resolution: {integrity: sha512-4fV31vDsUyvNGrKIOUNPrZztoyL187bThnoQOvAXEVlZbSiuPONpfx53634MKKdvsDir5NyOGm80ShFaoHS/mw==} - '@tanstack/query-devtools@5.12.1': - resolution: {integrity: sha512-AUWLgdZEYq/ckMZrtKpofOwqxuFiEIdy3gZOh/ouIBVra9ijXVTxYt5cZFSjXJT4q/o0DMii6xMZuIJx2qXZ6g==} + '@tanstack/query-devtools@5.61.4': + resolution: {integrity: sha512-21Tw+u8E3IJJj4A/Bct4H0uBaDTEu7zBrR79FeSyY+mS2gx5/m316oDtJiKkILc819VSTYt+sFzODoJNcpPqZQ==} - '@tanstack/react-query-devtools@5.12.2': - resolution: {integrity: sha512-EpjYxwUBj+CuzAiB++FMeHzNey4TynuudfWVMsZg0uzLrnR5I0j1CWHJkNsTutb/Db9TNG1Ae66n8ywVvPd1gQ==} + '@tanstack/react-query-devtools@5.62.8': + resolution: {integrity: sha512-SwjXjQTRONd9WPeKVQQ9framG7YNqPV8PS+EGNVNXAyz2XThulMRCvZnh2+3DggnjcYM7YcpnuoZ4RH7q13p0g==} peerDependencies: - '@tanstack/react-query': ^5.12.2 - react: ^18.0.0 + '@tanstack/react-query': ^5.62.8 + react: ^18 || ^19 - '@tanstack/react-query@5.12.2': - resolution: {integrity: sha512-BeWZu8zVFH20oRc+S/K9ADPgWjEzP/XQCGBNz5IbApUwPQAdwkQYbXODVL5AyAlWiSxhx+P2xlARPBApj2Yrog==} + '@tanstack/react-query@5.62.8': + resolution: {integrity: sha512-8TUstKxF/fysHonZsWg/hnlDVgasTdHx6Q+f1/s/oPKJBJbKUWPZEHwLTMOZgrZuroLMiqYKJ9w69Abm8mWP0Q==} peerDependencies: - react: ^18.0.0 + react: ^18 || ^19 '@tanstack/react-virtual@3.0.0-beta.54': resolution: {integrity: sha512-D1mDMf4UPbrtHRZZriCly5bXTBMhylslm4dhcHqTtDJ6brQcgGmk8YD9JdWBGWfGSWPKoh2x1H3e7eh+hgPXtQ==} @@ -1121,68 +1235,68 @@ packages: resolution: {integrity: sha512-rqI++FWClU5I2UBp4HXFvl+sBWkdigBkxnpJDQUWttNyG7IZP4FwQGhTNL5EOw0vI8i6eSAJ5frLqO7n7jbJdg==} engines: {node: '>= 14.6.0', npm: '>= 6.6.0', yarn: '>= 1.19.1'} - '@tauri-apps/cli-darwin-arm64@1.6.2': - resolution: {integrity: sha512-6mdRyf9DaLqlZvj8kZB09U3rwY+dOHSGzTZ7+GDg665GJb17f4cb30e8dExj6/aghcsOie9EGpgiURcDUvLNSQ==} + '@tauri-apps/cli-darwin-arm64@1.6.3': + resolution: {integrity: sha512-fQN6IYSL8bG4NvkdKE4sAGF4dF/QqqQq4hOAU+t8ksOzHJr0hUlJYfncFeJYutr/MMkdF7hYKadSb0j5EE9r0A==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@tauri-apps/cli-darwin-x64@1.6.2': - resolution: {integrity: sha512-PLxZY5dn38H3R9VRmBN/l0ZDB5JFanCwlK4rmpzDQPPg3tQmbu5vjSCP6TVj5U6aLKsj79kFyULblPr5Dn9+vw==} + '@tauri-apps/cli-darwin-x64@1.6.3': + resolution: {integrity: sha512-1yTXZzLajKAYINJOJhZfmMhCzweHSgKQ3bEgJSn6t+1vFkOgY8Yx4oFgWcybrrWI5J1ZLZAl47+LPOY81dLcyA==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@tauri-apps/cli-linux-arm-gnueabihf@1.6.2': - resolution: {integrity: sha512-xnpj4BLeeGOh5I/ewCQlYJZwHH0CBNBN+4q8BNWNQ9MKkjN9ST366RmHRzl2ANNgWwijOPxyce7GiUmvuH8Atw==} + '@tauri-apps/cli-linux-arm-gnueabihf@1.6.3': + resolution: {integrity: sha512-CjTEr9r9xgjcvos09AQw8QMRPuH152B1jvlZt4PfAsyJNPFigzuwed5/SF7XAd8bFikA7zArP4UT12RdBxrx7w==} engines: {node: '>= 10'} cpu: [arm] os: [linux] - '@tauri-apps/cli-linux-arm64-gnu@1.6.2': - resolution: {integrity: sha512-uaiRE0vE2P+tdsCngfKt+7yKr3VZXIq/t3w01DzSdnBgHSp0zmRsRR4AhZt7ibvoEgA8GzBP+eSHJdFNZsTU9w==} + '@tauri-apps/cli-linux-arm64-gnu@1.6.3': + resolution: {integrity: sha512-G9EUUS4M8M/Jz1UKZqvJmQQCKOzgTb8/0jZKvfBuGfh5AjFBu8LHvlFpwkKVm1l4951Xg4ulUp6P9Q7WRJ9XSA==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@tauri-apps/cli-linux-arm64-musl@1.6.2': - resolution: {integrity: sha512-o9JunVrMrhqTBLrdvEbS64W0bo1dPm0lxX51Mx+6x9SmbDjlEWGgaAHC3iKLK9khd5Yu1uO1e+8TJltAcScvmw==} + '@tauri-apps/cli-linux-arm64-musl@1.6.3': + resolution: {integrity: sha512-MuBTHJyNpZRbPVG8IZBN8+Zs7aKqwD22tkWVBcL1yOGL4zNNTJlkfL+zs5qxRnHlUsn6YAlbW/5HKocfpxVwBw==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@tauri-apps/cli-linux-x64-gnu@1.6.2': - resolution: {integrity: sha512-jL9f+o61DdQmNYKIt2Q3BA8YJ+hyC5+GdNxqDf7j5SoQ85j//YfUWbmp9ZgsPHVBxgSGZVvgGMNvf64Ykp0buQ==} + '@tauri-apps/cli-linux-x64-gnu@1.6.3': + resolution: {integrity: sha512-Uvi7M+NK3tAjCZEY1WGel+dFlzJmqcvu3KND+nqa22762NFmOuBIZ4KJR/IQHfpEYqKFNUhJfCGnpUDfiC3Oxg==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@tauri-apps/cli-linux-x64-musl@1.6.2': - resolution: {integrity: sha512-xsa4Pu9YMHKAX0J8pIoXfN/uhvAAAoECZDixDhWw8zi57VZ4QX28ycqolS+NscdD9NAGSgHk45MpBZWdvRtvjQ==} + '@tauri-apps/cli-linux-x64-musl@1.6.3': + resolution: {integrity: sha512-rc6B342C0ra8VezB/OJom9j/N+9oW4VRA4qMxS2f4bHY2B/z3J9NPOe6GOILeg4v/CV62ojkLsC3/K/CeF3fqQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@tauri-apps/cli-win32-arm64-msvc@1.6.2': - resolution: {integrity: sha512-eJtUOx2UFhJpCCkm5M5+4Co9JbjvgIHTdyS/hTSZfOEdT58CNEGVJXMA39FsSZXYoxYPE+9K7Km6haMozSmlxw==} + '@tauri-apps/cli-win32-arm64-msvc@1.6.3': + resolution: {integrity: sha512-cSH2qOBYuYC4UVIFtrc1YsGfc5tfYrotoHrpTvRjUGu0VywvmyNk82+ZsHEnWZ2UHmu3l3lXIGRqSWveLln0xg==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@tauri-apps/cli-win32-ia32-msvc@1.6.2': - resolution: {integrity: sha512-9Jwx3PrhNw3VKOgPISRRXPkvoEAZP+7rFRHXIo49dvlHy2E/o9qpWi1IntE33HWeazP6KhvsCjvXB2Ai4eGooA==} + '@tauri-apps/cli-win32-ia32-msvc@1.6.3': + resolution: {integrity: sha512-T8V6SJQqE4PSWmYBl0ChQVmS6AR2hXFHURH2DwAhgSGSQ6uBXgwlYFcfIeQpBQA727K2Eq8X2hGfvmoySyHMRw==} engines: {node: '>= 10'} cpu: [ia32] os: [win32] - '@tauri-apps/cli-win32-x64-msvc@1.6.2': - resolution: {integrity: sha512-5Z+ZjRFJE8MXghJe1UXvGephY5ZcgVhiTI9yuMi9xgX3CEaAXASatyXllzsvGJ9EDaWMEpa0PHjAzi7LBAWROw==} + '@tauri-apps/cli-win32-x64-msvc@1.6.3': + resolution: {integrity: sha512-HUkWZ+lYHI/Gjkh2QjHD/OBDpqLVmvjZGpLK9losur1Eg974Jip6k+vsoTUxQBCBDfj30eDBct9E1FvXOspWeg==} engines: {node: '>= 10'} cpu: [x64] os: [win32] - '@tauri-apps/cli@1.6.2': - resolution: {integrity: sha512-zpfZdxhm20s7d/Uejpg/T3a9sqLVe3Ih2ztINfy8v6iLw9Ohowkb9g+agZffYKlEWfOSpmCy69NFyBLj7OZL0A==} + '@tauri-apps/cli@1.6.3': + resolution: {integrity: sha512-q46umd6QLRKDd4Gg6WyZBGa2fWvk0pbeUA5vFomm4uOs1/17LIciHv2iQ4UD+2Yv5H7AO8YiE1t50V0POiEGEw==} engines: {node: '>= 10'} hasBin: true @@ -1232,8 +1346,8 @@ packages: '@types/d3-shape@3.1.6': resolution: {integrity: sha512-5KKk5aKGu2I+O6SONMYSNflgiP0WfZIQvVUMan50wHsLG1G94JlxEVnCpQARfTtzytuY0p/9PXXZb3I7giofIA==} - '@types/d3-time@3.0.3': - resolution: {integrity: sha512-2p6olUZ4w3s+07q3Tm2dbiMZy5pCDfYwtLXXHUnVzXgQlZ/OyPtUz6OL382BkOuGlLXqfT+wqv8Fw2v8/0geBw==} + '@types/d3-time@3.0.4': + resolution: {integrity: sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==} '@types/d3-timer@3.0.2': resolution: {integrity: sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==} @@ -1274,8 +1388,8 @@ packages: '@types/ms@0.7.34': resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} - '@types/node@20.10.3': - resolution: {integrity: sha512-XJavIpZqiXID5Yxnxv3RUDKTN5b81ddNC3ecsA0SoFXz/QU8OGBwZGMomiq0zw+uuqbL/krztv/DINAQ/EV4gg==} + '@types/node@20.17.10': + resolution: {integrity: sha512-/jrvh5h6NXhEauFFexRin69nA0uHJ5gwk4iDivp/DeoEua3uwCUto6PC86IpRITBOs4+6i2I56K5x5b6WYGXHA==} '@types/parse-json@4.0.2': resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} @@ -1283,17 +1397,16 @@ packages: '@types/prismjs@1.26.5': resolution: {integrity: sha512-AUZTa7hQ2KY5L7AmtSiqxlhWxb4ina0yd8hNbl4TWuqnv/pFP0nDMb3YrfSBf4hJVGLh2YEIBfKaBW/9UEl6IQ==} - '@types/prop-types@15.7.13': - resolution: {integrity: sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==} + '@types/prop-types@15.7.14': + resolution: {integrity: sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==} - '@types/react-dom@18.2.17': - resolution: {integrity: sha512-rvrT/M7Df5eykWFxn6MYt5Pem/Dbyc1N8Y0S9Mrkw2WFCRiqUgw9P7ul2NpwsXCSM1DVdENzdG9J5SreqfAIWg==} - - '@types/react@18.2.41': - resolution: {integrity: sha512-CwOGr/PiLiNBxEBqpJ7fO3kocP/2SSuC9fpH5K7tusrg4xPSRT/193rzolYwQnTN02We/ATXKnb6GqA5w4fRxw==} + '@types/react-dom@18.3.5': + resolution: {integrity: sha512-P4t6saawp+b/dFrUr2cvkVsfvPguwsxtH6dNIYRllMsefqFzkZk5UIjzyDOv5g1dXIPdG4Sp1yCR4Z6RCUsG/Q==} + peerDependencies: + '@types/react': ^18.0.0 - '@types/scheduler@0.23.0': - resolution: {integrity: sha512-YIoDCTH3Af6XM5VuwGG/QL/CJqga1Zm3NkU3HZ4ZHK2fRMPYP1VczsTUqtsf43PH/iJNVlPHAo2oWX7BSdB2Hw==} + '@types/react@18.3.17': + resolution: {integrity: sha512-opAQ5no6LqJNo9TqnxBKsgnkIYHozW9KSTlFVoSUJYh1Fl/sswkEoqIugRSm7tbh6pABtYjGAjW+GOS23j8qbw==} '@types/semver@7.5.8': resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} @@ -1310,8 +1423,8 @@ packages: '@types/unist@3.0.3': resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} - '@typescript-eslint/eslint-plugin@6.13.1': - resolution: {integrity: sha512-5bQDGkXaxD46bPvQt08BUz9YSaO4S0fB1LB5JHQuXTfkGPI3+UUeS387C/e9jRie5GqT8u5kFTrMvAjtX4O5kA==} + '@typescript-eslint/eslint-plugin@6.21.0': + resolution: {integrity: sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha @@ -1321,8 +1434,8 @@ packages: typescript: optional: true - '@typescript-eslint/parser@6.13.1': - resolution: {integrity: sha512-fs2XOhWCzRhqMmQf0eicLa/CWSaYss2feXsy7xBD/pLyWke/jCIVc2s1ikEAtSW7ina1HNhv7kONoEfVNEcdDQ==} + '@typescript-eslint/parser@6.21.0': + resolution: {integrity: sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -1331,12 +1444,12 @@ packages: typescript: optional: true - '@typescript-eslint/scope-manager@6.13.1': - resolution: {integrity: sha512-BW0kJ7ceiKi56GbT2KKzZzN+nDxzQK2DS6x0PiSMPjciPgd/JRQGMibyaN2cPt2cAvuoH0oNvn2fwonHI+4QUQ==} + '@typescript-eslint/scope-manager@6.21.0': + resolution: {integrity: sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==} engines: {node: ^16.0.0 || >=18.0.0} - '@typescript-eslint/type-utils@6.13.1': - resolution: {integrity: sha512-A2qPlgpxx2v//3meMqQyB1qqTg1h1dJvzca7TugM3Yc2USDY+fsRBiojAEo92HO7f5hW5mjAUF6qobOPzlBCBQ==} + '@typescript-eslint/type-utils@6.21.0': + resolution: {integrity: sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -1345,12 +1458,12 @@ packages: typescript: optional: true - '@typescript-eslint/types@6.13.1': - resolution: {integrity: sha512-gjeEskSmiEKKFIbnhDXUyiqVma1gRCQNbVZ1C8q7Zjcxh3WZMbzWVfGE9rHfWd1msQtPS0BVD9Jz9jded44eKg==} + '@typescript-eslint/types@6.21.0': + resolution: {integrity: sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==} engines: {node: ^16.0.0 || >=18.0.0} - '@typescript-eslint/typescript-estree@6.13.1': - resolution: {integrity: sha512-sBLQsvOC0Q7LGcUHO5qpG1HxRgePbT6wwqOiGLpR8uOJvPJbfs0mW3jPA3ujsDvfiVwVlWUDESNXv44KtINkUQ==} + '@typescript-eslint/typescript-estree@6.21.0': + resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: typescript: '*' @@ -1358,40 +1471,29 @@ packages: typescript: optional: true - '@typescript-eslint/utils@6.13.1': - resolution: {integrity: sha512-ouPn/zVoan92JgAegesTXDB/oUp6BP1v8WpfYcqh649ejNc9Qv+B4FF2Ff626kO1xg0wWwwG48lAJ4JuesgdOw==} + '@typescript-eslint/utils@6.21.0': + resolution: {integrity: sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 - '@typescript-eslint/visitor-keys@6.13.1': - resolution: {integrity: sha512-NDhQUy2tg6XGNBGDRm1XybOHSia8mcXmlbKWoQP+nm1BIIMxa55shyJfZkHpEBN62KNPLrocSM2PdPcaLgDKMQ==} + '@typescript-eslint/visitor-keys@6.21.0': + resolution: {integrity: sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==} engines: {node: ^16.0.0 || >=18.0.0} - '@ungap/structured-clone@1.2.0': - resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} - - '@vitejs/plugin-react-swc@3.5.0': - resolution: {integrity: sha512-1PrOvAaDpqlCV+Up8RkAh9qaiUjoDUcjtttyhXDKw53XA6Ve16SOp6cCOpRs8Dj8DqUQs6eTW5YkLcLJjrXAig==} - peerDependencies: - vite: ^4 || ^5 + '@ungap/structured-clone@1.2.1': + resolution: {integrity: sha512-fEzPV3hSkSMltkw152tJKNARhOupqbH96MZWyRjNaYZOMIzbrTeQDG+MTc6Mr2pgzFQzFxAfmhGDNP5QK++2ZA==} - '@vitejs/plugin-react-swc@3.7.1': - resolution: {integrity: sha512-vgWOY0i1EROUK0Ctg1hwhtC3SdcDjZcdit4Ups4aPkDcB1jYhmo+RMYWY87cmXMhvtD5uf8lV89j2w16vkdSVg==} - peerDependencies: - vite: ^4 || ^5 - - '@vitejs/plugin-react@4.2.0': - resolution: {integrity: sha512-+MHTH/e6H12kRp5HUkzOGqPMksezRMmW+TNzlh/QXfI8rRf6l2Z2yH/v12no1UvTwhZgEDMuQ7g7rrfMseU6FQ==} - engines: {node: ^14.18.0 || >=16.0.0} + '@vitejs/plugin-react-swc@3.7.2': + resolution: {integrity: sha512-y0byko2b2tSVVf5Gpng1eEhX1OvPC7x8yns1Fx8jDzlJp4LS6CMkCPfLw47cjyoMrshQDoQw4qcgjsU9VvlCew==} peerDependencies: - vite: ^4.2.0 || ^5.0.0 + vite: ^4 || ^5 || ^6 - '@vitejs/plugin-react@4.3.3': - resolution: {integrity: sha512-NooDe9GpHGqNns1i8XDERg0Vsg5SSYRhRxxyTGogUdkdNt47jal+fbuYi+Yfq6pzRCKXyoPcWisfxE6RIM3GKA==} + '@vitejs/plugin-react@4.3.4': + resolution: {integrity: sha512-SCCPBJtYLdE8PX/7ZQAs1QAZ8Jqwih+0VBLum1EGqmCCQal+MIUqLCzj3ZUy8ufbC0cAM4LRlSTm7IQJwWT4ug==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: - vite: ^4.2.0 || ^5.0.0 + vite: ^4.2.0 || ^5.0.0 || ^6.0.0 accepts@1.3.8: resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} @@ -1459,6 +1561,10 @@ packages: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} + array.prototype.findlast@1.2.5: + resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} + engines: {node: '>= 0.4'} + array.prototype.findlastindex@1.2.5: resolution: {integrity: sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==} engines: {node: '>= 0.4'} @@ -1541,16 +1647,20 @@ packages: resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} engines: {node: '>=18'} - byte-size@8.1.1: - resolution: {integrity: sha512-tUkzZWK0M/qdoLEqikxBWe4kumyuwjl3HO6zHTr4yEI23EojPtLYXdG1+AQY7MN0cGyNDvEaJ8wiYQm6P2bPxg==} + byte-size@8.2.1: + resolution: {integrity: sha512-pph2jjc3PxRLeB2nWfJy/tMiHnS6j7xhDlkglBp3KlchnJkILdZ2DmUyZ8svDJ5Z+q431vbhuoiuOvuGhY8fjw==} engines: {node: '>=12.17'} cache-content-type@1.0.1: resolution: {integrity: sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA==} engines: {node: '>= 6.0.0'} - call-bind@1.0.7: - resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} + call-bind-apply-helpers@1.0.1: + resolution: {integrity: sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==} + engines: {node: '>= 0.4'} + + call-bind@1.0.8: + resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} engines: {node: '>= 0.4'} callsites@3.1.0: @@ -1565,8 +1675,8 @@ packages: resolution: {integrity: sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==} engines: {node: '>=14.16'} - caniuse-lite@1.0.30001680: - resolution: {integrity: sha512-rPQy70G6AGUMnbwS1z6Xg+RkHYPAi18ihs47GH0jcxIG7wArmPgY3XbS2sRdBbxJljp3thdT8BIqv9ccCypiPA==} + caniuse-lite@1.0.30001687: + resolution: {integrity: sha512-0S/FDhf4ZiqrTUiQ39dKeUjYRjkv7lOZU1Dgif2rIqrTzX/1wV2hfKu9TOm1IHkdSijfLswxTFzl/cvir+SLSQ==} ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} @@ -1599,8 +1709,9 @@ packages: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} - classnames@2.3.2: - resolution: {integrity: sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==} + chokidar@4.0.1: + resolution: {integrity: sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==} + engines: {node: '>= 14.16.0'} classnames@2.5.1: resolution: {integrity: sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==} @@ -1656,8 +1767,8 @@ packages: resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} engines: {node: ^12.20.0 || >=14} - compare-versions@6.1.0: - resolution: {integrity: sha512-LNZQXhqUvqUTotpZ00qLSaify3b4VFD588aRr8MKFw4CMUr98ytzCW5wDH5qx/DEY5kCDXcbcRuCqL0szEf2tg==} + compare-versions@6.1.1: + resolution: {integrity: sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg==} concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} @@ -1697,12 +1808,12 @@ packages: typescript: optional: true - cross-spawn@6.0.5: - resolution: {integrity: sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==} + cross-spawn@6.0.6: + resolution: {integrity: sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==} engines: {node: '>=4.8'} - cross-spawn@7.0.5: - resolution: {integrity: sha512-ZVJrKKYunU38/76t0RMOulHOnUcbU9GbpWKAOZ0mhjr7CX6FVrH+4FrAapSOekrgFQ3f/8gwMEuIft0aKq6Hug==} + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} css-select@5.1.0: @@ -1801,8 +1912,8 @@ packages: supports-color: optional: true - debug@4.3.7: - resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} + debug@4.4.0: + resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} engines: {node: '>=6.0'} peerDependencies: supports-color: '*' @@ -1872,6 +1983,11 @@ packages: detect-browser@5.3.0: resolution: {integrity: sha512-53rsFbGdwMwlF7qvCt0ypLM5V5/Mbl0szB7GPN8y9NCcbknYOeVVXdrXEq+90IwAfrrzt6Hd+u2E2ntakICU8w==} + detect-libc@1.0.3: + resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==} + engines: {node: '>=0.10'} + hasBin: true + devlop@1.1.0: resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} @@ -1891,8 +2007,8 @@ packages: resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} engines: {node: '>=6.0.0'} - dom-helpers@3.4.0: - resolution: {integrity: sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA==} + dom-helpers@5.2.1: + resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==} dom-serializer@2.0.0: resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} @@ -1910,14 +2026,18 @@ packages: dot-case@3.0.4: resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} + dunder-proto@1.0.0: + resolution: {integrity: sha512-9+Sj30DIu+4KvHqMfLUGLFYL2PkURSYMVXJyXe92nFRvlYq5hBjLEhblKB+vkd/WVlUYMWigiY07T91Fkk0+4A==} + engines: {node: '>= 0.4'} + eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - electron-to-chromium@1.5.56: - resolution: {integrity: sha512-7lXb9dAvimCFdvUMTyucD4mnIndt/xhRKFAlky0CyFogdnNmdPQNoHI23msF/2V4mpTxMzgMdjK4+YRlFlRQZw==} + electron-to-chromium@1.5.71: + resolution: {integrity: sha512-dB68l59BI75W1BUGVTAEJy45CEVuEGy9qPVVQ8pnHyHMn36PLPPoE1mjLH+lo9rKulO3HC2OhbACI/8tCqJBcA==} emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -1936,12 +2056,12 @@ packages: error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} - es-abstract@1.23.3: - resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} + es-abstract@1.23.5: + resolution: {integrity: sha512-vlmniQ0WNPwXqA0BnmwV3Ng7HxiGlh6r5U6JcTMNx8OilcAGqVJBHJcPjqOMaczU9fRuRK5Px2BdVyPRnKMMVQ==} engines: {node: '>= 0.4'} - es-define-property@1.0.0: - resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} engines: {node: '>= 0.4'} es-errors@1.3.0: @@ -1963,8 +2083,8 @@ packages: es-shim-unscopables@1.0.2: resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} - es-to-primitive@1.2.1: - resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} + es-to-primitive@1.3.0: + resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} engines: {node: '>= 0.4'} esast-util-from-estree@2.0.0: @@ -2032,18 +2152,18 @@ packages: eslint-import-resolver-webpack: optional: true - eslint-plugin-import@2.29.0: - resolution: {integrity: sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg==} + eslint-plugin-import@2.31.0: + resolution: {integrity: sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==} engines: {node: '>=4'} peerDependencies: '@typescript-eslint/parser': '*' - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9 peerDependenciesMeta: '@typescript-eslint/parser': optional: true - eslint-plugin-prettier@5.0.1: - resolution: {integrity: sha512-m3u5RnR56asrwV/lDC4GHorlW75DsFfmUcjfCYylTUs85dBRnB7VM6xG8eCMJdeDRnppzmxZVf1GEPJvl1JmNg==} + eslint-plugin-prettier@5.2.1: + resolution: {integrity: sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: '@types/eslint': '>=8.0.0' @@ -2056,22 +2176,22 @@ packages: eslint-config-prettier: optional: true - eslint-plugin-react-hooks@4.6.0: - resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} + eslint-plugin-react-hooks@4.6.2: + resolution: {integrity: sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==} engines: {node: '>=10'} peerDependencies: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 - eslint-plugin-react-refresh@0.4.5: - resolution: {integrity: sha512-D53FYKJa+fDmZMtriODxvhwrO+IOqrxoEo21gMA0sjHdU6dPVH4OhyFip9ypl8HOF5RV5KdTo+rBQLvnY2cO8w==} + eslint-plugin-react-refresh@0.4.16: + resolution: {integrity: sha512-slterMlxAhov/DZO8NScf6mEeMBBXodFUolijDvrtTxyezyLoTQaa73FyYus/VbTdftd8wBgBxPMRk3poleXNQ==} peerDependencies: - eslint: '>=7' + eslint: '>=8.40' - eslint-plugin-react@7.33.2: - resolution: {integrity: sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==} + eslint-plugin-react@7.37.2: + resolution: {integrity: sha512-EsTAnj9fLVr/GZleBLFbj/sSuXeWmp1eXIN60ceYnZveqEaUCyW4X+Vh4WTdUhCkW4xutXYqTXCUSyqD4rB75w==} engines: {node: '>=4'} peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 eslint-plugin-simple-import-sort@10.0.0: resolution: {integrity: sha512-AeTvO9UCMSNzIHRkg8S6c3RPy5YEwKWSQPx3DYghLedo2ZQxowPFLGDN1AZ2evfg6r6mjBSZSLxLFsWSu3acsw==} @@ -2086,9 +2206,10 @@ packages: resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - eslint@8.55.0: - resolution: {integrity: sha512-iyUUAM0PCKj5QpwGfmCAG9XXbZCWsqP/eWAWrG/W0umvjuLRBECwSFdt+rCntju0xEH7teIABPwXpahftIaTdA==} + eslint@8.57.1: + resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. hasBin: true espree@9.6.1: @@ -2187,8 +2308,8 @@ packages: resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} engines: {node: ^10.12.0 || >=12.0.0} - flatted@3.3.1: - resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} + flatted@3.3.2: + resolution: {integrity: sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==} for-each@0.3.3: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} @@ -2196,8 +2317,8 @@ packages: fraction.js@4.3.7: resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} - framer-motion@10.16.12: - resolution: {integrity: sha512-w7Yzx0OzQ5Uh6uNkxaX+4TuAPuOKz3haSbjmHpdrqDpGuCJCpq6YP9Dy7JJWdZ6mJjndrg3Ao3vUwDajKNikCA==} + framer-motion@10.18.0: + resolution: {integrity: sha512-oGlDh1Q1XqYPksuTD/usb0I70hq95OUzmL9+6Zd+Hs4XV0oaISBa/UUMSjYiq6m8EUF32132mOJ8xVZS+I0S6w==} peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 @@ -2237,8 +2358,8 @@ packages: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} - get-intrinsic@1.2.4: - resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} + get-intrinsic@1.2.5: + resolution: {integrity: sha512-Y4+pKa7XeRUPWFNvOOYHkRYrfzW07oraURSvjDmRVOJ748OrVmeXtpE4+GCEHncjCjkTxPNRt8kEbxDhsn6VTg==} engines: {node: '>= 0.4'} get-port@7.1.0: @@ -2249,6 +2370,9 @@ packages: resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} engines: {node: '>= 0.4'} + get-text-width@1.0.3: + resolution: {integrity: sha512-kv1MaexPcR/qaZ4kN8sUDjG5pRp5ptHvxcDGDBTeGld1cmo7MnlCMH22jevyvs/VV7Ran203o7qAOq2+kWw9cA==} + glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} @@ -2289,8 +2413,9 @@ packages: globrex@0.1.2: resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} - gopd@1.0.1: - resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} @@ -2316,12 +2441,12 @@ packages: has-property-descriptors@1.0.2: resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} - has-proto@1.0.3: - resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} + has-proto@1.2.0: + resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} engines: {node: '>= 0.4'} - has-symbols@1.0.3: - resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} engines: {node: '>= 0.4'} has-tostringtag@1.0.2: @@ -2335,8 +2460,8 @@ packages: hast-util-classnames@3.0.0: resolution: {integrity: sha512-tI3JjoGDEBVorMAWK4jNRsfLMYmih1BUOG3VV36pH36njs1IEl7xkNrVTD2mD2yYHmQCa5R/fj61a8IAF4bRaQ==} - hast-util-from-parse5@8.0.1: - resolution: {integrity: sha512-Er/Iixbc7IEa7r/XLtuG52zoqn/b3Xng/w6aZQ0xGVxzhw5xUFxcRqdPzP6yFi/4HBYRaifaI5fQ1RH8n0ZeOQ==} + hast-util-from-parse5@8.0.2: + resolution: {integrity: sha512-SfMzfdAi/zAoZ1KkFEyyeXBn7u/ShQrfd675ZEE9M3qj+PMFX05xubzRyF76CCSJu8au9jgVxDV1+okFvgZU4A==} hast-util-has-property@3.0.0: resolution: {integrity: sha512-MNilsvEKLFpV604hwfhVStK0usFY/QmM5zX16bo7EjnAEGofr5YyI37kzopBlZJkHD4t887i+q/C8/tr5Q94cA==} @@ -2344,8 +2469,8 @@ packages: hast-util-parse-selector@4.0.0: resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==} - hast-util-raw@9.0.4: - resolution: {integrity: sha512-LHE65TD2YiNsHD3YuXcKPHXPLuYh/gjp12mOfU8jxSrm1f/yJpsb0F/KKljS6U9LJoP0Ux+tCe8iJ2AsPzTdgA==} + hast-util-raw@9.1.0: + resolution: {integrity: sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==} hast-util-sanitize@5.0.2: resolution: {integrity: sha512-3yTWghByc50aGS7JlGhk61SPenfE/p1oaFeNwkOOyrscaOkMGrcW9+Cy/QAIOBpZxP1yqDIzFMR0+Np0i0+usg==} @@ -2368,8 +2493,8 @@ packages: hast-util-whitespace@3.0.0: resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} - hastscript@8.0.0: - resolution: {integrity: sha512-dMOtzCEd3ABUeSIISmrETiKuyydk1w0pa+gE/uormcTpSYuaNJPbX1NU3JLyscSLjwAQM8bWMhhIlnCqnRvDTw==} + hastscript@9.0.0: + resolution: {integrity: sha512-jzaLBGavEDKHrc5EfFImKN7nZKKBdSLIdGvCwDZ9TfzbF2ffXiov8CKE445L2Z1Ek2t/m4SKQ2j6Ipv7NyUolw==} headers-polyfill@4.0.3: resolution: {integrity: sha512-IScLbePpkvO846sIwOtOTDjutRMWdXdJmXdMvk6gCBHxFO8d+QKOQedyZSxFTTFYRSmlgSTDtXqqq4pcenBXLQ==} @@ -2383,13 +2508,17 @@ packages: hosted-git-info@2.8.9: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} - html-dom-parser@5.0.4: - resolution: {integrity: sha512-azy8THLKd4Ar0OVJpEgX+MSjYvKdNDWlGiRBIlovMqEQYMAnLLXBhhiSwjylDD3RDdcCYT8Utg6uoRDeLHUyHg==} + html-dom-parser@5.0.12: + resolution: {integrity: sha512-LP2BI8aCnv6HCnO1kyQMaycqL7RCTUODGFWdKwrlc6ROG5rtbVEtE4mkBn1tokBMflUN7wyNKL4AXq7EMmga6Q==} - html-react-parser@5.0.7: - resolution: {integrity: sha512-00ve/0B7ukLUAcAbmD6Vh74EicB+ktLvAM4APeXJjiBsRiPz2ouochTvyUhOJB8apP2t40xAXvpmd+t50aVnJg==} + html-react-parser@5.2.1: + resolution: {integrity: sha512-4FZBYVzmlYzmNgoDVETZd/I/OnVR0d46UMnLdf/VdKTE973jImSfbonIRCov/AQQsL7zp7D1UKqMz0gbK6M0yA==} peerDependencies: - react: 0.14 || 15 || 16 || 17 || 18 + '@types/react': 0.14 || 15 || 16 || 17 || 18 || 19 + react: 0.14 || 15 || 16 || 17 || 18 || 19 + peerDependenciesMeta: + '@types/react': + optional: true html-url-attributes@3.0.1: resolution: {integrity: sha512-ol6UPyBWqsrO6EJySPz2O7ZSr856WDrEzM5zMqp+FJJLGMW35cLYmmZnl0vztAZxRUoNZJFTCohfjuIJ8I4QBQ==} @@ -2397,8 +2526,8 @@ packages: html-void-elements@3.0.0: resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} - htmlparser2@9.0.0: - resolution: {integrity: sha512-uxbSI98wmFT/G4P2zXx4OVx04qWUmyFPrD2/CNepa2Zo3GPNaCaaxElDgwUrwYWkK1nr9fft0Ya8dws8coDLLQ==} + htmlparser2@9.1.0: + resolution: {integrity: sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==} http-assert@1.5.0: resolution: {integrity: sha512-uPpH7OKX4H25hBmU6G1jWNaqJGpTXxey+YOUizJUAgu0AjLUeC8D73hTrhvDS5D+GJN1DN1+hhc/eF/wpxtp0w==} @@ -2412,8 +2541,8 @@ packages: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} - immutable@4.3.7: - resolution: {integrity: sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==} + immutable@5.0.3: + resolution: {integrity: sha512-P8IdPQHq3lA1xVeBRi5VPqUm5HDgKnx0Ru51wZz5mjxHr5n3RWhjIpOFU7ybkUxfB+5IToy+OLaHYDBIWsv+uw==} import-fresh@3.3.0: resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} @@ -2433,9 +2562,6 @@ packages: inline-style-parser@0.1.1: resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==} - inline-style-parser@0.2.2: - resolution: {integrity: sha512-EcKzdTHVe8wFVOGEYXiW9WmJXPjqi1T+234YpJr98RiFYKHV3cdy1+3mkTE+KHTHxFFLH51SfaGOoUdW+v7ViQ==} - inline-style-parser@0.2.4: resolution: {integrity: sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==} @@ -2464,15 +2590,16 @@ packages: resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} engines: {node: '>= 0.4'} - is-bigint@1.0.4: - resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + is-bigint@1.1.0: + resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} + engines: {node: '>= 0.4'} is-binary-path@2.1.0: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} - is-boolean-object@1.1.2: - resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} + is-boolean-object@1.2.0: + resolution: {integrity: sha512-kR5g0+dXf/+kXnqI+lu0URKYPKgICtHGGNCDSB10AaUFj3o/HkB3u7WfpRBJGFopxxY0oH3ux7ZsDjLtK7xqvw==} engines: {node: '>= 0.4'} is-callable@1.2.7: @@ -2503,8 +2630,9 @@ packages: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} - is-finalizationregistry@1.0.2: - resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==} + is-finalizationregistry@1.1.0: + resolution: {integrity: sha512-qfMdqbAQEwBw78ZyReKnlA8ezmPdb9BemzIIip/JkjaZUhitfXDkkr+3QTboW0JrSXT1QWyYShpvnNHGZ4c4yA==} + engines: {node: '>= 0.4'} is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} @@ -2537,8 +2665,8 @@ packages: is-node-process@1.2.0: resolution: {integrity: sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==} - is-number-object@1.0.7: - resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} + is-number-object@1.1.0: + resolution: {integrity: sha512-KVSZV0Dunv9DTPkhXwcZ3Q+tUc9TsaE1ZwX5J2WMvsSGS6Md8TFPun5uwh0yRdrNerI6vf/tbJxqSx4c1ZI1Lw==} engines: {node: '>= 0.4'} is-number@7.0.0: @@ -2553,8 +2681,8 @@ packages: resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} engines: {node: '>=12'} - is-regex@1.1.4: - resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} + is-regex@1.2.0: + resolution: {integrity: sha512-B6ohK4ZmoftlUe+uvenXSbPJFo6U37BH7oO1B3nQH8f/7h27N56s85MhUtbFJAziz5dcmuR3i8ovUl35zp8pFA==} engines: {node: '>= 0.4'} is-set@2.0.3: @@ -2565,12 +2693,12 @@ packages: resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} engines: {node: '>= 0.4'} - is-string@1.0.7: - resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} + is-string@1.1.0: + resolution: {integrity: sha512-PlfzajuF9vSo5wErv3MJAKD/nqf9ngAs1NFQYm16nUYFO2IzxJ2hcm+IOCg+EEopdykNNUhVq5cz35cAUxU8+g==} engines: {node: '>= 0.4'} - is-symbol@1.0.4: - resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} + is-symbol@1.1.0: + resolution: {integrity: sha512-qS8KkNNXUZ/I+nX6QT8ZS1/Yx0A444yhzdTKxCzKkNjQ9sHErBxJnJAgh+f5YhusYECEcjo4XcyH87hn6+ks0A==} engines: {node: '>= 0.4'} is-typed-array@1.1.13: @@ -2602,8 +2730,8 @@ packages: resolution: {integrity: sha512-FW5iMbeQ6rBGm/oKgzq2aW4KvAGpxPzYES8N4g4xNXUKpL1mclMvOe+76AcLDTvD+Ze+sOpVhgdAQEKF4L9iGQ==} engines: {node: '>= 0.4'} - itertools@2.1.2: - resolution: {integrity: sha512-NySaJiB+ikC4gDIMMv5pWNcT1FvJavz0TAcinb/+jKmVXs1EbkhY5WcrZS7Se2FvGNz7zI1pUhBJ6ImX3zXuHg==} + itertools@2.3.2: + resolution: {integrity: sha512-urRg24zOOKt4qQHm3gzQLK5Mima/kMSP3DUfcVw05W3veUHxxqHPTEW08aKY9GIZm9CKvnULVqXdjZWNYalJHQ==} js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -2788,6 +2916,14 @@ packages: resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==} engines: {node: '>= 0.10.0'} + merge-refs@1.3.0: + resolution: {integrity: sha512-nqXPXbso+1dcKDpPCXvwZyJILz+vSLqGGOnDrYHQYE+B8n9JTCekVLC65AfCpR4ggVyA/45Y0iR9LDyS2iI+zA==} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + merge2@1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} @@ -2885,8 +3021,8 @@ packages: micromark-util-sanitize-uri@2.0.1: resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==} - micromark-util-subtokenize@2.0.2: - resolution: {integrity: sha512-xKxhkB62vwHUuuxHe9Xqty3UaAsizV2YKq5OV344u3hFBbf8zIYrhYOWhAQb94MtMPkjTOzzjJ/hid9/dR5vFA==} + micromark-util-subtokenize@2.0.3: + resolution: {integrity: sha512-VXJJuNxYWSoYL6AJ6OQECCFGhIU2GGHMw8tahogePBrjkG8aCCas3ibkp7RnVOSTClg2is05/R7maAhF1XyQMg==} micromark-util-symbol@2.0.1: resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==} @@ -2916,6 +3052,10 @@ packages: resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} engines: {node: '>=10'} + minimatch@9.0.3: + resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} + engines: {node: '>=16 || 14 >=14.17'} + minimatch@9.0.5: resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} engines: {node: '>=16 || 14 >=14.17'} @@ -2926,8 +3066,8 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - msw@2.6.4: - resolution: {integrity: sha512-Pm4LmWQeytDsNCR+A7gt39XAdtH6zQb6jnIKRig0FlvYOn8eksn3s1nXxUfz5KYUjbckof7Z4p2ewzgffPoCbg==} + msw@2.6.8: + resolution: {integrity: sha512-nxXxnH6WALZ9a7rsQp4HU2AaD4iGAiouMmE/MY4al7pXTibgA6OZOuKhmN2WBIM6w9qMKwRtX8p2iOb45B2M/Q==} engines: {node: '>=18'} hasBin: true peerDependencies: @@ -2940,8 +3080,8 @@ packages: resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==} engines: {node: ^18.17.0 || >=20.5.0} - nanoid@3.3.7: - resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} + nanoid@3.3.8: + resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true @@ -2958,6 +3098,9 @@ packages: no-case@3.0.4: resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} + node-addon-api@7.1.1: + resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} + node-releases@2.0.18: resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} @@ -3008,10 +3151,6 @@ packages: resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} engines: {node: '>= 0.4'} - object.hasown@1.1.4: - resolution: {integrity: sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg==} - engines: {node: '>= 0.4'} - object.values@1.2.0: resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==} engines: {node: '>= 0.4'} @@ -3045,8 +3184,8 @@ packages: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} - p-timeout@6.1.2: - resolution: {integrity: sha512-UbD77BuZ9Bc9aABo74gfXhNvzC9Tx7SxtHSh1fxvx3jTLLYvmVhiQZZrJzqqU0jKbN32kb5VOKiLEQI/3bIjgQ==} + p-timeout@6.1.3: + resolution: {integrity: sha512-UJUyfKbwvr/uZSV6btANfb+0t/mOhKV/KXcCUTp8FcQI+v/0d+wXqH4htrW0E4rR6WiEO/EPvUFiV9D5OI4vlw==} engines: {node: '>=14.16'} parent-module@1.0.1: @@ -3128,10 +3267,6 @@ packages: postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - postcss@8.4.32: - resolution: {integrity: sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==} - engines: {node: ^10 || ^12 || >=14} - postcss@8.4.49: resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==} engines: {node: ^10 || ^12 || >=14} @@ -3165,8 +3300,8 @@ packages: property-information@6.5.0: resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==} - psl@1.10.0: - resolution: {integrity: sha512-KSKHEbjAnpUuAUserOq0FxGXCUrzC3WniuSJhvdbs102rL55266ZcHBqLWOsG30spQMlPdpy7icATiAQehg/iA==} + psl@1.15.0: + resolution: {integrity: sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==} punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} @@ -3195,22 +3330,22 @@ packages: peerDependencies: react: '>=16.0.0' - react-click-away-listener@2.2.3: - resolution: {integrity: sha512-p63JRQtK9d085+QHUJ2Pje22P/N4tEaXsS2x7tbbptriQqZ9o8xEk7G1JrxwND5YmEVc/VO4fC3+cSBsqqgLUQ==} + react-click-away-listener@2.2.4: + resolution: {integrity: sha512-cwdiIPt5dlNATewJIj/oro9aHg61vjnpkMzL4TfA3+lY4zNWV6d9PxWDSXFCYlADcb0bnVlGWVFkyY+WzFXznA==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom@18.2.0: - resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} + react-dom@18.3.1: + resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} peerDependencies: - react: ^18.2.0 + react: ^18.3.1 - react-hook-form@7.48.2: - resolution: {integrity: sha512-H0T2InFQb1hX7qKtDIZmvpU1Xfn/bdahWBN1fH19gSe4bBEqTfmlr7H3XWTaVtiK4/tpPaI1F3355GPMZYge+A==} - engines: {node: '>=12.22.0'} + react-hook-form@7.54.1: + resolution: {integrity: sha512-PUNzFwQeQ5oHiiTUO7GO/EJXGEtuun2Y1A59rLnZBBj+vNEOWt/3ERTiG1/zt7dVeJEM+4vDX/7XQ/qanuvPMg==} + engines: {node: '>=18.0.0'} peerDependencies: - react: ^16.8.0 || ^17 || ^18 + react: ^16.8.0 || ^17 || ^18 || ^19 react-hotkeys-hook@4.6.1: resolution: {integrity: sha512-XlZpbKUj9tkfgPgT9gA+1p7Ey6vFIZHttUjPqpTdyT5nqQ8mHL7elxvSbaC+dpSiHUSmr21Ya1mDxBZG3aje4Q==} @@ -3226,11 +3361,11 @@ packages: react-is@16.13.1: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} - react-lifecycles-compat@3.0.4: - resolution: {integrity: sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==} + react-is@18.3.1: + resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} - react-loading-skeleton@3.3.1: - resolution: {integrity: sha512-NilqqwMh2v9omN7LteiDloEVpFyMIa0VGqF+ukqp0ncVlYu1sKYbYGX9JEl+GtOT9TKsh04zCHAbavnQ2USldA==} + react-loading-skeleton@3.5.0: + resolution: {integrity: sha512-gxxSyLbrEAdXTKgfbpBEFZCO/P153DnqSCQau2+o6lNy1jgMRr2MmRmOzMmyrwSaSYLRB8g7b0waYPmUjz7IhQ==} peerDependencies: react: '>=16.8.0' @@ -3252,15 +3387,15 @@ packages: resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==} engines: {node: '>=0.10.0'} - react-router-dom@6.20.1: - resolution: {integrity: sha512-npzfPWcxfQN35psS7rJgi/EW0Gx6EsNjfdJSAk73U/HqMEJZ2k/8puxfwHFgDQhBGmS3+sjnGbMdMSV45axPQw==} + react-router-dom@6.28.0: + resolution: {integrity: sha512-kQ7Unsl5YdyOltsPGl31zOjLrDv+m2VcIEcIHqYYD3Lp0UppLjrzcfJqDJwXxFw3TH/yvapbnUvPlAj7Kx5nbg==} engines: {node: '>=14.0.0'} peerDependencies: react: '>=16.8' react-dom: '>=16.8' - react-router@6.20.1: - resolution: {integrity: sha512-ccvLrB4QeT5DlaxSFFYi/KR8UMQ4fcD8zBcR71Zp1kaYTC5oJKYAp1cbavzGrogwxca+ubjkd7XjFZKBW8CxPA==} + react-router@6.28.0: + resolution: {integrity: sha512-HrYdIFqdrnhDw0PqG/AKjAqEqM7AvxCz0DQ4h2W8k6nqmc5uRBYDag0SBxx9iYz5G8gnuNVLzUe13wl9eAsXXg==} engines: {node: '>=14.0.0'} peerDependencies: react: '>=16.8' @@ -3270,27 +3405,26 @@ packages: peerDependencies: react-dom: ^16.8.0 || ^17 || ^18 - react-smooth@2.0.5: - resolution: {integrity: sha512-BMP2Ad42tD60h0JW6BFaib+RJuV5dsXJK9Baxiv/HlNFjvRLqA9xrNKxVWnUIZPQfzUwGXIlU/dSYLU+54YGQA==} + react-smooth@4.0.3: + resolution: {integrity: sha512-PyxIrra8WZWrMRFcCiJsZ+JqFaxEINAt+v/w++wQKQlmO99Eh3+JTLeKApdTsLX2roBdWYXqPsaS8sO4UmdzIg==} peerDependencies: - prop-types: ^15.6.0 - react: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 - react-dom: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-transition-group@2.9.0: - resolution: {integrity: sha512-+HzNTCHpeQyl4MJ/bdE0u6XRMe9+XG/+aL4mCxVN4DnPBQ0/5bfHWPDuOZUzYdMj94daZaZdCCc1Dzt9R/xSSg==} + react-transition-group@4.4.5: + resolution: {integrity: sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==} peerDependencies: - react: '>=15.0.0' - react-dom: '>=15.0.0' + react: '>=16.6.0' + react-dom: '>=16.6.0' - react-virtualized-auto-sizer@1.0.24: - resolution: {integrity: sha512-3kCn7N9NEb3FlvJrSHWGQ4iVl+ydQObq2fHMn12i5wbtm74zHOPhz/i64OL3c1S1vi9i2GXtZqNqUJTQ+BnNfg==} + react-virtualized-auto-sizer@1.0.25: + resolution: {integrity: sha512-YHsksEGDfsHbHuaBVDYwJmcktblcHGafz4ZVuYPQYuSHMUGjpwmUCrAOcvMSGMwwk1eFWj1M/1GwYpNPuyhaBg==} peerDependencies: - react: ^15.3.0 || ^16.0.0-alpha || ^17.0.0 || ^18.0.0 - react-dom: ^15.3.0 || ^16.0.0-alpha || ^17.0.0 || ^18.0.0 + react: ^15.3.0 || ^16.0.0-alpha || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^15.3.0 || ^16.0.0-alpha || ^17.0.0 || ^18.0.0 || ^19.0.0 - react@18.2.0: - resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} + react@18.3.1: + resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} engines: {node: '>=0.10.0'} read-pkg@3.0.0: @@ -3301,16 +3435,19 @@ packages: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} + readdirp@4.0.2: + resolution: {integrity: sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==} + engines: {node: '>= 14.16.0'} + recharts-scale@0.4.5: resolution: {integrity: sha512-kivNFO+0OcUNu7jQquLXAxz1FIwZj8nrj+YkOKc5694NbjCvcT6aSZiIzNzd2Kul4o4rTto8QVR9lMNtxD4G1w==} - recharts@2.10.3: - resolution: {integrity: sha512-G4J96fKTZdfFQd6aQnZjo2nVNdXhp+uuLb00+cBTGLo85pChvm1+E67K3wBOHDE/77spcYb2Cy9gYWVqiZvQCg==} + recharts@2.15.0: + resolution: {integrity: sha512-cIvMxDfpAmqAmVgc4yb7pgm/O1tmmkl/CjrvXuW+62/+7jj/iF9Ykm+hb/UJt42TREHMyd3gb+pkgoa2MxgDIw==} engines: {node: '>=14'} peerDependencies: - prop-types: ^15.6.0 - react: ^16.0.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.0.0 || ^17.0.0 || ^18.0.0 + react: ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 recma-build-jsx@1.0.0: resolution: {integrity: sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==} @@ -3324,8 +3461,8 @@ packages: recma-stringify@1.0.0: resolution: {integrity: sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g==} - reflect.getprototypeof@1.0.6: - resolution: {integrity: sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==} + reflect.getprototypeof@1.0.8: + resolution: {integrity: sha512-B5dj6usc5dkk8uFliwjwDHM8To5/QwdKz9JcBZ8Ic4G1f0YmeeJTtE/ZTdgRFPAfxZFiUaPhZ1Jcs4qeagItGQ==} engines: {node: '>= 0.4'} regenerator-runtime@0.14.1: @@ -3395,8 +3532,8 @@ packages: engines: {node: '>=14.18.0', npm: '>=8.0.0'} hasBin: true - rollup@4.25.0: - resolution: {integrity: sha512-uVbClXmR6wvx5R1M3Od4utyLUxrmOcEm3pAtMphn73Apq19PDtHpgZoEvqH2YnnaNUuvKmg2DgRd2Sqv+odyqg==} + rollup@4.28.1: + resolution: {integrity: sha512-61fXYl/qNVinKmGSTHAZ6Yy8I3YIJC/r2m9feHo6SwVAVcLT5MPwOUFe7EuURA/4m0NR8lXG4BBXuo/IZEsjMg==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -3421,8 +3558,8 @@ packages: resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} engines: {node: '>= 0.4'} - sass@1.69.5: - resolution: {integrity: sha512-qg2+UCJibLr2LCVOt3OlPhr/dqVHWOa9XtZf2OjbLs/T4VPSJ00udtgJxH3neXZm+QqX8B+3cU7RaLqp1iVfcQ==} + sass@1.83.0: + resolution: {integrity: sha512-qsSxlayzoOjdvXMVLkzF84DJFc2HZEL/rFyGIKbbilYtAvlCxyuzUeff9LawTn4btVnLKg75Z8MMr1lxU1lfGw==} engines: {node: '>=14.0.0'} hasBin: true @@ -3469,8 +3606,9 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} - shell-quote@1.8.1: - resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} + shell-quote@1.8.2: + resolution: {integrity: sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==} + engines: {node: '>= 0.4'} shiki@0.14.7: resolution: {integrity: sha512-dNPAPrxSc87ua2sKJ3H5dQ/6ZaY8RNnaAqK+t0eG7p0Soi2ydiqbGOTaZCqaYvA/uZYfS1LJnemt3Q+mSfcPCg==} @@ -3552,6 +3690,9 @@ packages: resolution: {integrity: sha512-XZpspuSB7vJWhvJc9DLSlrXl1mcA2BdoY5jjnS135ydXqLoqhs96JjDtCkjJEQHvfqZIp9hBuBMgI589peyx9Q==} engines: {node: '>= 0.4'} + string.prototype.repeat@1.0.0: + resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==} + string.prototype.trim@1.2.9: resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} engines: {node: '>= 0.4'} @@ -3582,15 +3723,12 @@ packages: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} - style-to-js@1.1.10: - resolution: {integrity: sha512-VC7MBJa+y0RZhpnLKDPmVRLRswsASLmixkiZ5R8xZpNT9VyjeRzwnXd2pBzAWdgSGv/pCNNH01gPCCUsB9exYg==} + style-to-js@1.1.16: + resolution: {integrity: sha512-/Q6ld50hKYPH3d/r6nr117TZkHR0w0kGGIVfpG9N6D8NymRPM9RqCUv4pRpJ62E5DqOYx2AFpbZMyCPnjQCnOw==} style-to-object@0.4.4: resolution: {integrity: sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==} - style-to-object@1.0.5: - resolution: {integrity: sha512-rDRwHtoDD3UMMrmZ6BzOW0naTjMsVZLIjsGleSKS/0Oz+cgCfAPRspaqJuE8rDzpKha/nEvnM0IF4seEAZUTKQ==} - style-to-object@1.0.8: resolution: {integrity: sha512-xT47I/Eo0rwJmaXC4oilDGDWLohVhR6o/xAQcPQN8q6QBuZVL8qMYL85kLmST5cPjAorwvqIA4qXTRQoYHaL6g==} @@ -3617,8 +3755,8 @@ packages: engines: {node: '>=14.0.0'} hasBin: true - synckit@0.8.8: - resolution: {integrity: sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ==} + synckit@0.9.2: + resolution: {integrity: sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==} engines: {node: ^14.18.0 || >=16.0.0} tabbable@6.2.0: @@ -3626,12 +3764,10 @@ packages: tauri-plugin-log-api@https://codeload.github.com/tauri-apps/tauri-plugin-log/tar.gz/ee47371e75db7bc5190c74c3f94cfad3b81ac36d: resolution: {tarball: https://codeload.github.com/tauri-apps/tauri-plugin-log/tar.gz/ee47371e75db7bc5190c74c3f94cfad3b81ac36d} - name: tauri-plugin-log-api version: 0.0.0 tauri-plugin-window-state-api@https://codeload.github.com/tauri-apps/tauri-plugin-window-state/tar.gz/e4f784d8313c937fe4944827da5b51274ef1b93e: resolution: {tarball: https://codeload.github.com/tauri-apps/tauri-plugin-window-state/tar.gz/e4f784d8313c937fe4944827da5b51274ef1b93e} - name: tauri-plugin-window-state-api version: 0.0.0 text-table@0.2.0: @@ -3658,8 +3794,8 @@ packages: trough@2.2.0: resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} - ts-api-utils@1.4.0: - resolution: {integrity: sha512-032cPxaEKwM+GT3vA5JXNzIaizx388rhsSW79vGRNGXfRRAdEAn2mvk36PvK5HnOchyWZ7afLEXqYCvPCrzuzQ==} + ts-api-utils@1.4.3: + resolution: {integrity: sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==} engines: {node: '>=16'} peerDependencies: typescript: '>=4.2.0' @@ -3700,8 +3836,8 @@ packages: resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} engines: {node: '>=12.20'} - type-fest@4.26.1: - resolution: {integrity: sha512-yOGpmOAL7CkKe/91I5O3gPICmJNLJ1G4zFYVAsRHg7M64biSnPtRj0WNQt++bRkjYOqjWXrhnUw1utzmVErAdg==} + type-fest@4.30.0: + resolution: {integrity: sha512-G6zXWS1dLj6eagy6sVhOMQiLtJdxQBHIA9Z6HFUNLOlr6MFOgzV8wvmidtPONfPtEUv0uZsy77XJNzTAfwPDaA==} engines: {node: '>=16'} type-is@1.6.18: @@ -3716,20 +3852,20 @@ packages: resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} engines: {node: '>= 0.4'} - typed-array-byte-offset@1.0.2: - resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} + typed-array-byte-offset@1.0.3: + resolution: {integrity: sha512-GsvTyUHTriq6o/bHcTd0vM7OQ9JEdlvluu9YISaA7+KzDzPaIzEeDFNkTfhdE3MYcNhNi0vq/LlegYgIs5yPAw==} engines: {node: '>= 0.4'} - typed-array-length@1.0.6: - resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} + typed-array-length@1.0.7: + resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} engines: {node: '>= 0.4'} - typedoc@0.25.4: - resolution: {integrity: sha512-Du9ImmpBCw54bX275yJrxPVnjdIyJO/84co0/L9mwe0R3G4FSR6rQ09AlXVRvZEGMUg09+z/usc8mgygQ1aidA==} + typedoc@0.25.13: + resolution: {integrity: sha512-pQqiwiJ+Z4pigfOnnysObszLiU3mVLWAExSPf+Mu06G/qsc3wzbuM56SZQvONhHLncLUhYzOVkjFFpFfL5AzhQ==} engines: {node: '>= 16'} hasBin: true peerDependencies: - typescript: 4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x || 5.3.x + typescript: 4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x typesafe-i18n@5.26.2: resolution: {integrity: sha512-2QAriFmiY5JwUAJtG7yufoE/XZ1aFBY++wj7YFS2yo89a3jLBfKoWSdq5JfQYk1V2BS7V2c/u+KEcaCQoE65hw==} @@ -3744,16 +3880,16 @@ packages: eslint: '>= 8.0.0' typescript: '>= 4.0.0' - typescript@5.3.2: - resolution: {integrity: sha512-6l+RyNy7oAHDfxC4FzSJcz9vnjTKxrLpDG5M2Vu4SHRVNg6xzqZp6LYSR9zjqQTu8DU/f5xwxUdADOkbrIX2gQ==} + typescript@5.2.2: + resolution: {integrity: sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==} engines: {node: '>=14.17'} hasBin: true unbox-primitive@1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} - undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + undici-types@6.19.8: + resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} unicorn-magic@0.1.0: resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} @@ -3796,8 +3932,8 @@ packages: url-parse@1.5.10: resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} - use-breakpoint@4.0.1: - resolution: {integrity: sha512-Fa5Duxv3BY3bw8kmj/lmryTETXVUmBQeYJpBgPJ2yJRiIaGVG8rlMNKQE+JS2rywCZHWaggVUz+ytbr7sH/yyg==} + use-breakpoint@4.0.5: + resolution: {integrity: sha512-f/VVthAzRM8PYBK2bqDpsP0/farfDYAFiqVcVbyIBpbafNi1pNFEPqHa87Nqnp3NtnME8ScBpOL6grOhSggenw==} peerDependencies: react: '>=18' react-dom: '>=18' @@ -3808,8 +3944,8 @@ packages: peerDependencies: react: '>=16.13' - use-sync-external-store@1.2.0: - resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==} + use-sync-external-store@1.2.2: + resolution: {integrity: sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -3844,8 +3980,8 @@ packages: vite: optional: true - vite@4.5.3: - resolution: {integrity: sha512-kQL23kMeX92v3ph7IauVkXkikdDRsYMGTVl5KY2E9OY4ONLvkHf04MDTbnfo6NKxZiDLWzVpP5oTa8hQD8U3dg==} + vite@4.5.5: + resolution: {integrity: sha512-ifW3Lb2sMdX+WU91s3R0FyQlAyLxOzCSCP37ujw0+r5POeHPwe6udWVIElKQq8gk3t7b8rkmvqC6IHBpCff4GQ==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true peerDependencies: @@ -3912,19 +4048,20 @@ packages: web-namespaces@2.0.1: resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} - which-boxed-primitive@1.0.2: - resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + which-boxed-primitive@1.1.0: + resolution: {integrity: sha512-Ei7Miu/AXe2JJ4iNF5j/UphAgRoma4trE6PtisM09bPygb3egMH3YLW/befsWb1A1AxvNSFidOFTB18XtnIIng==} + engines: {node: '>= 0.4'} - which-builtin-type@1.1.4: - resolution: {integrity: sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w==} + which-builtin-type@1.2.0: + resolution: {integrity: sha512-I+qLGQ/vucCby4tf5HsLmGueEla4ZhwTBSqaooS+Y0BuxN4Cp+okmGuV+8mXZ84KDI9BA+oklo+RzKg0ONdSUA==} engines: {node: '>= 0.4'} which-collection@1.0.2: resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} engines: {node: '>= 0.4'} - which-typed-array@1.1.15: - resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} + which-typed-array@1.1.16: + resolution: {integrity: sha512-g+N+GAWiRj66DngFwHvISJd+ITsyphZvD1vChfVg6cEdnzy53GzB3oy0fUNlvhz7H7+MiqhYr26qxQShCpKTTQ==} engines: {node: '>= 0.4'} which@1.3.1: @@ -3990,16 +4127,17 @@ packages: resolution: {integrity: sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==} engines: {node: '>=18'} - zod@3.22.4: - resolution: {integrity: sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==} + zod@3.24.1: + resolution: {integrity: sha512-muH7gBL9sI1nciMZV67X5fTKKBLtwpZ5VBp1vsOQzj1MhrBZ4wlVCm3gedKZWLp0Oyel8sIGfeiz54Su+OVT+A==} - zustand@4.4.7: - resolution: {integrity: sha512-QFJWJMdlETcI69paJwhSMJz7PPWjVP8Sjhclxmxmxv/RYI7ZOvR5BHX+ktH0we9gTWQMxcne8q1OY8xxz604gw==} - engines: {node: '>=12.7.0'} + zustand@5.0.2: + resolution: {integrity: sha512-8qNdnJVJlHlrKXi50LDqqUNmUbuBjoKLrYQBnoChIbVph7vni+sY+YpvdjXG9YLd/Bxr6scMcR+rm5H3aSqPaw==} + engines: {node: '>=12.20.0'} peerDependencies: - '@types/react': '>=16.8' - immer: '>=9.0' - react: '>=16.8' + '@types/react': '>=18.0.0' + immer: '>=9.0.6' + react: '>=18.0.0' + use-sync-external-store: '>=1.2.0' peerDependenciesMeta: '@types/react': optional: true @@ -4007,6 +4145,8 @@ packages: optional: true react: optional: true + use-sync-external-store: + optional: true zwitch@2.0.4: resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} @@ -4024,39 +4164,39 @@ snapshots: js-tokens: 4.0.0 picocolors: 1.1.1 - '@babel/compat-data@7.26.2': {} + '@babel/compat-data@7.26.3': {} '@babel/core@7.26.0': dependencies: '@ampproject/remapping': 2.3.0 '@babel/code-frame': 7.26.2 - '@babel/generator': 7.26.2 + '@babel/generator': 7.26.3 '@babel/helper-compilation-targets': 7.25.9 '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) '@babel/helpers': 7.26.0 - '@babel/parser': 7.26.2 + '@babel/parser': 7.26.3 '@babel/template': 7.25.9 - '@babel/traverse': 7.25.9 - '@babel/types': 7.26.0 + '@babel/traverse': 7.26.4 + '@babel/types': 7.26.3 convert-source-map: 2.0.0 - debug: 4.3.7 + debug: 4.4.0 gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/generator@7.26.2': + '@babel/generator@7.26.3': dependencies: - '@babel/parser': 7.26.2 - '@babel/types': 7.26.0 + '@babel/parser': 7.26.3 + '@babel/types': 7.26.3 '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 jsesc: 3.0.2 '@babel/helper-compilation-targets@7.25.9': dependencies: - '@babel/compat-data': 7.26.2 + '@babel/compat-data': 7.26.3 '@babel/helper-validator-option': 7.25.9 browserslist: 4.24.2 lru-cache: 5.1.1 @@ -4064,8 +4204,8 @@ snapshots: '@babel/helper-module-imports@7.25.9': dependencies: - '@babel/traverse': 7.25.9 - '@babel/types': 7.26.0 + '@babel/traverse': 7.26.4 + '@babel/types': 7.26.3 transitivePeerDependencies: - supports-color @@ -4074,7 +4214,7 @@ snapshots: '@babel/core': 7.26.0 '@babel/helper-module-imports': 7.25.9 '@babel/helper-validator-identifier': 7.25.9 - '@babel/traverse': 7.25.9 + '@babel/traverse': 7.26.4 transitivePeerDependencies: - supports-color @@ -4089,11 +4229,11 @@ snapshots: '@babel/helpers@7.26.0': dependencies: '@babel/template': 7.25.9 - '@babel/types': 7.26.0 + '@babel/types': 7.26.3 - '@babel/parser@7.26.2': + '@babel/parser@7.26.3': dependencies: - '@babel/types': 7.26.0 + '@babel/types': 7.26.3 '@babel/plugin-transform-react-jsx-self@7.25.9(@babel/core@7.26.0)': dependencies: @@ -4112,22 +4252,22 @@ snapshots: '@babel/template@7.25.9': dependencies: '@babel/code-frame': 7.26.2 - '@babel/parser': 7.26.2 - '@babel/types': 7.26.0 + '@babel/parser': 7.26.3 + '@babel/types': 7.26.3 - '@babel/traverse@7.25.9': + '@babel/traverse@7.26.4': dependencies: '@babel/code-frame': 7.26.2 - '@babel/generator': 7.26.2 - '@babel/parser': 7.26.2 + '@babel/generator': 7.26.3 + '@babel/parser': 7.26.3 '@babel/template': 7.25.9 - '@babel/types': 7.26.0 - debug: 4.3.7 + '@babel/types': 7.26.3 + debug: 4.4.0 globals: 11.12.0 transitivePeerDependencies: - supports-color - '@babel/types@7.26.0': + '@babel/types@7.26.3': dependencies: '@babel/helper-string-parser': 7.25.9 '@babel/helper-validator-identifier': 7.25.9 @@ -4145,13 +4285,13 @@ snapshots: '@types/tough-cookie': 4.0.5 tough-cookie: 4.1.4 - '@emotion/babel-plugin@11.12.0': + '@emotion/babel-plugin@11.13.5': dependencies: '@babel/helper-module-imports': 7.25.9 '@babel/runtime': 7.26.0 '@emotion/hash': 0.9.2 '@emotion/memoize': 0.9.0 - '@emotion/serialize': 1.3.2 + '@emotion/serialize': 1.3.3 babel-plugin-macros: 3.1.0 convert-source-map: 1.9.0 escape-string-regexp: 4.0.0 @@ -4161,11 +4301,11 @@ snapshots: transitivePeerDependencies: - supports-color - '@emotion/cache@11.13.1': + '@emotion/cache@11.13.5': dependencies: '@emotion/memoize': 0.9.0 '@emotion/sheet': 1.4.0 - '@emotion/utils': 1.4.1 + '@emotion/utils': 1.4.2 '@emotion/weak-memoize': 0.4.0 stylis: 4.2.0 @@ -4185,52 +4325,54 @@ snapshots: '@emotion/memoize@0.9.0': {} - '@emotion/react@11.13.3(@types/react@18.2.41)(react@18.2.0)': + '@emotion/react@11.13.5(@types/react@18.3.17)(react@18.3.1)': dependencies: '@babel/runtime': 7.26.0 - '@emotion/babel-plugin': 11.12.0 - '@emotion/cache': 11.13.1 - '@emotion/serialize': 1.3.2 - '@emotion/use-insertion-effect-with-fallbacks': 1.1.0(react@18.2.0) - '@emotion/utils': 1.4.1 + '@emotion/babel-plugin': 11.13.5 + '@emotion/cache': 11.13.5 + '@emotion/serialize': 1.3.3 + '@emotion/use-insertion-effect-with-fallbacks': 1.1.0(react@18.3.1) + '@emotion/utils': 1.4.2 '@emotion/weak-memoize': 0.4.0 - '@types/react': 18.2.41 hoist-non-react-statics: 3.3.2 - react: 18.2.0 + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.17 transitivePeerDependencies: - supports-color - '@emotion/serialize@1.3.2': + '@emotion/serialize@1.3.3': dependencies: '@emotion/hash': 0.9.2 '@emotion/memoize': 0.9.0 '@emotion/unitless': 0.10.0 - '@emotion/utils': 1.4.1 + '@emotion/utils': 1.4.2 csstype: 3.1.3 '@emotion/sheet@1.4.0': {} - '@emotion/styled@11.13.0(@emotion/react@11.13.3)(@types/react@18.2.41)(react@18.2.0)': + '@emotion/styled@11.13.5(@emotion/react@11.13.5(@types/react@18.3.17)(react@18.3.1))(@types/react@18.3.17)(react@18.3.1)': dependencies: '@babel/runtime': 7.26.0 - '@emotion/babel-plugin': 11.12.0 + '@emotion/babel-plugin': 11.13.5 '@emotion/is-prop-valid': 1.3.1 - '@emotion/react': 11.13.3(@types/react@18.2.41)(react@18.2.0) - '@emotion/serialize': 1.3.2 - '@emotion/use-insertion-effect-with-fallbacks': 1.1.0(react@18.2.0) - '@emotion/utils': 1.4.1 - '@types/react': 18.2.41 - react: 18.2.0 + '@emotion/react': 11.13.5(@types/react@18.3.17)(react@18.3.1) + '@emotion/serialize': 1.3.3 + '@emotion/use-insertion-effect-with-fallbacks': 1.1.0(react@18.3.1) + '@emotion/utils': 1.4.2 + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.17 transitivePeerDependencies: - supports-color '@emotion/unitless@0.10.0': {} - '@emotion/use-insertion-effect-with-fallbacks@1.1.0(react@18.2.0)': + '@emotion/use-insertion-effect-with-fallbacks@1.1.0(react@18.3.1)': dependencies: - react: 18.2.0 + react: 18.3.1 - '@emotion/utils@1.4.1': {} + '@emotion/utils@1.4.2': {} '@emotion/weak-memoize@0.4.0': {} @@ -4369,9 +4511,9 @@ snapshots: '@esbuild/win32-x64@0.21.5': optional: true - '@eslint-community/eslint-utils@4.4.1(eslint@8.55.0)': + '@eslint-community/eslint-utils@4.4.1(eslint@8.57.1)': dependencies: - eslint: 8.55.0 + eslint: 8.57.1 eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.1': {} @@ -4379,7 +4521,7 @@ snapshots: '@eslint/eslintrc@2.1.4': dependencies: ajv: 6.12.6 - debug: 4.3.7 + debug: 4.4.0 espree: 9.6.1 globals: 13.24.0 ignore: 5.3.2 @@ -4390,7 +4532,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@8.55.0': {} + '@eslint/js@8.57.1': {} '@floating-ui/core@1.6.8': dependencies: @@ -4401,48 +4543,46 @@ snapshots: '@floating-ui/core': 1.6.8 '@floating-ui/utils': 0.2.8 - '@floating-ui/react-dom@2.1.2(react-dom@18.2.0)(react@18.2.0)': + '@floating-ui/react-dom@2.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@floating-ui/dom': 1.6.12 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - '@floating-ui/react@0.26.3(react-dom@18.2.0)(react@18.2.0)': + '@floating-ui/react@0.26.28(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@floating-ui/react-dom': 2.1.2(react-dom@18.2.0)(react@18.2.0) - '@floating-ui/utils': 0.1.6 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) + '@floating-ui/react-dom': 2.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@floating-ui/utils': 0.2.8 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) tabbable: 6.2.0 - '@floating-ui/utils@0.1.6': {} - '@floating-ui/utils@0.2.8': {} - '@hookform/devtools@4.3.1(@types/react@18.2.41)(react-dom@18.2.0)(react@18.2.0)': + '@hookform/devtools@4.3.3(@types/react@18.3.17)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@emotion/react': 11.13.3(@types/react@18.2.41)(react@18.2.0) - '@emotion/styled': 11.13.0(@emotion/react@11.13.3)(@types/react@18.2.41)(react@18.2.0) + '@emotion/react': 11.13.5(@types/react@18.3.17)(react@18.3.1) + '@emotion/styled': 11.13.5(@emotion/react@11.13.5(@types/react@18.3.17)(react@18.3.1))(@types/react@18.3.17)(react@18.3.1) '@types/lodash': 4.17.13 - little-state-machine: 4.8.0(react@18.2.0) + little-state-machine: 4.8.0(react@18.3.1) lodash: 4.17.21 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - react-simple-animate: 3.5.2(react-dom@18.2.0) - use-deep-compare-effect: 1.8.1(react@18.2.0) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-simple-animate: 3.5.2(react-dom@18.3.1(react@18.3.1)) + use-deep-compare-effect: 1.8.1(react@18.3.1) uuid: 8.3.2 transitivePeerDependencies: - '@types/react' - supports-color - '@hookform/resolvers@3.3.2(react-hook-form@7.48.2)': + '@hookform/resolvers@3.9.1(react-hook-form@7.54.1(react@18.3.1))': dependencies: - react-hook-form: 7.48.2(react@18.2.0) + react-hook-form: 7.54.1(react@18.3.1) - '@humanwhocodes/config-array@0.11.14': + '@humanwhocodes/config-array@0.13.0': dependencies: '@humanwhocodes/object-schema': 2.0.3 - debug: 4.3.7 + debug: 4.4.0 minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -4451,16 +4591,16 @@ snapshots: '@humanwhocodes/object-schema@2.0.3': {} - '@inquirer/confirm@5.0.2(@types/node@20.10.3)': + '@inquirer/confirm@5.1.0(@types/node@20.17.10)': dependencies: - '@inquirer/core': 10.1.0(@types/node@20.10.3) - '@inquirer/type': 3.0.1(@types/node@20.10.3) - '@types/node': 20.10.3 + '@inquirer/core': 10.1.1(@types/node@20.17.10) + '@inquirer/type': 3.0.1(@types/node@20.17.10) + '@types/node': 20.17.10 - '@inquirer/core@10.1.0(@types/node@20.10.3)': + '@inquirer/core@10.1.1(@types/node@20.17.10)': dependencies: '@inquirer/figures': 1.0.8 - '@inquirer/type': 3.0.1(@types/node@20.10.3) + '@inquirer/type': 3.0.1(@types/node@20.17.10) ansi-escapes: 4.3.2 cli-width: 4.1.0 mute-stream: 2.0.0 @@ -4473,9 +4613,9 @@ snapshots: '@inquirer/figures@1.0.8': {} - '@inquirer/type@3.0.1(@types/node@20.10.3)': + '@inquirer/type@3.0.1(@types/node@20.17.10)': dependencies: - '@types/node': 20.10.3 + '@types/node': 20.17.10 '@jridgewell/gen-mapping@0.3.5': dependencies: @@ -4494,54 +4634,54 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.0 - '@ladle/react-context@1.0.1(react-dom@18.2.0)(react@18.2.0)': + '@ladle/react-context@1.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - '@ladle/react@4.1.1(@types/node@20.10.3)(@types/react@18.2.41)(acorn@8.14.0)(react-dom@18.2.0)(react@18.2.0)(sass@1.69.5)(typescript@5.3.2)': + '@ladle/react@4.1.2(@types/node@20.17.10)(@types/react@18.3.17)(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.83.0)(typescript@5.2.2)': dependencies: '@babel/code-frame': 7.26.2 '@babel/core': 7.26.0 - '@babel/generator': 7.26.2 - '@babel/parser': 7.26.2 + '@babel/generator': 7.26.3 + '@babel/parser': 7.26.3 '@babel/template': 7.25.9 - '@babel/traverse': 7.25.9 - '@babel/types': 7.26.0 - '@ladle/react-context': 1.0.1(react-dom@18.2.0)(react@18.2.0) + '@babel/traverse': 7.26.4 + '@babel/types': 7.26.3 + '@ladle/react-context': 1.0.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@mdx-js/mdx': 3.1.0(acorn@8.14.0) - '@mdx-js/react': 3.1.0(@types/react@18.2.41)(react@18.2.0) - '@vitejs/plugin-react': 4.3.3(vite@5.4.11) - '@vitejs/plugin-react-swc': 3.7.1(vite@5.4.11) + '@mdx-js/react': 3.1.0(@types/react@18.3.17)(react@18.3.1) + '@vitejs/plugin-react': 4.3.4(vite@5.4.11(@types/node@20.17.10)(sass@1.83.0)) + '@vitejs/plugin-react-swc': 3.7.2(vite@5.4.11(@types/node@20.17.10)(sass@1.83.0)) axe-core: 4.10.2 boxen: 7.1.1 chokidar: 3.6.0 classnames: 2.5.1 commander: 12.1.0 - cross-spawn: 7.0.5 - debug: 4.3.7 + cross-spawn: 7.0.6 + debug: 4.4.0 get-port: 7.1.0 globby: 14.0.2 history: 5.3.0 koa: 2.15.3 koa-connect: 2.1.0 lodash.merge: 4.6.2 - msw: 2.6.4(@types/node@20.10.3)(typescript@5.3.2) + msw: 2.6.8(@types/node@20.17.10)(typescript@5.2.2) open: 10.1.0 - prism-react-renderer: 2.4.0(react@18.2.0) + prism-react-renderer: 2.4.0(react@18.3.1) prop-types: 15.8.1 query-string: 9.1.1 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - react-hotkeys-hook: 4.6.1(react-dom@18.2.0)(react@18.2.0) - react-inspector: 6.0.2(react@18.2.0) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-hotkeys-hook: 4.6.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react-inspector: 6.0.2(react@18.3.1) rehype-class-names: 2.0.0 rehype-raw: 7.0.0 remark-gfm: 4.0.0 source-map: 0.7.4 vfile: 6.0.3 - vite: 5.4.11(@types/node@20.10.3)(sass@1.69.5) - vite-tsconfig-paths: 4.3.2(typescript@5.3.2)(vite@5.4.11) + vite: 5.4.11(@types/node@20.17.10)(sass@1.83.0) + vite-tsconfig-paths: 4.3.2(typescript@5.2.2)(vite@5.4.11(@types/node@20.17.10)(sass@1.83.0)) transitivePeerDependencies: - '@swc/helpers' - '@types/node' @@ -4587,13 +4727,13 @@ snapshots: - acorn - supports-color - '@mdx-js/react@3.1.0(@types/react@18.2.41)(react@18.2.0)': + '@mdx-js/react@3.1.0(@types/react@18.3.17)(react@18.3.1)': dependencies: '@types/mdx': 2.0.13 - '@types/react': 18.2.41 - react: 18.2.0 + '@types/react': 18.3.17 + react: 18.3.1 - '@mswjs/interceptors@0.36.10': + '@mswjs/interceptors@0.37.3': dependencies: '@open-draft/deferred-promise': 2.2.0 '@open-draft/logger': 0.3.0 @@ -4623,64 +4763,144 @@ snapshots: '@open-draft/until@2.1.0': {} + '@parcel/watcher-android-arm64@2.5.0': + optional: true + + '@parcel/watcher-darwin-arm64@2.5.0': + optional: true + + '@parcel/watcher-darwin-x64@2.5.0': + optional: true + + '@parcel/watcher-freebsd-x64@2.5.0': + optional: true + + '@parcel/watcher-linux-arm-glibc@2.5.0': + optional: true + + '@parcel/watcher-linux-arm-musl@2.5.0': + optional: true + + '@parcel/watcher-linux-arm64-glibc@2.5.0': + optional: true + + '@parcel/watcher-linux-arm64-musl@2.5.0': + optional: true + + '@parcel/watcher-linux-x64-glibc@2.5.0': + optional: true + + '@parcel/watcher-linux-x64-musl@2.5.0': + optional: true + + '@parcel/watcher-win32-arm64@2.5.0': + optional: true + + '@parcel/watcher-win32-ia32@2.5.0': + optional: true + + '@parcel/watcher-win32-x64@2.5.0': + optional: true + + '@parcel/watcher@2.5.0': + dependencies: + detect-libc: 1.0.3 + is-glob: 4.0.3 + micromatch: 4.0.8 + node-addon-api: 7.1.1 + optionalDependencies: + '@parcel/watcher-android-arm64': 2.5.0 + '@parcel/watcher-darwin-arm64': 2.5.0 + '@parcel/watcher-darwin-x64': 2.5.0 + '@parcel/watcher-freebsd-x64': 2.5.0 + '@parcel/watcher-linux-arm-glibc': 2.5.0 + '@parcel/watcher-linux-arm-musl': 2.5.0 + '@parcel/watcher-linux-arm64-glibc': 2.5.0 + '@parcel/watcher-linux-arm64-musl': 2.5.0 + '@parcel/watcher-linux-x64-glibc': 2.5.0 + '@parcel/watcher-linux-x64-musl': 2.5.0 + '@parcel/watcher-win32-arm64': 2.5.0 + '@parcel/watcher-win32-ia32': 2.5.0 + '@parcel/watcher-win32-x64': 2.5.0 + optional: true + '@pkgr/core@0.1.1': {} - '@remix-run/router@1.13.1': {} + '@react-hook/latest@1.0.3(react@18.3.1)': + dependencies: + react: 18.3.1 + + '@react-hook/passive-layout-effect@1.2.1(react@18.3.1)': + dependencies: + react: 18.3.1 - '@rollup/rollup-android-arm-eabi@4.25.0': + '@react-hook/resize-observer@2.0.2(react@18.3.1)': + dependencies: + '@react-hook/latest': 1.0.3(react@18.3.1) + '@react-hook/passive-layout-effect': 1.2.1(react@18.3.1) + react: 18.3.1 + + '@remix-run/router@1.21.0': {} + + '@rollup/rollup-android-arm-eabi@4.28.1': + optional: true + + '@rollup/rollup-android-arm64@4.28.1': optional: true - '@rollup/rollup-android-arm64@4.25.0': + '@rollup/rollup-darwin-arm64@4.28.1': optional: true - '@rollup/rollup-darwin-arm64@4.25.0': + '@rollup/rollup-darwin-x64@4.28.1': optional: true - '@rollup/rollup-darwin-x64@4.25.0': + '@rollup/rollup-freebsd-arm64@4.28.1': optional: true - '@rollup/rollup-freebsd-arm64@4.25.0': + '@rollup/rollup-freebsd-x64@4.28.1': optional: true - '@rollup/rollup-freebsd-x64@4.25.0': + '@rollup/rollup-linux-arm-gnueabihf@4.28.1': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.25.0': + '@rollup/rollup-linux-arm-musleabihf@4.28.1': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.25.0': + '@rollup/rollup-linux-arm64-gnu@4.28.1': optional: true - '@rollup/rollup-linux-arm64-gnu@4.25.0': + '@rollup/rollup-linux-arm64-musl@4.28.1': optional: true - '@rollup/rollup-linux-arm64-musl@4.25.0': + '@rollup/rollup-linux-loongarch64-gnu@4.28.1': optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.25.0': + '@rollup/rollup-linux-powerpc64le-gnu@4.28.1': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.25.0': + '@rollup/rollup-linux-riscv64-gnu@4.28.1': optional: true - '@rollup/rollup-linux-s390x-gnu@4.25.0': + '@rollup/rollup-linux-s390x-gnu@4.28.1': optional: true - '@rollup/rollup-linux-x64-gnu@4.25.0': + '@rollup/rollup-linux-x64-gnu@4.28.1': optional: true - '@rollup/rollup-linux-x64-musl@4.25.0': + '@rollup/rollup-linux-x64-musl@4.28.1': optional: true - '@rollup/rollup-win32-arm64-msvc@4.25.0': + '@rollup/rollup-win32-arm64-msvc@4.28.1': optional: true - '@rollup/rollup-win32-ia32-msvc@4.25.0': + '@rollup/rollup-win32-ia32-msvc@4.28.1': optional: true - '@rollup/rollup-win32-x64-msvc@4.25.0': + '@rollup/rollup-win32-x64-msvc@4.28.1': optional: true + '@rtsao/scc@1.1.0': {} + '@sindresorhus/merge-streams@2.3.0': {} '@stablelib/base64@1.0.1': {} @@ -4754,12 +4974,12 @@ snapshots: '@svgr/babel-plugin-transform-react-native-svg': 8.1.0(@babel/core@7.26.0) '@svgr/babel-plugin-transform-svg-component': 8.0.0(@babel/core@7.26.0) - '@svgr/cli@8.1.0(typescript@5.3.2)': + '@svgr/cli@8.1.0(typescript@5.2.2)': dependencies: - '@svgr/core': 8.1.0(typescript@5.3.2) - '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0) - '@svgr/plugin-prettier': 8.1.0(@svgr/core@8.1.0) - '@svgr/plugin-svgo': 8.1.0(@svgr/core@8.1.0)(typescript@5.3.2) + '@svgr/core': 8.1.0(typescript@5.2.2) + '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@5.2.2)) + '@svgr/plugin-prettier': 8.1.0(@svgr/core@8.1.0(typescript@5.2.2)) + '@svgr/plugin-svgo': 8.1.0(@svgr/core@8.1.0(typescript@5.2.2))(typescript@5.2.2) camelcase: 6.3.0 chalk: 4.1.2 commander: 9.5.0 @@ -4770,12 +4990,12 @@ snapshots: - supports-color - typescript - '@svgr/core@8.1.0(typescript@5.3.2)': + '@svgr/core@8.1.0(typescript@5.2.2)': dependencies: '@babel/core': 7.26.0 '@svgr/babel-preset': 8.1.0(@babel/core@7.26.0) camelcase: 6.3.0 - cosmiconfig: 8.3.6(typescript@5.3.2) + cosmiconfig: 8.3.6(typescript@5.2.2) snake-case: 3.0.4 transitivePeerDependencies: - supports-color @@ -4783,152 +5003,154 @@ snapshots: '@svgr/hast-util-to-babel-ast@8.0.0': dependencies: - '@babel/types': 7.26.0 + '@babel/types': 7.26.3 entities: 4.5.0 - '@svgr/plugin-jsx@8.1.0(@svgr/core@8.1.0)': + '@svgr/plugin-jsx@8.1.0(@svgr/core@8.1.0(typescript@5.2.2))': dependencies: '@babel/core': 7.26.0 '@svgr/babel-preset': 8.1.0(@babel/core@7.26.0) - '@svgr/core': 8.1.0(typescript@5.3.2) + '@svgr/core': 8.1.0(typescript@5.2.2) '@svgr/hast-util-to-babel-ast': 8.0.0 svg-parser: 2.0.4 transitivePeerDependencies: - supports-color - '@svgr/plugin-prettier@8.1.0(@svgr/core@8.1.0)': + '@svgr/plugin-prettier@8.1.0(@svgr/core@8.1.0(typescript@5.2.2))': dependencies: - '@svgr/core': 8.1.0(typescript@5.3.2) + '@svgr/core': 8.1.0(typescript@5.2.2) deepmerge: 4.3.1 prettier: 2.8.8 - '@svgr/plugin-svgo@8.1.0(@svgr/core@8.1.0)(typescript@5.3.2)': + '@svgr/plugin-svgo@8.1.0(@svgr/core@8.1.0(typescript@5.2.2))(typescript@5.2.2)': dependencies: - '@svgr/core': 8.1.0(typescript@5.3.2) - cosmiconfig: 8.3.6(typescript@5.3.2) + '@svgr/core': 8.1.0(typescript@5.2.2) + cosmiconfig: 8.3.6(typescript@5.2.2) deepmerge: 4.3.1 svgo: 3.3.2 transitivePeerDependencies: - typescript - '@swc/core-darwin-arm64@1.9.2': + '@swc/core-darwin-arm64@1.10.1': optional: true - '@swc/core-darwin-x64@1.9.2': + '@swc/core-darwin-x64@1.10.1': optional: true - '@swc/core-linux-arm-gnueabihf@1.9.2': + '@swc/core-linux-arm-gnueabihf@1.10.1': optional: true - '@swc/core-linux-arm64-gnu@1.9.2': + '@swc/core-linux-arm64-gnu@1.10.1': optional: true - '@swc/core-linux-arm64-musl@1.9.2': + '@swc/core-linux-arm64-musl@1.10.1': optional: true - '@swc/core-linux-x64-gnu@1.9.2': + '@swc/core-linux-x64-gnu@1.10.1': optional: true - '@swc/core-linux-x64-musl@1.9.2': + '@swc/core-linux-x64-musl@1.10.1': optional: true - '@swc/core-win32-arm64-msvc@1.9.2': + '@swc/core-win32-arm64-msvc@1.10.1': optional: true - '@swc/core-win32-ia32-msvc@1.9.2': + '@swc/core-win32-ia32-msvc@1.10.1': optional: true - '@swc/core-win32-x64-msvc@1.9.2': + '@swc/core-win32-x64-msvc@1.10.1': optional: true - '@swc/core@1.9.2': + '@swc/core@1.10.1': dependencies: '@swc/counter': 0.1.3 - '@swc/types': 0.1.15 + '@swc/types': 0.1.17 optionalDependencies: - '@swc/core-darwin-arm64': 1.9.2 - '@swc/core-darwin-x64': 1.9.2 - '@swc/core-linux-arm-gnueabihf': 1.9.2 - '@swc/core-linux-arm64-gnu': 1.9.2 - '@swc/core-linux-arm64-musl': 1.9.2 - '@swc/core-linux-x64-gnu': 1.9.2 - '@swc/core-linux-x64-musl': 1.9.2 - '@swc/core-win32-arm64-msvc': 1.9.2 - '@swc/core-win32-ia32-msvc': 1.9.2 - '@swc/core-win32-x64-msvc': 1.9.2 + '@swc/core-darwin-arm64': 1.10.1 + '@swc/core-darwin-x64': 1.10.1 + '@swc/core-linux-arm-gnueabihf': 1.10.1 + '@swc/core-linux-arm64-gnu': 1.10.1 + '@swc/core-linux-arm64-musl': 1.10.1 + '@swc/core-linux-x64-gnu': 1.10.1 + '@swc/core-linux-x64-musl': 1.10.1 + '@swc/core-win32-arm64-msvc': 1.10.1 + '@swc/core-win32-ia32-msvc': 1.10.1 + '@swc/core-win32-x64-msvc': 1.10.1 '@swc/counter@0.1.3': {} - '@swc/types@0.1.15': + '@swc/types@0.1.17': dependencies: '@swc/counter': 0.1.3 - '@tanstack/query-core@5.12.1': {} + '@tanstack/query-core@5.62.8': {} - '@tanstack/query-devtools@5.12.1': {} + '@tanstack/query-devtools@5.61.4': {} - '@tanstack/react-query-devtools@5.12.2(@tanstack/react-query@5.12.2)(react@18.2.0)': + '@tanstack/react-query-devtools@5.62.8(@tanstack/react-query@5.62.8(react@18.3.1))(react@18.3.1)': dependencies: - '@tanstack/query-devtools': 5.12.1 - '@tanstack/react-query': 5.12.2(react@18.2.0) - react: 18.2.0 + '@tanstack/query-devtools': 5.61.4 + '@tanstack/react-query': 5.62.8(react@18.3.1) + react: 18.3.1 - '@tanstack/react-query@5.12.2(react@18.2.0)': + '@tanstack/react-query@5.62.8(react@18.3.1)': dependencies: - '@tanstack/query-core': 5.12.1 - react: 18.2.0 + '@tanstack/query-core': 5.62.8 + react: 18.3.1 - '@tanstack/react-virtual@3.0.0-beta.54(react@18.2.0)': + '@tanstack/react-virtual@3.0.0-beta.54(react@18.3.1)': dependencies: '@tanstack/virtual-core': 3.0.0-beta.54 - react: 18.2.0 + react: 18.3.1 '@tanstack/virtual-core@3.0.0-beta.54': {} '@tauri-apps/api@1.6.0': {} - '@tauri-apps/cli-darwin-arm64@1.6.2': + '@tauri-apps/cli-darwin-arm64@1.6.3': optional: true - '@tauri-apps/cli-darwin-x64@1.6.2': + '@tauri-apps/cli-darwin-x64@1.6.3': optional: true - '@tauri-apps/cli-linux-arm-gnueabihf@1.6.2': + '@tauri-apps/cli-linux-arm-gnueabihf@1.6.3': optional: true - '@tauri-apps/cli-linux-arm64-gnu@1.6.2': + '@tauri-apps/cli-linux-arm64-gnu@1.6.3': optional: true - '@tauri-apps/cli-linux-arm64-musl@1.6.2': + '@tauri-apps/cli-linux-arm64-musl@1.6.3': optional: true - '@tauri-apps/cli-linux-x64-gnu@1.6.2': + '@tauri-apps/cli-linux-x64-gnu@1.6.3': optional: true - '@tauri-apps/cli-linux-x64-musl@1.6.2': + '@tauri-apps/cli-linux-x64-musl@1.6.3': optional: true - '@tauri-apps/cli-win32-arm64-msvc@1.6.2': + '@tauri-apps/cli-win32-arm64-msvc@1.6.3': optional: true - '@tauri-apps/cli-win32-ia32-msvc@1.6.2': + '@tauri-apps/cli-win32-ia32-msvc@1.6.3': optional: true - '@tauri-apps/cli-win32-x64-msvc@1.6.2': + '@tauri-apps/cli-win32-x64-msvc@1.6.3': optional: true - '@tauri-apps/cli@1.6.2': + '@tauri-apps/cli@1.6.3': + dependencies: + semver: 7.6.3 optionalDependencies: - '@tauri-apps/cli-darwin-arm64': 1.6.2 - '@tauri-apps/cli-darwin-x64': 1.6.2 - '@tauri-apps/cli-linux-arm-gnueabihf': 1.6.2 - '@tauri-apps/cli-linux-arm64-gnu': 1.6.2 - '@tauri-apps/cli-linux-arm64-musl': 1.6.2 - '@tauri-apps/cli-linux-x64-gnu': 1.6.2 - '@tauri-apps/cli-linux-x64-musl': 1.6.2 - '@tauri-apps/cli-win32-arm64-msvc': 1.6.2 - '@tauri-apps/cli-win32-ia32-msvc': 1.6.2 - '@tauri-apps/cli-win32-x64-msvc': 1.6.2 + '@tauri-apps/cli-darwin-arm64': 1.6.3 + '@tauri-apps/cli-darwin-x64': 1.6.3 + '@tauri-apps/cli-linux-arm-gnueabihf': 1.6.3 + '@tauri-apps/cli-linux-arm64-gnu': 1.6.3 + '@tauri-apps/cli-linux-arm64-musl': 1.6.3 + '@tauri-apps/cli-linux-x64-gnu': 1.6.3 + '@tauri-apps/cli-linux-x64-musl': 1.6.3 + '@tauri-apps/cli-win32-arm64-msvc': 1.6.3 + '@tauri-apps/cli-win32-ia32-msvc': 1.6.3 + '@tauri-apps/cli-win32-x64-msvc': 1.6.3 '@trysound/sax@0.2.0': {} @@ -4938,24 +5160,24 @@ snapshots: '@types/babel__core@7.20.5': dependencies: - '@babel/parser': 7.26.2 - '@babel/types': 7.26.0 + '@babel/parser': 7.26.3 + '@babel/types': 7.26.3 '@types/babel__generator': 7.6.8 '@types/babel__template': 7.4.4 '@types/babel__traverse': 7.20.6 '@types/babel__generator@7.6.8': dependencies: - '@babel/types': 7.26.0 + '@babel/types': 7.26.3 '@types/babel__template@7.4.4': dependencies: - '@babel/parser': 7.26.2 - '@babel/types': 7.26.0 + '@babel/parser': 7.26.3 + '@babel/types': 7.26.3 '@types/babel__traverse@7.20.6': dependencies: - '@babel/types': 7.26.0 + '@babel/types': 7.26.3 '@types/byte-size@8.1.2': {} @@ -4975,13 +5197,13 @@ snapshots: '@types/d3-scale@4.0.8': dependencies: - '@types/d3-time': 3.0.3 + '@types/d3-time': 3.0.4 '@types/d3-shape@3.1.6': dependencies: '@types/d3-path': 3.1.0 - '@types/d3-time@3.0.3': {} + '@types/d3-time@3.0.4': {} '@types/d3-timer@3.0.2': {} @@ -5019,28 +5241,25 @@ snapshots: '@types/ms@0.7.34': {} - '@types/node@20.10.3': + '@types/node@20.17.10': dependencies: - undici-types: 5.26.5 + undici-types: 6.19.8 '@types/parse-json@4.0.2': {} '@types/prismjs@1.26.5': {} - '@types/prop-types@15.7.13': {} + '@types/prop-types@15.7.14': {} - '@types/react-dom@18.2.17': + '@types/react-dom@18.3.5(@types/react@18.3.17)': dependencies: - '@types/react': 18.2.41 + '@types/react': 18.3.17 - '@types/react@18.2.41': + '@types/react@18.3.17': dependencies: - '@types/prop-types': 15.7.13 - '@types/scheduler': 0.23.0 + '@types/prop-types': 15.7.14 csstype: 3.1.3 - '@types/scheduler@0.23.0': {} - '@types/semver@7.5.8': {} '@types/statuses@2.0.5': {} @@ -5051,122 +5270,127 @@ snapshots: '@types/unist@3.0.3': {} - '@typescript-eslint/eslint-plugin@6.13.1(@typescript-eslint/parser@6.13.1)(eslint@8.55.0)(typescript@5.3.2)': + '@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.2.2))(eslint@8.57.1)(typescript@5.2.2)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 6.13.1(eslint@8.55.0)(typescript@5.3.2) - '@typescript-eslint/scope-manager': 6.13.1 - '@typescript-eslint/type-utils': 6.13.1(eslint@8.55.0)(typescript@5.3.2) - '@typescript-eslint/utils': 6.13.1(eslint@8.55.0)(typescript@5.3.2) - '@typescript-eslint/visitor-keys': 6.13.1 - debug: 4.3.7 - eslint: 8.55.0 + '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.2.2) + '@typescript-eslint/scope-manager': 6.21.0 + '@typescript-eslint/type-utils': 6.21.0(eslint@8.57.1)(typescript@5.2.2) + '@typescript-eslint/utils': 6.21.0(eslint@8.57.1)(typescript@5.2.2) + '@typescript-eslint/visitor-keys': 6.21.0 + debug: 4.4.0 + eslint: 8.57.1 graphemer: 1.4.0 ignore: 5.3.2 natural-compare: 1.4.0 semver: 7.6.3 - ts-api-utils: 1.4.0(typescript@5.3.2) - typescript: 5.3.2 + ts-api-utils: 1.4.3(typescript@5.2.2) + optionalDependencies: + typescript: 5.2.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@6.13.1(eslint@8.55.0)(typescript@5.3.2)': + '@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.2.2)': dependencies: - '@typescript-eslint/scope-manager': 6.13.1 - '@typescript-eslint/types': 6.13.1 - '@typescript-eslint/typescript-estree': 6.13.1(typescript@5.3.2) - '@typescript-eslint/visitor-keys': 6.13.1 - debug: 4.3.7 - eslint: 8.55.0 - typescript: 5.3.2 + '@typescript-eslint/scope-manager': 6.21.0 + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.2.2) + '@typescript-eslint/visitor-keys': 6.21.0 + debug: 4.4.0 + eslint: 8.57.1 + optionalDependencies: + typescript: 5.2.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@6.13.1': + '@typescript-eslint/scope-manager@6.21.0': dependencies: - '@typescript-eslint/types': 6.13.1 - '@typescript-eslint/visitor-keys': 6.13.1 + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/visitor-keys': 6.21.0 - '@typescript-eslint/type-utils@6.13.1(eslint@8.55.0)(typescript@5.3.2)': + '@typescript-eslint/type-utils@6.21.0(eslint@8.57.1)(typescript@5.2.2)': dependencies: - '@typescript-eslint/typescript-estree': 6.13.1(typescript@5.3.2) - '@typescript-eslint/utils': 6.13.1(eslint@8.55.0)(typescript@5.3.2) - debug: 4.3.7 - eslint: 8.55.0 - ts-api-utils: 1.4.0(typescript@5.3.2) - typescript: 5.3.2 + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.2.2) + '@typescript-eslint/utils': 6.21.0(eslint@8.57.1)(typescript@5.2.2) + debug: 4.4.0 + eslint: 8.57.1 + ts-api-utils: 1.4.3(typescript@5.2.2) + optionalDependencies: + typescript: 5.2.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/types@6.13.1': {} + '@typescript-eslint/types@6.21.0': {} - '@typescript-eslint/typescript-estree@6.13.1(typescript@5.3.2)': + '@typescript-eslint/typescript-estree@6.21.0(typescript@5.2.2)': dependencies: - '@typescript-eslint/types': 6.13.1 - '@typescript-eslint/visitor-keys': 6.13.1 - debug: 4.3.7 + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/visitor-keys': 6.21.0 + debug: 4.4.0 globby: 11.1.0 is-glob: 4.0.3 + minimatch: 9.0.3 semver: 7.6.3 - ts-api-utils: 1.4.0(typescript@5.3.2) - typescript: 5.3.2 + ts-api-utils: 1.4.3(typescript@5.2.2) + optionalDependencies: + typescript: 5.2.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@6.13.1(eslint@8.55.0)(typescript@5.3.2)': + '@typescript-eslint/utils@6.21.0(eslint@8.57.1)(typescript@5.2.2)': dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@8.55.0) + '@eslint-community/eslint-utils': 4.4.1(eslint@8.57.1) '@types/json-schema': 7.0.15 '@types/semver': 7.5.8 - '@typescript-eslint/scope-manager': 6.13.1 - '@typescript-eslint/types': 6.13.1 - '@typescript-eslint/typescript-estree': 6.13.1(typescript@5.3.2) - eslint: 8.55.0 + '@typescript-eslint/scope-manager': 6.21.0 + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.2.2) + eslint: 8.57.1 semver: 7.6.3 transitivePeerDependencies: - supports-color - typescript - '@typescript-eslint/visitor-keys@6.13.1': + '@typescript-eslint/visitor-keys@6.21.0': dependencies: - '@typescript-eslint/types': 6.13.1 + '@typescript-eslint/types': 6.21.0 eslint-visitor-keys: 3.4.3 - '@ungap/structured-clone@1.2.0': {} + '@ungap/structured-clone@1.2.1': {} - '@vitejs/plugin-react-swc@3.5.0(vite@4.5.3)': + '@vitejs/plugin-react-swc@3.7.2(vite@4.5.5(@types/node@20.17.10)(sass@1.83.0))': dependencies: - '@swc/core': 1.9.2 - vite: 4.5.3(@types/node@20.10.3)(sass@1.69.5) + '@swc/core': 1.10.1 + vite: 4.5.5(@types/node@20.17.10)(sass@1.83.0) transitivePeerDependencies: - '@swc/helpers' - '@vitejs/plugin-react-swc@3.7.1(vite@5.4.11)': + '@vitejs/plugin-react-swc@3.7.2(vite@5.4.11(@types/node@20.17.10)(sass@1.83.0))': dependencies: - '@swc/core': 1.9.2 - vite: 5.4.11(@types/node@20.10.3)(sass@1.69.5) + '@swc/core': 1.10.1 + vite: 5.4.11(@types/node@20.17.10)(sass@1.83.0) transitivePeerDependencies: - '@swc/helpers' - '@vitejs/plugin-react@4.2.0(vite@4.5.3)': + '@vitejs/plugin-react@4.3.4(vite@4.5.5(@types/node@20.17.10)(sass@1.83.0))': dependencies: '@babel/core': 7.26.0 '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.0) '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.0) '@types/babel__core': 7.20.5 react-refresh: 0.14.2 - vite: 4.5.3(@types/node@20.10.3)(sass@1.69.5) + vite: 4.5.5(@types/node@20.17.10)(sass@1.83.0) transitivePeerDependencies: - supports-color - '@vitejs/plugin-react@4.3.3(vite@5.4.11)': + '@vitejs/plugin-react@4.3.4(vite@5.4.11(@types/node@20.17.10)(sass@1.83.0))': dependencies: '@babel/core': 7.26.0 '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.0) '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.0) '@types/babel__core': 7.20.5 react-refresh: 0.14.2 - vite: 5.4.11(@types/node@20.10.3)(sass@1.69.5) + vite: 5.4.11(@types/node@20.17.10)(sass@1.83.0) transitivePeerDependencies: - supports-color @@ -5221,72 +5445,81 @@ snapshots: array-buffer-byte-length@1.0.1: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 is-array-buffer: 3.0.4 array-includes@3.1.8: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.3 + es-abstract: 1.23.5 es-object-atoms: 1.0.0 - get-intrinsic: 1.2.4 - is-string: 1.0.7 + get-intrinsic: 1.2.5 + is-string: 1.1.0 array-union@2.1.0: {} + array.prototype.findlast@1.2.5: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.5 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + es-shim-unscopables: 1.0.2 + array.prototype.findlastindex@1.2.5: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.3 + es-abstract: 1.23.5 es-errors: 1.3.0 es-object-atoms: 1.0.0 es-shim-unscopables: 1.0.2 array.prototype.flat@1.3.2: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.3 + es-abstract: 1.23.5 es-shim-unscopables: 1.0.2 array.prototype.flatmap@1.3.2: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.3 + es-abstract: 1.23.5 es-shim-unscopables: 1.0.2 array.prototype.tosorted@1.1.4: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.3 + es-abstract: 1.23.5 es-errors: 1.3.0 es-shim-unscopables: 1.0.2 arraybuffer.prototype.slice@1.0.3: dependencies: array-buffer-byte-length: 1.0.1 - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.3 + es-abstract: 1.23.5 es-errors: 1.3.0 - get-intrinsic: 1.2.4 + get-intrinsic: 1.2.5 is-array-buffer: 3.0.4 is-shared-array-buffer: 1.0.3 astring@1.9.0: {} - autoprefixer@10.4.20(postcss@8.4.32): + autoprefixer@10.4.20(postcss@8.4.49): dependencies: browserslist: 4.24.2 - caniuse-lite: 1.0.30001680 + caniuse-lite: 1.0.30001687 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.1.1 - postcss: 8.4.32 + postcss: 8.4.49 postcss-value-parser: 4.2.0 available-typed-arrays@1.0.7: @@ -5337,8 +5570,8 @@ snapshots: browserslist@4.24.2: dependencies: - caniuse-lite: 1.0.30001680 - electron-to-chromium: 1.5.56 + caniuse-lite: 1.0.30001687 + electron-to-chromium: 1.5.71 node-releases: 2.0.18 update-browserslist-db: 1.1.1(browserslist@4.24.2) @@ -5346,19 +5579,23 @@ snapshots: dependencies: run-applescript: 7.0.0 - byte-size@8.1.1: {} + byte-size@8.2.1: {} cache-content-type@1.0.1: dependencies: mime-types: 2.1.35 ylru: 1.4.0 - call-bind@1.0.7: + call-bind-apply-helpers@1.0.1: dependencies: - es-define-property: 1.0.0 es-errors: 1.3.0 function-bind: 1.1.2 - get-intrinsic: 1.2.4 + + call-bind@1.0.8: + dependencies: + call-bind-apply-helpers: 1.0.1 + es-define-property: 1.0.1 + get-intrinsic: 1.2.5 set-function-length: 1.2.2 callsites@3.1.0: {} @@ -5367,7 +5604,7 @@ snapshots: camelcase@7.0.1: {} - caniuse-lite@1.0.30001680: {} + caniuse-lite@1.0.30001687: {} ccount@2.0.1: {} @@ -5404,7 +5641,9 @@ snapshots: optionalDependencies: fsevents: 2.3.3 - classnames@2.3.2: {} + chokidar@4.0.1: + dependencies: + readdirp: 4.0.2 classnames@2.5.1: {} @@ -5444,7 +5683,7 @@ snapshots: commander@9.5.0: {} - compare-versions@6.1.0: {} + compare-versions@6.1.1: {} concat-map@0.0.1: {} @@ -5473,15 +5712,16 @@ snapshots: path-type: 4.0.0 yaml: 1.10.2 - cosmiconfig@8.3.6(typescript@5.3.2): + cosmiconfig@8.3.6(typescript@5.2.2): dependencies: import-fresh: 3.3.0 js-yaml: 4.1.0 parse-json: 5.2.0 path-type: 4.0.0 - typescript: 5.3.2 + optionalDependencies: + typescript: 5.2.2 - cross-spawn@6.0.5: + cross-spawn@6.0.6: dependencies: nice-try: 1.0.5 path-key: 2.0.1 @@ -5489,7 +5729,7 @@ snapshots: shebang-command: 1.2.0 which: 1.3.1 - cross-spawn@7.0.5: + cross-spawn@7.0.6: dependencies: path-key: 3.1.1 shebang-command: 2.0.0 @@ -5565,19 +5805,19 @@ snapshots: data-view-buffer@1.0.1: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 es-errors: 1.3.0 is-data-view: 1.0.1 data-view-byte-length@1.0.1: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 es-errors: 1.3.0 is-data-view: 1.0.1 data-view-byte-offset@1.0.0: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 es-errors: 1.3.0 is-data-view: 1.0.1 @@ -5587,7 +5827,7 @@ snapshots: dependencies: ms: 2.1.3 - debug@4.3.7: + debug@4.4.0: dependencies: ms: 2.1.3 @@ -5614,9 +5854,9 @@ snapshots: define-data-property@1.1.4: dependencies: - es-define-property: 1.0.0 + es-define-property: 1.0.1 es-errors: 1.3.0 - gopd: 1.0.1 + gopd: 1.2.0 define-lazy-prop@3.0.0: {} @@ -5638,6 +5878,9 @@ snapshots: detect-browser@5.3.0: {} + detect-libc@1.0.3: + optional: true + devlop@1.1.0: dependencies: dequal: 2.0.3 @@ -5656,9 +5899,10 @@ snapshots: dependencies: esutils: 2.0.3 - dom-helpers@3.4.0: + dom-helpers@5.2.1: dependencies: '@babel/runtime': 7.26.0 + csstype: 3.1.3 dom-serializer@2.0.0: dependencies: @@ -5683,11 +5927,17 @@ snapshots: no-case: 3.0.4 tslib: 2.8.1 + dunder-proto@1.0.0: + dependencies: + call-bind-apply-helpers: 1.0.1 + es-errors: 1.3.0 + gopd: 1.2.0 + eastasianwidth@0.2.0: {} ee-first@1.1.1: {} - electron-to-chromium@1.5.56: {} + electron-to-chromium@1.5.71: {} emoji-regex@8.0.0: {} @@ -5701,37 +5951,37 @@ snapshots: dependencies: is-arrayish: 0.2.1 - es-abstract@1.23.3: + es-abstract@1.23.5: dependencies: array-buffer-byte-length: 1.0.1 arraybuffer.prototype.slice: 1.0.3 available-typed-arrays: 1.0.7 - call-bind: 1.0.7 + call-bind: 1.0.8 data-view-buffer: 1.0.1 data-view-byte-length: 1.0.1 data-view-byte-offset: 1.0.0 - es-define-property: 1.0.0 + es-define-property: 1.0.1 es-errors: 1.3.0 es-object-atoms: 1.0.0 es-set-tostringtag: 2.0.3 - es-to-primitive: 1.2.1 + es-to-primitive: 1.3.0 function.prototype.name: 1.1.6 - get-intrinsic: 1.2.4 + get-intrinsic: 1.2.5 get-symbol-description: 1.0.2 globalthis: 1.0.4 - gopd: 1.0.1 + gopd: 1.2.0 has-property-descriptors: 1.0.2 - has-proto: 1.0.3 - has-symbols: 1.0.3 + has-proto: 1.2.0 + has-symbols: 1.1.0 hasown: 2.0.2 internal-slot: 1.0.7 is-array-buffer: 3.0.4 is-callable: 1.2.7 is-data-view: 1.0.1 is-negative-zero: 2.0.3 - is-regex: 1.1.4 + is-regex: 1.2.0 is-shared-array-buffer: 1.0.3 - is-string: 1.0.7 + is-string: 1.1.0 is-typed-array: 1.1.13 is-weakref: 1.0.2 object-inspect: 1.13.3 @@ -5745,31 +5995,29 @@ snapshots: string.prototype.trimstart: 1.0.8 typed-array-buffer: 1.0.2 typed-array-byte-length: 1.0.1 - typed-array-byte-offset: 1.0.2 - typed-array-length: 1.0.6 + typed-array-byte-offset: 1.0.3 + typed-array-length: 1.0.7 unbox-primitive: 1.0.2 - which-typed-array: 1.1.15 + which-typed-array: 1.1.16 - es-define-property@1.0.0: - dependencies: - get-intrinsic: 1.2.4 + es-define-property@1.0.1: {} es-errors@1.3.0: {} es-iterator-helpers@1.2.0: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.3 + es-abstract: 1.23.5 es-errors: 1.3.0 es-set-tostringtag: 2.0.3 function-bind: 1.1.2 - get-intrinsic: 1.2.4 + get-intrinsic: 1.2.5 globalthis: 1.0.4 - gopd: 1.0.1 + gopd: 1.2.0 has-property-descriptors: 1.0.2 - has-proto: 1.0.3 - has-symbols: 1.0.3 + has-proto: 1.2.0 + has-symbols: 1.1.0 internal-slot: 1.0.7 iterator.prototype: 1.1.3 safe-array-concat: 1.1.2 @@ -5780,7 +6028,7 @@ snapshots: es-set-tostringtag@2.0.3: dependencies: - get-intrinsic: 1.2.4 + get-intrinsic: 1.2.5 has-tostringtag: 1.0.2 hasown: 2.0.2 @@ -5788,11 +6036,11 @@ snapshots: dependencies: hasown: 2.0.2 - es-to-primitive@1.2.1: + es-to-primitive@1.3.0: dependencies: is-callable: 1.2.7 is-date-object: 1.0.5 - is-symbol: 1.0.4 + is-symbol: 1.1.0 esast-util-from-estree@2.0.0: dependencies: @@ -5869,9 +6117,9 @@ snapshots: escape-string-regexp@5.0.0: {} - eslint-config-prettier@9.1.0(eslint@8.55.0): + eslint-config-prettier@9.1.0(eslint@8.57.1): dependencies: - eslint: 8.55.0 + eslint: 8.57.1 eslint-import-resolver-node@0.3.9: dependencies: @@ -5881,27 +6129,28 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.0(@typescript-eslint/parser@6.13.1)(eslint-import-resolver-node@0.3.9)(eslint@8.55.0): + eslint-module-utils@2.12.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.2.2))(eslint-import-resolver-node@0.3.9)(eslint@8.57.1): dependencies: - '@typescript-eslint/parser': 6.13.1(eslint@8.55.0)(typescript@5.3.2) debug: 3.2.7 - eslint: 8.55.0 + optionalDependencies: + '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.2.2) + eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color - eslint-plugin-import@2.29.0(@typescript-eslint/parser@6.13.1)(eslint@8.55.0): + eslint-plugin-import@2.31.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.2.2))(eslint@8.57.1): dependencies: - '@typescript-eslint/parser': 6.13.1(eslint@8.55.0)(typescript@5.3.2) + '@rtsao/scc': 1.1.0 array-includes: 3.1.8 array.prototype.findlastindex: 1.2.5 array.prototype.flat: 1.3.2 array.prototype.flatmap: 1.3.2 debug: 3.2.7 doctrine: 2.1.0 - eslint: 8.55.0 + eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@6.13.1)(eslint-import-resolver-node@0.3.9)(eslint@8.55.0) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.2.2))(eslint-import-resolver-node@0.3.9)(eslint@8.57.1) hasown: 2.0.2 is-core-module: 2.15.1 is-glob: 4.0.3 @@ -5910,51 +6159,57 @@ snapshots: object.groupby: 1.0.3 object.values: 1.2.0 semver: 6.3.1 + string.prototype.trimend: 1.0.8 tsconfig-paths: 3.15.0 + optionalDependencies: + '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.2.2) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - eslint-plugin-prettier@5.0.1(eslint-config-prettier@9.1.0)(eslint@8.55.0)(prettier@3.3.3): + eslint-plugin-prettier@5.2.1(eslint-config-prettier@9.1.0(eslint@8.57.1))(eslint@8.57.1)(prettier@3.3.3): dependencies: - eslint: 8.55.0 - eslint-config-prettier: 9.1.0(eslint@8.55.0) + eslint: 8.57.1 prettier: 3.3.3 prettier-linter-helpers: 1.0.0 - synckit: 0.8.8 + synckit: 0.9.2 + optionalDependencies: + eslint-config-prettier: 9.1.0(eslint@8.57.1) - eslint-plugin-react-hooks@4.6.0(eslint@8.55.0): + eslint-plugin-react-hooks@4.6.2(eslint@8.57.1): dependencies: - eslint: 8.55.0 + eslint: 8.57.1 - eslint-plugin-react-refresh@0.4.5(eslint@8.55.0): + eslint-plugin-react-refresh@0.4.16(eslint@8.57.1): dependencies: - eslint: 8.55.0 + eslint: 8.57.1 - eslint-plugin-react@7.33.2(eslint@8.55.0): + eslint-plugin-react@7.37.2(eslint@8.57.1): dependencies: array-includes: 3.1.8 + array.prototype.findlast: 1.2.5 array.prototype.flatmap: 1.3.2 array.prototype.tosorted: 1.1.4 doctrine: 2.1.0 es-iterator-helpers: 1.2.0 - eslint: 8.55.0 + eslint: 8.57.1 estraverse: 5.3.0 + hasown: 2.0.2 jsx-ast-utils: 3.3.5 minimatch: 3.1.2 object.entries: 1.1.8 object.fromentries: 2.0.8 - object.hasown: 1.1.4 object.values: 1.2.0 prop-types: 15.8.1 resolve: 2.0.0-next.5 semver: 6.3.1 string.prototype.matchall: 4.0.11 + string.prototype.repeat: 1.0.0 - eslint-plugin-simple-import-sort@10.0.0(eslint@8.55.0): + eslint-plugin-simple-import-sort@10.0.0(eslint@8.57.1): dependencies: - eslint: 8.55.0 + eslint: 8.57.1 eslint-scope@7.2.2: dependencies: @@ -5963,20 +6218,20 @@ snapshots: eslint-visitor-keys@3.4.3: {} - eslint@8.55.0: + eslint@8.57.1: dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@8.55.0) + '@eslint-community/eslint-utils': 4.4.1(eslint@8.57.1) '@eslint-community/regexpp': 4.12.1 '@eslint/eslintrc': 2.1.4 - '@eslint/js': 8.55.0 - '@humanwhocodes/config-array': 0.11.14 + '@eslint/js': 8.57.1 + '@humanwhocodes/config-array': 0.13.0 '@humanwhocodes/module-importer': 1.0.1 '@nodelib/fs.walk': 1.2.8 - '@ungap/structured-clone': 1.2.0 + '@ungap/structured-clone': 1.2.1 ajv: 6.12.6 chalk: 4.1.2 - cross-spawn: 7.0.5 - debug: 4.3.7 + cross-spawn: 7.0.6 + debug: 4.4.0 doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.2.2 @@ -6104,11 +6359,11 @@ snapshots: flat-cache@3.2.0: dependencies: - flatted: 3.3.1 + flatted: 3.3.2 keyv: 4.5.4 rimraf: 3.0.2 - flatted@3.3.1: {} + flatted@3.3.2: {} for-each@0.3.3: dependencies: @@ -6116,13 +6371,13 @@ snapshots: fraction.js@4.3.7: {} - framer-motion@10.16.12(react-dom@18.2.0)(react@18.2.0): + framer-motion@10.18.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) tslib: 2.8.1 optionalDependencies: '@emotion/is-prop-valid': 0.8.8 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) fresh@0.5.2: {} @@ -6135,9 +6390,9 @@ snapshots: function.prototype.name@1.1.6: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.3 + es-abstract: 1.23.5 functions-have-names: 1.2.3 functions-have-names@1.2.3: {} @@ -6146,21 +6401,26 @@ snapshots: get-caller-file@2.0.5: {} - get-intrinsic@1.2.4: + get-intrinsic@1.2.5: dependencies: + call-bind-apply-helpers: 1.0.1 + dunder-proto: 1.0.0 + es-define-property: 1.0.1 es-errors: 1.3.0 function-bind: 1.1.2 - has-proto: 1.0.3 - has-symbols: 1.0.3 + gopd: 1.2.0 + has-symbols: 1.1.0 hasown: 2.0.2 get-port@7.1.0: {} get-symbol-description@1.0.2: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 es-errors: 1.3.0 - get-intrinsic: 1.2.4 + get-intrinsic: 1.2.5 + + get-text-width@1.0.3: {} glob-parent@5.1.2: dependencies: @@ -6196,7 +6456,7 @@ snapshots: globalthis@1.0.4: dependencies: define-properties: 1.2.1 - gopd: 1.0.1 + gopd: 1.2.0 globby@11.1.0: dependencies: @@ -6218,9 +6478,7 @@ snapshots: globrex@0.1.2: {} - gopd@1.0.1: - dependencies: - get-intrinsic: 1.2.4 + gopd@1.2.0: {} graceful-fs@4.2.11: {} @@ -6236,15 +6494,17 @@ snapshots: has-property-descriptors@1.0.2: dependencies: - es-define-property: 1.0.0 + es-define-property: 1.0.1 - has-proto@1.0.3: {} + has-proto@1.2.0: + dependencies: + dunder-proto: 1.0.0 - has-symbols@1.0.3: {} + has-symbols@1.1.0: {} has-tostringtag@1.0.2: dependencies: - has-symbols: 1.0.3 + has-symbols: 1.1.0 hasown@2.0.2: dependencies: @@ -6255,12 +6515,12 @@ snapshots: '@types/hast': 3.0.4 space-separated-tokens: 2.0.2 - hast-util-from-parse5@8.0.1: + hast-util-from-parse5@8.0.2: dependencies: '@types/hast': 3.0.4 '@types/unist': 3.0.3 devlop: 1.1.0 - hastscript: 8.0.0 + hastscript: 9.0.0 property-information: 6.5.0 vfile: 6.0.3 vfile-location: 5.0.3 @@ -6274,12 +6534,12 @@ snapshots: dependencies: '@types/hast': 3.0.4 - hast-util-raw@9.0.4: + hast-util-raw@9.1.0: dependencies: '@types/hast': 3.0.4 '@types/unist': 3.0.3 - '@ungap/structured-clone': 1.2.0 - hast-util-from-parse5: 8.0.1 + '@ungap/structured-clone': 1.2.1 + hast-util-from-parse5: 8.0.2 hast-util-to-parse5: 8.0.0 html-void-elements: 3.0.0 mdast-util-to-hast: 13.2.0 @@ -6293,7 +6553,7 @@ snapshots: hast-util-sanitize@5.0.2: dependencies: '@types/hast': 3.0.4 - '@ungap/structured-clone': 1.2.0 + '@ungap/structured-clone': 1.2.1 unist-util-position: 5.0.0 hast-util-select@6.0.3: @@ -6373,7 +6633,7 @@ snapshots: dependencies: '@types/hast': 3.0.4 - hastscript@8.0.0: + hastscript@9.0.0: dependencies: '@types/hast': 3.0.4 comma-separated-tokens: 2.0.3 @@ -6393,24 +6653,26 @@ snapshots: hosted-git-info@2.8.9: {} - html-dom-parser@5.0.4: + html-dom-parser@5.0.12: dependencies: domhandler: 5.0.3 - htmlparser2: 9.0.0 + htmlparser2: 9.1.0 - html-react-parser@5.0.7(react@18.2.0): + html-react-parser@5.2.1(@types/react@18.3.17)(react@18.3.1): dependencies: domhandler: 5.0.3 - html-dom-parser: 5.0.4 - react: 18.2.0 + html-dom-parser: 5.0.12 + react: 18.3.1 react-property: 2.0.2 - style-to-js: 1.1.10 + style-to-js: 1.1.16 + optionalDependencies: + '@types/react': 18.3.17 html-url-attributes@3.0.1: {} html-void-elements@3.0.0: {} - htmlparser2@9.0.0: + htmlparser2@9.1.0: dependencies: domelementtype: 2.3.0 domhandler: 5.0.3 @@ -6432,7 +6694,7 @@ snapshots: ignore@5.3.2: {} - immutable@4.3.7: {} + immutable@5.0.3: {} import-fresh@3.3.0: dependencies: @@ -6450,8 +6712,6 @@ snapshots: inline-style-parser@0.1.1: {} - inline-style-parser@0.2.2: {} - inline-style-parser@0.2.4: {} internal-slot@1.0.7: @@ -6471,8 +6731,8 @@ snapshots: is-array-buffer@3.0.4: dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.4 + call-bind: 1.0.8 + get-intrinsic: 1.2.5 is-arrayish@0.2.1: {} @@ -6480,7 +6740,7 @@ snapshots: dependencies: has-tostringtag: 1.0.2 - is-bigint@1.0.4: + is-bigint@1.1.0: dependencies: has-bigints: 1.0.2 @@ -6488,9 +6748,9 @@ snapshots: dependencies: binary-extensions: 2.3.0 - is-boolean-object@1.1.2: + is-boolean-object@1.2.0: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 has-tostringtag: 1.0.2 is-callable@1.2.7: {} @@ -6513,9 +6773,9 @@ snapshots: is-extglob@2.1.1: {} - is-finalizationregistry@1.0.2: + is-finalizationregistry@1.1.0: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 is-fullwidth-code-point@3.0.0: {} @@ -6539,8 +6799,9 @@ snapshots: is-node-process@1.2.0: {} - is-number-object@1.0.7: + is-number-object@1.1.0: dependencies: + call-bind: 1.0.8 has-tostringtag: 1.0.2 is-number@7.0.0: {} @@ -6549,39 +6810,44 @@ snapshots: is-plain-obj@4.1.0: {} - is-regex@1.1.4: + is-regex@1.2.0: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 + gopd: 1.2.0 has-tostringtag: 1.0.2 + hasown: 2.0.2 is-set@2.0.3: {} is-shared-array-buffer@1.0.3: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 - is-string@1.0.7: + is-string@1.1.0: dependencies: + call-bind: 1.0.8 has-tostringtag: 1.0.2 - is-symbol@1.0.4: + is-symbol@1.1.0: dependencies: - has-symbols: 1.0.3 + call-bind: 1.0.8 + has-symbols: 1.1.0 + safe-regex-test: 1.0.3 is-typed-array@1.1.13: dependencies: - which-typed-array: 1.1.15 + which-typed-array: 1.1.16 is-weakmap@2.0.2: {} is-weakref@1.0.2: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 is-weakset@2.0.3: dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.4 + call-bind: 1.0.8 + get-intrinsic: 1.2.5 is-wsl@3.1.0: dependencies: @@ -6594,12 +6860,12 @@ snapshots: iterator.prototype@1.1.3: dependencies: define-properties: 1.2.1 - get-intrinsic: 1.2.4 - has-symbols: 1.0.3 - reflect.getprototypeof: 1.0.6 + get-intrinsic: 1.2.5 + has-symbols: 1.1.0 + reflect.getprototypeof: 1.0.8 set-function-name: 2.0.2 - itertools@2.1.2: {} + itertools@2.3.2: {} js-tokens@4.0.0: {} @@ -6658,7 +6924,7 @@ snapshots: content-disposition: 0.5.4 content-type: 1.0.5 cookies: 0.9.1 - debug: 4.3.7 + debug: 4.4.0 delegates: 1.0.0 depd: 2.0.0 destroy: 1.2.0 @@ -6686,9 +6952,9 @@ snapshots: lines-and-columns@1.2.4: {} - little-state-machine@4.8.0(react@18.2.0): + little-state-machine@4.8.0(react@18.3.1): dependencies: - react: 18.2.0 + react: 18.3.1 load-json-file@4.0.0: dependencies: @@ -6868,7 +7134,7 @@ snapshots: dependencies: '@types/hast': 3.0.4 '@types/mdast': 4.0.4 - '@ungap/structured-clone': 1.2.0 + '@ungap/structured-clone': 1.2.1 devlop: 1.1.0 micromark-util-sanitize-uri: 2.0.1 trim-lines: 3.0.1 @@ -6900,6 +7166,10 @@ snapshots: memorystream@0.3.1: {} + merge-refs@1.3.0(@types/react@18.3.17): + optionalDependencies: + '@types/react': 18.3.17 + merge2@1.4.1: {} micromark-core-commonmark@2.0.2: @@ -6917,7 +7187,7 @@ snapshots: micromark-util-html-tag-name: 2.0.1 micromark-util-normalize-identifier: 2.0.1 micromark-util-resolve-all: 2.0.1 - micromark-util-subtokenize: 2.0.2 + micromark-util-subtokenize: 2.0.3 micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.1 @@ -7135,7 +7405,7 @@ snapshots: micromark-util-encode: 2.0.1 micromark-util-symbol: 2.0.1 - micromark-util-subtokenize@2.0.2: + micromark-util-subtokenize@2.0.3: dependencies: devlop: 1.1.0 micromark-util-chunked: 2.0.1 @@ -7149,7 +7419,7 @@ snapshots: micromark@4.0.1: dependencies: '@types/debug': 4.1.12 - debug: 4.3.7 + debug: 4.4.0 decode-named-character-reference: 1.0.2 devlop: 1.1.0 micromark-core-commonmark: 2.0.2 @@ -7162,7 +7432,7 @@ snapshots: micromark-util-normalize-identifier: 2.0.1 micromark-util-resolve-all: 2.0.1 micromark-util-sanitize-uri: 2.0.1 - micromark-util-subtokenize: 2.0.2 + micromark-util-subtokenize: 2.0.3 micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.1 transitivePeerDependencies: @@ -7187,6 +7457,10 @@ snapshots: dependencies: brace-expansion: 2.0.1 + minimatch@9.0.3: + dependencies: + brace-expansion: 2.0.1 + minimatch@9.0.5: dependencies: brace-expansion: 2.0.1 @@ -7195,13 +7469,13 @@ snapshots: ms@2.1.3: {} - msw@2.6.4(@types/node@20.10.3)(typescript@5.3.2): + msw@2.6.8(@types/node@20.17.10)(typescript@5.2.2): dependencies: '@bundled-es-modules/cookie': 2.0.1 '@bundled-es-modules/statuses': 1.0.1 '@bundled-es-modules/tough-cookie': 0.1.6 - '@inquirer/confirm': 5.0.2(@types/node@20.10.3) - '@mswjs/interceptors': 0.36.10 + '@inquirer/confirm': 5.1.0(@types/node@20.17.10) + '@mswjs/interceptors': 0.37.3 '@open-draft/deferred-promise': 2.2.0 '@open-draft/until': 2.1.0 '@types/cookie': 0.6.0 @@ -7213,15 +7487,16 @@ snapshots: outvariant: 1.4.3 path-to-regexp: 6.3.0 strict-event-emitter: 0.5.1 - type-fest: 4.26.1 - typescript: 5.3.2 + type-fest: 4.30.0 yargs: 17.7.2 + optionalDependencies: + typescript: 5.2.2 transitivePeerDependencies: - '@types/node' mute-stream@2.0.0: {} - nanoid@3.3.7: {} + nanoid@3.3.8: {} natural-compare@1.4.0: {} @@ -7234,6 +7509,9 @@ snapshots: lower-case: 2.0.2 tslib: 2.8.1 + node-addon-api@7.1.1: + optional: true + node-releases@2.0.18: {} normalize-package-data@2.5.0: @@ -7251,12 +7529,12 @@ snapshots: dependencies: ansi-styles: 3.2.1 chalk: 2.4.2 - cross-spawn: 6.0.5 + cross-spawn: 6.0.6 memorystream: 0.3.1 minimatch: 3.1.2 pidtree: 0.3.1 read-pkg: 3.0.0 - shell-quote: 1.8.1 + shell-quote: 1.8.2 string.prototype.padend: 3.1.6 nth-check@2.1.1: @@ -7271,39 +7549,33 @@ snapshots: object.assign@4.1.5: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 - has-symbols: 1.0.3 + has-symbols: 1.1.0 object-keys: 1.1.1 object.entries@1.1.8: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 es-object-atoms: 1.0.0 object.fromentries@2.0.8: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.3 + es-abstract: 1.23.5 es-object-atoms: 1.0.0 object.groupby@1.0.3: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.3 - - object.hasown@1.1.4: - dependencies: - define-properties: 1.2.1 - es-abstract: 1.23.3 - es-object-atoms: 1.0.0 + es-abstract: 1.23.5 object.values@1.2.0: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 es-object-atoms: 1.0.0 @@ -7343,7 +7615,7 @@ snapshots: dependencies: p-limit: 3.1.0 - p-timeout@6.1.2: {} + p-timeout@6.1.3: {} parent-module@1.0.1: dependencies: @@ -7410,15 +7682,9 @@ snapshots: postcss-value-parser@4.2.0: {} - postcss@8.4.32: - dependencies: - nanoid: 3.3.7 - picocolors: 1.1.1 - source-map-js: 1.2.1 - postcss@8.4.49: dependencies: - nanoid: 3.3.7 + nanoid: 3.3.8 picocolors: 1.1.1 source-map-js: 1.2.1 @@ -7432,11 +7698,11 @@ snapshots: prettier@3.3.3: {} - prism-react-renderer@2.4.0(react@18.2.0): + prism-react-renderer@2.4.0(react@18.3.1): dependencies: '@types/prismjs': 1.26.5 clsx: 2.1.1 - react: 18.2.0 + react: 18.3.1 prop-types@15.8.1: dependencies: @@ -7446,7 +7712,7 @@ snapshots: property-information@6.5.0: {} - psl@1.10.0: + psl@1.15.0: dependencies: punycode: 2.3.1 @@ -7466,51 +7732,51 @@ snapshots: radash@11.0.0: {} - react-auth-code-input@3.2.1(react@18.2.0): + react-auth-code-input@3.2.1(react@18.3.1): dependencies: - react: 18.2.0 + react: 18.3.1 - react-click-away-listener@2.2.3(react-dom@18.2.0)(react@18.2.0): + react-click-away-listener@2.2.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - react-dom@18.2.0(react@18.2.0): + react-dom@18.3.1(react@18.3.1): dependencies: loose-envify: 1.4.0 - react: 18.2.0 + react: 18.3.1 scheduler: 0.23.2 - react-hook-form@7.48.2(react@18.2.0): + react-hook-form@7.54.1(react@18.3.1): dependencies: - react: 18.2.0 + react: 18.3.1 - react-hotkeys-hook@4.6.1(react-dom@18.2.0)(react@18.2.0): + react-hotkeys-hook@4.6.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - react-inspector@6.0.2(react@18.2.0): + react-inspector@6.0.2(react@18.3.1): dependencies: - react: 18.2.0 + react: 18.3.1 react-is@16.13.1: {} - react-lifecycles-compat@3.0.4: {} + react-is@18.3.1: {} - react-loading-skeleton@3.3.1(react@18.2.0): + react-loading-skeleton@3.5.0(react@18.3.1): dependencies: - react: 18.2.0 + react: 18.3.1 - react-markdown@9.0.1(@types/react@18.2.41)(react@18.2.0): + react-markdown@9.0.1(@types/react@18.3.17)(react@18.3.1): dependencies: '@types/hast': 3.0.4 - '@types/react': 18.2.41 + '@types/react': 18.3.17 devlop: 1.1.0 hast-util-to-jsx-runtime: 2.3.2 html-url-attributes: 3.0.1 mdast-util-to-hast: 13.2.0 - react: 18.2.0 + react: 18.3.1 remark-parse: 11.0.0 remark-rehype: 11.1.1 unified: 11.0.5 @@ -7521,53 +7787,53 @@ snapshots: react-property@2.0.2: {} - react-qr-code@2.0.15(react@18.2.0): + react-qr-code@2.0.15(react@18.3.1): dependencies: prop-types: 15.8.1 qr.js: 0.0.0 - react: 18.2.0 + react: 18.3.1 react-refresh@0.14.2: {} - react-router-dom@6.20.1(react-dom@18.2.0)(react@18.2.0): + react-router-dom@6.28.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@remix-run/router': 1.13.1 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - react-router: 6.20.1(react@18.2.0) + '@remix-run/router': 1.21.0 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-router: 6.28.0(react@18.3.1) - react-router@6.20.1(react@18.2.0): + react-router@6.28.0(react@18.3.1): dependencies: - '@remix-run/router': 1.13.1 - react: 18.2.0 + '@remix-run/router': 1.21.0 + react: 18.3.1 - react-simple-animate@3.5.2(react-dom@18.2.0): + react-simple-animate@3.5.2(react-dom@18.3.1(react@18.3.1)): dependencies: - react-dom: 18.2.0(react@18.2.0) + react-dom: 18.3.1(react@18.3.1) - react-smooth@2.0.5(prop-types@15.8.1)(react-dom@18.2.0)(react@18.2.0): + react-smooth@4.0.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: fast-equals: 5.0.1 prop-types: 15.8.1 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - react-transition-group: 2.9.0(react-dom@18.2.0)(react@18.2.0) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-transition-group: 4.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - react-transition-group@2.9.0(react-dom@18.2.0)(react@18.2.0): + react-transition-group@4.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - dom-helpers: 3.4.0 + '@babel/runtime': 7.26.0 + dom-helpers: 5.2.1 loose-envify: 1.4.0 prop-types: 15.8.1 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - react-lifecycles-compat: 3.0.4 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - react-virtualized-auto-sizer@1.0.24(react-dom@18.2.0)(react@18.2.0): + react-virtualized-auto-sizer@1.0.25(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - react@18.2.0: + react@18.3.1: dependencies: loose-envify: 1.4.0 @@ -7581,20 +7847,21 @@ snapshots: dependencies: picomatch: 2.3.1 + readdirp@4.0.2: {} + recharts-scale@0.4.5: dependencies: decimal.js-light: 2.5.1 - recharts@2.10.3(prop-types@15.8.1)(react-dom@18.2.0)(react@18.2.0): + recharts@2.15.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: clsx: 2.1.1 eventemitter3: 4.0.7 lodash: 4.17.21 - prop-types: 15.8.1 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - react-is: 16.13.1 - react-smooth: 2.0.5(prop-types@15.8.1)(react-dom@18.2.0)(react@18.2.0) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-is: 18.3.1 + react-smooth: 4.0.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) recharts-scale: 0.4.5 tiny-invariant: 1.3.3 victory-vendor: 36.9.2 @@ -7629,21 +7896,22 @@ snapshots: unified: 11.0.5 vfile: 6.0.3 - reflect.getprototypeof@1.0.6: + reflect.getprototypeof@1.0.8: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.3 + dunder-proto: 1.0.0 + es-abstract: 1.23.5 es-errors: 1.3.0 - get-intrinsic: 1.2.4 - globalthis: 1.0.4 - which-builtin-type: 1.1.4 + get-intrinsic: 1.2.5 + gopd: 1.2.0 + which-builtin-type: 1.2.0 regenerator-runtime@0.14.1: {} regexp.prototype.flags@1.5.3: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 es-errors: 1.3.0 set-function-name: 2.0.2 @@ -7658,7 +7926,7 @@ snapshots: rehype-raw@7.0.0: dependencies: '@types/hast': 3.0.4 - hast-util-raw: 9.0.4 + hast-util-raw: 9.1.0 vfile: 6.0.3 rehype-recma@1.0.0: @@ -7743,28 +8011,29 @@ snapshots: optionalDependencies: fsevents: 2.3.3 - rollup@4.25.0: + rollup@4.28.1: dependencies: '@types/estree': 1.0.6 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.25.0 - '@rollup/rollup-android-arm64': 4.25.0 - '@rollup/rollup-darwin-arm64': 4.25.0 - '@rollup/rollup-darwin-x64': 4.25.0 - '@rollup/rollup-freebsd-arm64': 4.25.0 - '@rollup/rollup-freebsd-x64': 4.25.0 - '@rollup/rollup-linux-arm-gnueabihf': 4.25.0 - '@rollup/rollup-linux-arm-musleabihf': 4.25.0 - '@rollup/rollup-linux-arm64-gnu': 4.25.0 - '@rollup/rollup-linux-arm64-musl': 4.25.0 - '@rollup/rollup-linux-powerpc64le-gnu': 4.25.0 - '@rollup/rollup-linux-riscv64-gnu': 4.25.0 - '@rollup/rollup-linux-s390x-gnu': 4.25.0 - '@rollup/rollup-linux-x64-gnu': 4.25.0 - '@rollup/rollup-linux-x64-musl': 4.25.0 - '@rollup/rollup-win32-arm64-msvc': 4.25.0 - '@rollup/rollup-win32-ia32-msvc': 4.25.0 - '@rollup/rollup-win32-x64-msvc': 4.25.0 + '@rollup/rollup-android-arm-eabi': 4.28.1 + '@rollup/rollup-android-arm64': 4.28.1 + '@rollup/rollup-darwin-arm64': 4.28.1 + '@rollup/rollup-darwin-x64': 4.28.1 + '@rollup/rollup-freebsd-arm64': 4.28.1 + '@rollup/rollup-freebsd-x64': 4.28.1 + '@rollup/rollup-linux-arm-gnueabihf': 4.28.1 + '@rollup/rollup-linux-arm-musleabihf': 4.28.1 + '@rollup/rollup-linux-arm64-gnu': 4.28.1 + '@rollup/rollup-linux-arm64-musl': 4.28.1 + '@rollup/rollup-linux-loongarch64-gnu': 4.28.1 + '@rollup/rollup-linux-powerpc64le-gnu': 4.28.1 + '@rollup/rollup-linux-riscv64-gnu': 4.28.1 + '@rollup/rollup-linux-s390x-gnu': 4.28.1 + '@rollup/rollup-linux-x64-gnu': 4.28.1 + '@rollup/rollup-linux-x64-musl': 4.28.1 + '@rollup/rollup-win32-arm64-msvc': 4.28.1 + '@rollup/rollup-win32-ia32-msvc': 4.28.1 + '@rollup/rollup-win32-x64-msvc': 4.28.1 fsevents: 2.3.3 run-applescript@7.0.0: {} @@ -7779,24 +8048,26 @@ snapshots: safe-array-concat@1.1.2: dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.4 - has-symbols: 1.0.3 + call-bind: 1.0.8 + get-intrinsic: 1.2.5 + has-symbols: 1.1.0 isarray: 2.0.5 safe-buffer@5.2.1: {} safe-regex-test@1.0.3: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 es-errors: 1.3.0 - is-regex: 1.1.4 + is-regex: 1.2.0 - sass@1.69.5: + sass@1.83.0: dependencies: - chokidar: 3.6.0 - immutable: 4.3.7 + chokidar: 4.0.1 + immutable: 5.0.3 source-map-js: 1.2.1 + optionalDependencies: + '@parcel/watcher': 2.5.0 scheduler@0.23.2: dependencies: @@ -7813,8 +8084,8 @@ snapshots: define-data-property: 1.1.4 es-errors: 1.3.0 function-bind: 1.1.2 - get-intrinsic: 1.2.4 - gopd: 1.0.1 + get-intrinsic: 1.2.5 + gopd: 1.2.0 has-property-descriptors: 1.0.2 set-function-name@2.0.2: @@ -7838,7 +8109,7 @@ snapshots: shebang-regex@3.0.0: {} - shell-quote@1.8.1: {} + shell-quote@1.8.2: {} shiki@0.14.7: dependencies: @@ -7849,9 +8120,9 @@ snapshots: side-channel@1.0.6: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 es-errors: 1.3.0 - get-intrinsic: 1.2.4 + get-intrinsic: 1.2.5 object-inspect: 1.13.3 signal-exit@4.1.0: {} @@ -7909,14 +8180,14 @@ snapshots: string.prototype.matchall@4.0.11: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.3 + es-abstract: 1.23.5 es-errors: 1.3.0 es-object-atoms: 1.0.0 - get-intrinsic: 1.2.4 - gopd: 1.0.1 - has-symbols: 1.0.3 + get-intrinsic: 1.2.5 + gopd: 1.2.0 + has-symbols: 1.1.0 internal-slot: 1.0.7 regexp.prototype.flags: 1.5.3 set-function-name: 2.0.2 @@ -7924,27 +8195,32 @@ snapshots: string.prototype.padend@3.1.6: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.3 + es-abstract: 1.23.5 es-object-atoms: 1.0.0 + string.prototype.repeat@1.0.0: + dependencies: + define-properties: 1.2.1 + es-abstract: 1.23.5 + string.prototype.trim@1.2.9: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.3 + es-abstract: 1.23.5 es-object-atoms: 1.0.0 string.prototype.trimend@1.0.8: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 es-object-atoms: 1.0.0 string.prototype.trimstart@1.0.8: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 define-properties: 1.2.1 es-object-atoms: 1.0.0 @@ -7965,18 +8241,14 @@ snapshots: strip-json-comments@3.1.1: {} - style-to-js@1.1.10: + style-to-js@1.1.16: dependencies: - style-to-object: 1.0.5 + style-to-object: 1.0.8 style-to-object@0.4.4: dependencies: inline-style-parser: 0.1.1 - style-to-object@1.0.5: - dependencies: - inline-style-parser: 0.2.2 - style-to-object@1.0.8: dependencies: inline-style-parser: 0.2.4 @@ -8005,7 +8277,7 @@ snapshots: csso: 5.0.5 picocolors: 1.1.1 - synckit@0.8.8: + synckit@0.9.2: dependencies: '@pkgr/core': 0.1.1 tslib: 2.8.1 @@ -8032,7 +8304,7 @@ snapshots: tough-cookie@4.1.4: dependencies: - psl: 1.10.0 + psl: 1.15.0 punycode: 2.3.1 universalify: 0.2.0 url-parse: 1.5.10 @@ -8041,13 +8313,13 @@ snapshots: trough@2.2.0: {} - ts-api-utils@1.4.0(typescript@5.3.2): + ts-api-utils@1.4.3(typescript@5.2.2): dependencies: - typescript: 5.3.2 + typescript: 5.2.2 - tsconfck@3.1.4(typescript@5.3.2): - dependencies: - typescript: 5.3.2 + tsconfck@3.1.4(typescript@5.2.2): + optionalDependencies: + typescript: 5.2.2 tsconfig-paths@3.15.0: dependencies: @@ -8070,7 +8342,7 @@ snapshots: type-fest@2.19.0: {} - type-fest@4.26.1: {} + type-fest@4.30.0: {} type-is@1.6.18: dependencies: @@ -8079,64 +8351,65 @@ snapshots: typed-array-buffer@1.0.2: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 es-errors: 1.3.0 is-typed-array: 1.1.13 typed-array-byte-length@1.0.1: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 for-each: 0.3.3 - gopd: 1.0.1 - has-proto: 1.0.3 + gopd: 1.2.0 + has-proto: 1.2.0 is-typed-array: 1.1.13 - typed-array-byte-offset@1.0.2: + typed-array-byte-offset@1.0.3: dependencies: available-typed-arrays: 1.0.7 - call-bind: 1.0.7 + call-bind: 1.0.8 for-each: 0.3.3 - gopd: 1.0.1 - has-proto: 1.0.3 + gopd: 1.2.0 + has-proto: 1.2.0 is-typed-array: 1.1.13 + reflect.getprototypeof: 1.0.8 - typed-array-length@1.0.6: + typed-array-length@1.0.7: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 for-each: 0.3.3 - gopd: 1.0.1 - has-proto: 1.0.3 + gopd: 1.2.0 is-typed-array: 1.1.13 possible-typed-array-names: 1.0.0 + reflect.getprototypeof: 1.0.8 - typedoc@0.25.4(typescript@5.3.2): + typedoc@0.25.13(typescript@5.2.2): dependencies: lunr: 2.3.9 marked: 4.3.0 minimatch: 9.0.5 shiki: 0.14.7 - typescript: 5.3.2 + typescript: 5.2.2 - typesafe-i18n@5.26.2(typescript@5.3.2): + typesafe-i18n@5.26.2(typescript@5.2.2): dependencies: - typescript: 5.3.2 + typescript: 5.2.2 - typescript-eslint-language-service@5.0.5(@typescript-eslint/parser@6.13.1)(eslint@8.55.0)(typescript@5.3.2): + typescript-eslint-language-service@5.0.5(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.2.2))(eslint@8.57.1)(typescript@5.2.2): dependencies: - '@typescript-eslint/parser': 6.13.1(eslint@8.55.0)(typescript@5.3.2) - eslint: 8.55.0 - typescript: 5.3.2 + '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.2.2) + eslint: 8.57.1 + typescript: 5.2.2 - typescript@5.3.2: {} + typescript@5.2.2: {} unbox-primitive@1.0.2: dependencies: - call-bind: 1.0.7 + call-bind: 1.0.8 has-bigints: 1.0.2 - has-symbols: 1.0.3 - which-boxed-primitive: 1.0.2 + has-symbols: 1.1.0 + which-boxed-primitive: 1.1.0 - undici-types@5.26.5: {} + undici-types@6.19.8: {} unicorn-magic@0.1.0: {} @@ -8194,20 +8467,21 @@ snapshots: querystringify: 2.2.0 requires-port: 1.0.0 - use-breakpoint@4.0.1(react-dom@18.2.0)(react@18.2.0): + use-breakpoint@4.0.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) - use-deep-compare-effect@1.8.1(react@18.2.0): + use-deep-compare-effect@1.8.1(react@18.3.1): dependencies: '@babel/runtime': 7.26.0 dequal: 2.0.3 - react: 18.2.0 + react: 18.3.1 - use-sync-external-store@1.2.0(react@18.2.0): + use-sync-external-store@1.2.2(react@18.3.1): dependencies: - react: 18.2.0 + react: 18.3.1 + optional: true uuid@8.3.2: {} @@ -8240,7 +8514,7 @@ snapshots: '@types/d3-interpolate': 3.0.4 '@types/d3-scale': 4.0.8 '@types/d3-shape': 3.1.6 - '@types/d3-time': 3.0.3 + '@types/d3-time': 3.0.4 '@types/d3-timer': 3.0.2 d3-array: 3.2.4 d3-ease: 3.0.1 @@ -8250,35 +8524,36 @@ snapshots: d3-time: 3.1.0 d3-timer: 3.0.1 - vite-tsconfig-paths@4.3.2(typescript@5.3.2)(vite@5.4.11): + vite-tsconfig-paths@4.3.2(typescript@5.2.2)(vite@5.4.11(@types/node@20.17.10)(sass@1.83.0)): dependencies: - debug: 4.3.7 + debug: 4.4.0 globrex: 0.1.2 - tsconfck: 3.1.4(typescript@5.3.2) - vite: 5.4.11(@types/node@20.10.3)(sass@1.69.5) + tsconfck: 3.1.4(typescript@5.2.2) + optionalDependencies: + vite: 5.4.11(@types/node@20.17.10)(sass@1.83.0) transitivePeerDependencies: - supports-color - typescript - vite@4.5.3(@types/node@20.10.3)(sass@1.69.5): + vite@4.5.5(@types/node@20.17.10)(sass@1.83.0): dependencies: - '@types/node': 20.10.3 esbuild: 0.18.20 - postcss: 8.4.32 + postcss: 8.4.49 rollup: 3.29.5 - sass: 1.69.5 optionalDependencies: + '@types/node': 20.17.10 fsevents: 2.3.3 + sass: 1.83.0 - vite@5.4.11(@types/node@20.10.3)(sass@1.69.5): + vite@5.4.11(@types/node@20.17.10)(sass@1.83.0): dependencies: - '@types/node': 20.10.3 esbuild: 0.21.5 postcss: 8.4.49 - rollup: 4.25.0 - sass: 1.69.5 + rollup: 4.28.1 optionalDependencies: + '@types/node': 20.17.10 fsevents: 2.3.3 + sass: 1.83.0 vscode-oniguruma@1.7.0: {} @@ -8286,28 +8561,29 @@ snapshots: web-namespaces@2.0.1: {} - which-boxed-primitive@1.0.2: + which-boxed-primitive@1.1.0: dependencies: - is-bigint: 1.0.4 - is-boolean-object: 1.1.2 - is-number-object: 1.0.7 - is-string: 1.0.7 - is-symbol: 1.0.4 + is-bigint: 1.1.0 + is-boolean-object: 1.2.0 + is-number-object: 1.1.0 + is-string: 1.1.0 + is-symbol: 1.1.0 - which-builtin-type@1.1.4: + which-builtin-type@1.2.0: dependencies: + call-bind: 1.0.8 function.prototype.name: 1.1.6 has-tostringtag: 1.0.2 is-async-function: 2.0.0 is-date-object: 1.0.5 - is-finalizationregistry: 1.0.2 + is-finalizationregistry: 1.1.0 is-generator-function: 1.0.10 - is-regex: 1.1.4 + is-regex: 1.2.0 is-weakref: 1.0.2 isarray: 2.0.5 - which-boxed-primitive: 1.0.2 + which-boxed-primitive: 1.1.0 which-collection: 1.0.2 - which-typed-array: 1.1.15 + which-typed-array: 1.1.16 which-collection@1.0.2: dependencies: @@ -8316,12 +8592,12 @@ snapshots: is-weakmap: 2.0.2 is-weakset: 2.0.3 - which-typed-array@1.1.15: + which-typed-array@1.1.16: dependencies: available-typed-arrays: 1.0.7 - call-bind: 1.0.7 + call-bind: 1.0.8 for-each: 0.3.3 - gopd: 1.0.1 + gopd: 1.2.0 has-tostringtag: 1.0.2 which@1.3.1: @@ -8382,12 +8658,12 @@ snapshots: yoctocolors-cjs@2.1.2: {} - zod@3.22.4: {} + zod@3.24.1: {} - zustand@4.4.7(@types/react@18.2.41)(react@18.2.0): - dependencies: - '@types/react': 18.2.41 - react: 18.2.0 - use-sync-external-store: 1.2.0(react@18.2.0) + zustand@5.0.2(@types/react@18.3.17)(react@18.3.1)(use-sync-external-store@1.2.2(react@18.3.1)): + optionalDependencies: + '@types/react': 18.3.17 + react: 18.3.1 + use-sync-external-store: 1.2.2(react@18.3.1) zwitch@2.0.4: {} diff --git a/src-tauri/.sqlx/query-be25a82798d12394363f3379f2b966d29003dd126f4ac0f8c5236d00891b31c5.json b/src-tauri/.sqlx/query-e83851eee8a8ccbf3729ba0de91a025feabb43bdba8ec78a1adb79e8870dbac9.json similarity index 52% rename from src-tauri/.sqlx/query-be25a82798d12394363f3379f2b966d29003dd126f4ac0f8c5236d00891b31c5.json rename to src-tauri/.sqlx/query-e83851eee8a8ccbf3729ba0de91a025feabb43bdba8ec78a1adb79e8870dbac9.json index defb9b73..c41516a1 100644 --- a/src-tauri/.sqlx/query-be25a82798d12394363f3379f2b966d29003dd126f4ac0f8c5236d00891b31c5.json +++ b/src-tauri/.sqlx/query-e83851eee8a8ccbf3729ba0de91a025feabb43bdba8ec78a1adb79e8870dbac9.json @@ -1,6 +1,6 @@ { "db_name": "SQLite", - "query": "SELECT id \"id: _\", name, uuid, url, proxy_url, username, token \"token?\", disable_all_traffic, enterprise_enabled FROM instance WHERE uuid = $1;", + "query": "SELECT id \"id: _\", instance_id, name, address, pubkey, endpoint, allowed_ips, dns, network_id, route_all_traffic, mfa_enabled, keepalive_interval FROM location WHERE name = $1", "describe": { "columns": [ { @@ -9,44 +9,59 @@ "type_info": "Integer" }, { - "name": "name", + "name": "instance_id", "ordinal": 1, - "type_info": "Text" + "type_info": "Integer" }, { - "name": "uuid", + "name": "name", "ordinal": 2, "type_info": "Text" }, { - "name": "url", + "name": "address", "ordinal": 3, "type_info": "Text" }, { - "name": "proxy_url", + "name": "pubkey", "ordinal": 4, "type_info": "Text" }, { - "name": "username", + "name": "endpoint", "ordinal": 5, "type_info": "Text" }, { - "name": "token?", + "name": "allowed_ips", "ordinal": 6, "type_info": "Text" }, { - "name": "disable_all_traffic", + "name": "dns", "ordinal": 7, - "type_info": "Bool" + "type_info": "Text" }, { - "name": "enterprise_enabled", + "name": "network_id", "ordinal": 8, + "type_info": "Integer" + }, + { + "name": "route_all_traffic", + "ordinal": 9, "type_info": "Bool" + }, + { + "name": "mfa_enabled", + "ordinal": 10, + "type_info": "Bool" + }, + { + "name": "keepalive_interval", + "ordinal": 11, + "type_info": "Integer" } ], "parameters": { @@ -59,10 +74,13 @@ false, false, false, + false, true, false, + false, + false, false ] }, - "hash": "be25a82798d12394363f3379f2b966d29003dd126f4ac0f8c5236d00891b31c5" + "hash": "e83851eee8a8ccbf3729ba0de91a025feabb43bdba8ec78a1adb79e8870dbac9" } diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index 36a498e1..f2669c8f 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -28,18 +28,6 @@ dependencies = [ "version_check", ] -[[package]] -name = "ahash" -version = "0.8.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" -dependencies = [ - "cfg-if", - "once_cell", - "version_check", - "zerocopy", -] - [[package]] name = "aho-corasick" version = "1.1.3" @@ -136,9 +124,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.94" +version = "1.0.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1fd03a028ef38ba2276dce7e33fcd6369c158a1bca17946c4b1b701891c1ff7" +checksum = "34ac096ce696dc2fcabef30516bb13c0a68a11d30131d3df6f04711467681b04" [[package]] name = "arboard" @@ -177,9 +165,9 @@ dependencies = [ [[package]] name = "async-broadcast" -version = "0.7.1" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20cd0e2e25ea8e5f7e9df04578dc6cf5c83577fd09b1a46aaf5c85e1c33f2a7e" +checksum = "435a87a52755b8f27fcf321ac4f04b2802e337c8c4872923137471ec39c37532" dependencies = [ "event-listener 5.3.1", "event-listener-strategy", @@ -207,7 +195,7 @@ checksum = "30ca9a001c1e8ba5149f91a74362376cc6bc5b919d92d988668657bd570bdcec" dependencies = [ "async-task", "concurrent-queue", - "fastrand 2.2.0", + "fastrand 2.3.0", "futures-lite 2.5.0", "slab", ] @@ -268,7 +256,7 @@ dependencies = [ "futures-lite 2.5.0", "parking", "polling 3.7.4", - "rustix 0.38.41", + "rustix 0.38.42", "slab", "tracing", "windows-sys 0.59.0", @@ -307,7 +295,7 @@ dependencies = [ "cfg-if", "event-listener 3.1.0", "futures-lite 1.13.0", - "rustix 0.38.41", + "rustix 0.38.42", "windows-sys 0.48.0", ] @@ -326,7 +314,7 @@ dependencies = [ "cfg-if", "event-listener 5.3.1", "futures-lite 2.5.0", - "rustix 0.38.41", + "rustix 0.38.42", "tracing", ] @@ -338,7 +326,7 @@ checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.95", ] [[package]] @@ -353,7 +341,7 @@ dependencies = [ "cfg-if", "futures-core", "futures-io", - "rustix 0.38.41", + "rustix 0.38.42", "signal-hook-registry", "slab", "windows-sys 0.59.0", @@ -378,7 +366,7 @@ checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.95", ] [[package]] @@ -389,13 +377,13 @@ checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" [[package]] name = "async-trait" -version = "0.1.83" +version = "0.1.84" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd" +checksum = "1b1244b10dcd56c92219da4e14caa97e312079e185f04ba3eea25061561dc0a0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.95", ] [[package]] @@ -465,7 +453,7 @@ dependencies = [ "rustversion", "serde", "sync_wrapper 1.0.2", - "tower 0.5.1", + "tower 0.5.2", "tower-layer", "tower-service", ] @@ -622,7 +610,7 @@ dependencies = [ "proc-macro-crate 3.2.0", "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.95", ] [[package]] @@ -648,9 +636,9 @@ dependencies = [ [[package]] name = "bstr" -version = "1.11.0" +version = "1.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a68f1f47cdf0ec8ee4b941b2eee2a80cb796db73118c0dd09ac63fbe405be22" +checksum = "531a9155a481e2ee699d4f98f43c0ca4ff8ee1bfd55c31e9e98fb29d2b176fe0" dependencies = [ "memchr", "serde", @@ -697,9 +685,9 @@ dependencies = [ [[package]] name = "bytemuck" -version = "1.20.0" +version = "1.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b37c88a63ffd85d15b406896cc343916d7cf57838a847b3a6f2ca5d39a5695a" +checksum = "ef657dfab802224e671f5818e9a4935f9b1957ed18e58292690cc39e7a4092a3" [[package]] name = "byteorder" @@ -732,7 +720,7 @@ dependencies = [ "cairo-sys-rs", "glib", "libc", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -758,9 +746,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.2" +version = "1.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f34d93e62b03caf570cccc334cbc6c2fceca82f39211051345108adcba3eebdc" +checksum = "a012a0df96dd6d06ba9a1b29d6402d1a5d77c6befd2566afdc26e10603dc93d7" dependencies = [ "jobserver", "libc", @@ -823,9 +811,9 @@ checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" [[package]] name = "chrono" -version = "0.4.38" +version = "0.4.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" +checksum = "7e36cc9d416881d2e24f9a963be5fb1cd90966419ac844274161d10488b3e825" dependencies = [ "android-tzdata", "iana-time-zone", @@ -838,9 +826,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.22" +version = "4.5.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69371e34337c4c984bbe322360c2547210bf632eb2814bbe78a6e87a2935bd2b" +checksum = "3135e7ec2ef7b10c6ed8950f0f792ed96ee093fa088608f1c76e569722700c84" dependencies = [ "clap_builder", "clap_derive", @@ -848,9 +836,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.22" +version = "4.5.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e24c1b4099818523236a8ca881d2b45db98dadfb4625cf6608c12069fcbbde1" +checksum = "30582fc632330df2bd26877bde0c1f4470d57c582bbc070376afcd04d8cb4838" dependencies = [ "anstream", "anstyle", @@ -867,14 +855,14 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.95", ] [[package]] name = "clap_lex" -version = "0.7.3" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afb84c814227b90d6895e01398aee0d8033c00e7466aca416fb6a8e0eb19d8a7" +checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" [[package]] name = "clipboard-win" @@ -937,6 +925,13 @@ dependencies = [ "memchr", ] +[[package]] +name = "common" +version = "1.0.0" +dependencies = [ + "nix 0.29.0", +] + [[package]] name = "concurrent-queue" version = "2.5.0" @@ -978,6 +973,35 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" +[[package]] +name = "cookie" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ddef33a339a91ea89fb53151bd0a4689cfce27055c291dfa69945475d22c747" +dependencies = [ + "percent-encoding", + "time", + "version_check", +] + +[[package]] +name = "cookie_store" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2eac901828f88a5241ee0600950ab981148a18f2f756900ffba1b125ca6a3ef9" +dependencies = [ + "cookie", + "document-features", + "idna", + "log", + "publicsuffix", + "serde", + "serde_derive", + "serde_json", + "time", + "url", +] + [[package]] name = "core-foundation" version = "0.9.4" @@ -1076,18 +1100,18 @@ dependencies = [ [[package]] name = "crossbeam-channel" -version = "0.5.13" +version = "0.5.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33480d6946193aa8033910124896ca395333cae7e2d1113d1fef6c3272217df2" +checksum = "06ba6d68e24814cb8de6bb986db8222d3a027d15872cabc0d18817bc3c0e4471" dependencies = [ "crossbeam-utils", ] [[package]] name = "crossbeam-deque" -version = "0.8.5" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" +checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" dependencies = [ "crossbeam-epoch", "crossbeam-utils", @@ -1104,18 +1128,18 @@ dependencies = [ [[package]] name = "crossbeam-queue" -version = "0.3.11" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df0346b5d5e76ac2fe4e327c5fd1118d6be7c51dfb18f9b7922923f287471e35" +checksum = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115" dependencies = [ "crossbeam-utils", ] [[package]] name = "crossbeam-utils" -version = "0.8.20" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" [[package]] name = "crunchy" @@ -1157,7 +1181,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" dependencies = [ "quote", - "syn 2.0.90", + "syn 2.0.95", ] [[package]] @@ -1167,7 +1191,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a2785755761f3ddc1492979ce1e48d2c00d09311c39e4466429188f3dd6501" dependencies = [ "quote", - "syn 2.0.90", + "syn 2.0.95", ] [[package]] @@ -1181,6 +1205,7 @@ dependencies = [ "curve25519-dalek-derive", "fiat-crypto", "rustc_version", + "serde", "subtle", "zeroize", ] @@ -1193,7 +1218,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.95", ] [[package]] @@ -1204,7 +1229,7 @@ checksum = "2a76fa97167fa740dcdbfe18e8895601e1bc36525f09b044e00916e717c03a3c" dependencies = [ "dconf_rs", "detect-desktop-environment", - "dirs 4.0.0", + "dirs", "objc", "rust-ini 0.18.0", "web-sys", @@ -1233,7 +1258,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.90", + "syn 2.0.95", ] [[package]] @@ -1244,7 +1269,7 @@ checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ "darling_core", "quote", - "syn 2.0.90", + "syn 2.0.95", ] [[package]] @@ -1255,23 +1280,23 @@ checksum = "7046468a81e6a002061c01e6a7c83139daf91b11c30e66795b13217c2d885c8b" [[package]] name = "defguard-client" -version = "1.1.0" +version = "1.1.1" dependencies = [ "anyhow", "base64 0.22.1", "chrono", "clap", + "common", "dark-light", "defguard_wireguard_rs", - "dirs 5.0.1", + "dirs-next", "lazy_static", "log", "nix 0.29.0", "prost", "prost-build", - "rand 0.8.5", "regex", - "reqwest 0.12.9", + "reqwest 0.12.12", "rust-ini 0.21.1", "serde", "serde_json", @@ -1284,7 +1309,7 @@ dependencies = [ "tauri-plugin-log", "tauri-plugin-single-instance", "tauri-plugin-window-state", - "thiserror", + "thiserror 2.0.9", "time", "tokio", "tokio-util", @@ -1301,10 +1326,27 @@ dependencies = [ "x25519-dalek", ] +[[package]] +name = "defguard-dg" +version = "1.1.1" +dependencies = [ + "clap", + "common", + "defguard_wireguard_rs", + "dirs-next", + "prost", + "prost-build", + "reqwest 0.12.12", + "serde", + "serde_json", + "thiserror 2.0.9", + "tokio", +] + [[package]] name = "defguard_wireguard_rs" -version = "0.5.5" -source = "git+https://github.com/DefGuard/wireguard-rs.git?rev=v0.5.5#fbb88ee2296121459ab17985857915b680ade8a4" +version = "0.7.0" +source = "git+https://github.com/DefGuard/wireguard-rs.git?rev=v0.7.0#943f9ff2970d13fe139212b954232f474642b213" dependencies = [ "base64 0.22.1", "libc", @@ -1317,7 +1359,8 @@ dependencies = [ "netlink-sys", "nix 0.29.0", "serde", - "thiserror", + "thiserror 2.0.9", + "x25519-dalek", ] [[package]] @@ -1360,7 +1403,7 @@ checksum = "d150dea618e920167e5973d70ae6ece4385b7164e0d799fe7c122dd0a5d912ad" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.95", ] [[package]] @@ -1381,7 +1424,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.95", ] [[package]] @@ -1391,7 +1434,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c" dependencies = [ "derive_builder_core", - "syn 2.0.90", + "syn 2.0.95", ] [[package]] @@ -1404,7 +1447,7 @@ dependencies = [ "proc-macro2", "quote", "rustc_version", - "syn 2.0.90", + "syn 2.0.95", ] [[package]] @@ -1431,16 +1474,7 @@ version = "4.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059" dependencies = [ - "dirs-sys 0.3.7", -] - -[[package]] -name = "dirs" -version = "5.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" -dependencies = [ - "dirs-sys 0.4.1", + "dirs-sys", ] [[package]] @@ -1464,18 +1498,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "dirs-sys" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" -dependencies = [ - "libc", - "option-ext", - "redox_users", - "windows-sys 0.48.0", -] - [[package]] name = "dirs-sys-next" version = "0.1.2" @@ -1501,7 +1523,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.95", ] [[package]] @@ -1528,6 +1550,15 @@ dependencies = [ "const-random", ] +[[package]] +name = "document-features" +version = "0.2.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb6969eaabd2421f8a2775cfd2471a2b634372b4a25d41e3bd647b79912850a0" +dependencies = [ + "litrs", +] + [[package]] name = "dotenvy" version = "0.15.7" @@ -1623,7 +1654,7 @@ checksum = "de0d48a183585823424a4ce1aa132d174a6a81bd540895822eb4c8373a8e49e8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.95", ] [[package]] @@ -1708,15 +1739,15 @@ dependencies = [ [[package]] name = "fastrand" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "486f806e73c5707928240ddc295403b1b93c96a02038563881c4a2fd84b81ac4" +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" [[package]] name = "fdeflate" -version = "0.3.6" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07c6f4c64c1d33a3111c4466f7365ebdcc37c5bd1ea0d62aae2e3d722aacbedb" +checksum = "1e6853b52649d4ac5c0bd02320cddc5ba956bdb407c4b75a2c6b75bf51500f8c" dependencies = [ "simd-adler32", ] @@ -1800,6 +1831,12 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" +[[package]] +name = "foldhash" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0d2fde1f7b3d48b8395d5f2de76c18a528bd6a9cdde438df747bfcba3e05d6f" + [[package]] name = "foreign-types" version = "0.3.2" @@ -1827,7 +1864,7 @@ checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.95", ] [[package]] @@ -1932,7 +1969,7 @@ version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cef40d21ae2c515b51041df9ed313ed21e572df340ea58a922a0aefe7e8891a1" dependencies = [ - "fastrand 2.2.0", + "fastrand 2.3.0", "futures-core", "futures-io", "parking", @@ -1947,7 +1984,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.95", ] [[package]] @@ -2149,7 +2186,7 @@ dependencies = [ "glib", "libc", "once_cell", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -2195,7 +2232,7 @@ dependencies = [ "libc", "once_cell", "smallvec", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -2225,9 +2262,9 @@ dependencies = [ [[package]] name = "glob" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" +checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" [[package]] name = "globset" @@ -2352,7 +2389,7 @@ version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" dependencies = [ - "ahash 0.7.8", + "ahash", ] [[package]] @@ -2360,24 +2397,25 @@ name = "hashbrown" version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" -dependencies = [ - "ahash 0.8.11", - "allocator-api2", -] [[package]] name = "hashbrown" version = "0.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" +dependencies = [ + "allocator-api2", + "equivalent", + "foldhash", +] [[package]] name = "hashlink" -version = "0.9.1" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ba4ff7128dee98c7dc9794b6a411377e1404dba1c97deb8d1a55297bd25d8af" +checksum = "7382cf6263419f2d8df38c55d7da83da5c18aef87fc7a7fc1fb1e344edfe14c1" dependencies = [ - "hashbrown 0.14.5", + "hashbrown 0.15.2", ] [[package]] @@ -2439,11 +2477,11 @@ dependencies = [ [[package]] name = "home" -version = "0.5.9" +version = "0.5.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" +checksum = "589533453244b0995c858700322199b2becb13b627df2851f64a2775d024abcf" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -2536,9 +2574,9 @@ checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] name = "hyper" -version = "0.14.31" +version = "0.14.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c08302e8fa335b151b788c775ff56e7a03ae64ff85c548ee820fecb70356e85" +checksum = "41dfc780fdec9373c01bae43289ea34c972e40ee3c9f6b3c8801a35f35586ce7" dependencies = [ "bytes", "futures-channel", @@ -2560,9 +2598,9 @@ dependencies = [ [[package]] name = "hyper" -version = "1.5.1" +version = "1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97818827ef4f364230e16705d4706e2897df2bb60617d6ca15d598025a3c481f" +checksum = "256fb8d4bd6413123cc9d91832d78325c48ff41677595be797d90f42969beae0" dependencies = [ "bytes", "futures-channel", @@ -2581,13 +2619,13 @@ dependencies = [ [[package]] name = "hyper-rustls" -version = "0.27.3" +version = "0.27.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08afdbb5c31130e3034af566421053ab03787c640246a446327f550d11bcb333" +checksum = "2d191583f3da1305256f22463b9bb0471acad48a4e534a5218b9963e9c1f59b2" dependencies = [ "futures-util", "http 1.2.0", - "hyper 1.5.1", + "hyper 1.5.2", "hyper-util", "rustls", "rustls-pki-types", @@ -2602,7 +2640,7 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b90d566bffbce6a75bd8b09a05aa8c2cb1fabb6cb348f8840c9e4c90a0d83b0" dependencies = [ - "hyper 1.5.1", + "hyper 1.5.2", "hyper-util", "pin-project-lite", "tokio", @@ -2616,7 +2654,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" dependencies = [ "bytes", - "hyper 0.14.31", + "hyper 0.14.32", "native-tls", "tokio", "tokio-native-tls", @@ -2630,7 +2668,7 @@ checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" dependencies = [ "bytes", "http-body-util", - "hyper 1.5.1", + "hyper 1.5.2", "hyper-util", "native-tls", "tokio", @@ -2649,7 +2687,7 @@ dependencies = [ "futures-util", "http 1.2.0", "http-body 1.0.1", - "hyper 1.5.1", + "hyper 1.5.2", "pin-project-lite", "socket2 0.5.8", "tokio", @@ -2805,7 +2843,7 @@ checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.95", ] [[package]] @@ -2993,7 +3031,7 @@ dependencies = [ "combine", "jni-sys", "log", - "thiserror", + "thiserror 1.0.69", "walkdir", ] @@ -3008,7 +3046,7 @@ dependencies = [ "combine", "jni-sys", "log", - "thiserror", + "thiserror 1.0.69", "walkdir", "windows-sys 0.45.0", ] @@ -3036,9 +3074,9 @@ checksum = "f5d4a7da358eff58addd2877a45865158f0d78c911d43a5784ceb7bbf52833b0" [[package]] name = "js-sys" -version = "0.3.74" +version = "0.3.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a865e038f7f6ed956f788f0d7d60c541fff74c7bd74272c5d4cf15c63743e705" +checksum = "6717b6b5b077764fb5966237269cb3c64edddde4b14ce42647430a78ced9e7b7" dependencies = [ "once_cell", "wasm-bindgen", @@ -3053,7 +3091,7 @@ dependencies = [ "jsonptr", "serde", "serde_json", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -3115,9 +3153,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.167" +version = "0.2.169" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09d6582e104315a817dff97f75133544b2e094ee22447d2acf4a74e189ba06fc" +checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" [[package]] name = "libgit2-sys" @@ -3209,6 +3247,12 @@ version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104" +[[package]] +name = "litrs" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4ce301924b7887e9d637144fdade93f9dfff9b60981d4ac161db09720d39aa5" + [[package]] name = "lock_api" version = "0.4.12" @@ -3355,9 +3399,9 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "miniz_oxide" -version = "0.8.0" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" +checksum = "4ffbe83022cedc1d264172192511ae958937694cd57ce297164951b8b3568394" dependencies = [ "adler2", "simd-adler32", @@ -3407,7 +3451,7 @@ dependencies = [ "jni-sys", "ndk-sys", "num_enum", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -3450,9 +3494,9 @@ dependencies = [ [[package]] name = "netlink-packet-route" -version = "0.20.1" +version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55e5bda7ca0f9ac5e75b5debac3b75e29a8ac8e2171106a2c3bb466389a8dd83" +checksum = "483325d4bfef65699214858f097d504eb812c38ce7077d165f301ec406c3066e" dependencies = [ "anyhow", "bitflags 2.6.0", @@ -3472,7 +3516,7 @@ dependencies = [ "anyhow", "byteorder", "paste", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -3491,9 +3535,9 @@ dependencies = [ [[package]] name = "netlink-sys" -version = "0.8.6" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "416060d346fbaf1f23f9512963e3e878f1a78e707cb699ba9215761754244307" +checksum = "16c903aa70590cb93691bf97a767c8d1d6122d2cc9070433deb3bbf36ce8bd23" dependencies = [ "bytes", "libc", @@ -3805,9 +3849,9 @@ dependencies = [ [[package]] name = "object" -version = "0.36.5" +version = "0.36.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aedf0a2d09c573ed1d8d85b30c119153926a2b36dce0ab28322c09a117a4683e" +checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" dependencies = [ "memchr", ] @@ -3841,7 +3885,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.95", ] [[package]] @@ -3872,12 +3916,6 @@ dependencies = [ "vcpkg", ] -[[package]] -name = "option-ext" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" - [[package]] name = "ordered-multimap" version = "0.4.3" @@ -4113,7 +4151,7 @@ dependencies = [ "phf_shared 0.11.2", "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.95", ] [[package]] @@ -4160,7 +4198,7 @@ checksum = "3c0f5fad0874fc7abcd4d750e76917eaebbecaa2c20bde22e1dbeeba8beb758c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.95", ] [[package]] @@ -4182,7 +4220,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066" dependencies = [ "atomic-waker", - "fastrand 2.2.0", + "fastrand 2.3.0", "futures-io", ] @@ -4228,9 +4266,9 @@ dependencies = [ [[package]] name = "png" -version = "0.17.14" +version = "0.17.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52f9d46a34a05a6a57566bc2bfae066ef07585a6e3fa30fbbdff5936380623f0" +checksum = "82151a2fc869e011c153adc57cf2789ccb8d9906ce52c0b39a6b5697749d7526" dependencies = [ "bitflags 1.3.2", "crc32fast", @@ -4265,7 +4303,7 @@ dependencies = [ "concurrent-queue", "hermit-abi 0.4.0", "pin-project-lite", - "rustix 0.38.41", + "rustix 0.38.42", "tracing", "windows-sys 0.59.0", ] @@ -4293,12 +4331,12 @@ checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" [[package]] name = "prettyplease" -version = "0.2.25" +version = "0.2.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64d1ec885c64d0457d564db4ec299b2dae3f9c02808b8ad9c3a089c591b18033" +checksum = "483f8c21f64f3ea09fe0f30f5d48c3e8eefe5dac9129f0075f76593b4c1da705" dependencies = [ "proc-macro2", - "syn 2.0.90", + "syn 2.0.95", ] [[package]] @@ -4361,9 +4399,9 @@ dependencies = [ [[package]] name = "prost" -version = "0.13.3" +version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b0487d90e047de87f984913713b85c601c05609aad5b0df4b4573fbf69aa13f" +checksum = "2c0fef6c4230e4ccf618a35c59d7ede15dea37de8427500f50aff708806e42ec" dependencies = [ "bytes", "prost-derive", @@ -4371,11 +4409,10 @@ dependencies = [ [[package]] name = "prost-build" -version = "0.13.3" +version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c1318b19085f08681016926435853bbf7858f9c082d0999b80550ff5d9abe15" +checksum = "d0f3e5beed80eb580c68e2c600937ac2c4eedabdfd5ef1e5b7ea4f3fba84497b" dependencies = [ - "bytes", "heck 0.5.0", "itertools", "log", @@ -4386,32 +4423,38 @@ dependencies = [ "prost", "prost-types", "regex", - "syn 2.0.90", + "syn 2.0.95", "tempfile", ] [[package]] name = "prost-derive" -version = "0.13.3" +version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9552f850d5f0964a4e4d0bf306459ac29323ddfbae05e35a7c0d35cb0803cc5" +checksum = "157c5a9d7ea5c2ed2d9fb8f495b64759f7816c7eaea54ba3978f0d63000162e3" dependencies = [ "anyhow", "itertools", "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.95", ] [[package]] name = "prost-types" -version = "0.13.3" +version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4759aa0d3a6232fb8dbdb97b61de2c20047c68aca932c7ed76da9d788508d670" +checksum = "cc2f1e56baa61e93533aebc21af4d2134b70f66275e0fcdf3cbe43d77ff7e8fc" dependencies = [ "prost", ] +[[package]] +name = "psl-types" +version = "2.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33cb294fe86a74cbcf50d4445b37da762029549ebeea341421c7c70370f86cac" + [[package]] name = "ptr_meta" version = "0.1.4" @@ -4432,6 +4475,16 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "publicsuffix" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f42ea446cab60335f76979ec15e12619a2165b5ae2c12166bef27d283a9fadf" +dependencies = [ + "idna", + "psl-types", +] + [[package]] name = "quick-xml" version = "0.31.0" @@ -4461,9 +4514,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.37" +version = "1.0.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" +checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc" dependencies = [ "proc-macro2", ] @@ -4563,9 +4616,9 @@ checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9" [[package]] name = "redox_syscall" -version = "0.5.7" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b6dfecf2c74bce2466cabf93f6664d6998a69eb21e39f4207930065b27b771f" +checksum = "03a862b389f93e68874fbf580b9de08dd02facb9a788ebadaf4a3fd33cf58834" dependencies = [ "bitflags 2.6.0", ] @@ -4578,7 +4631,7 @@ checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" dependencies = [ "getrandom 0.2.15", "libredox", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -4648,7 +4701,7 @@ dependencies = [ "h2 0.3.26", "http 0.2.12", "http-body 0.4.6", - "hyper 0.14.31", + "hyper 0.14.32", "hyper-tls 0.5.0", "ipnet", "js-sys", @@ -4678,12 +4731,14 @@ dependencies = [ [[package]] name = "reqwest" -version = "0.12.9" +version = "0.12.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a77c62af46e79de0a562e1a9849205ffcb7fc1238876e9bd743357570e04046f" +checksum = "43e734407157c3c2034e0258f5e4473ddb361b1e85f95a66690d67264d7cd1da" dependencies = [ "base64 0.22.1", "bytes", + "cookie", + "cookie_store", "encoding_rs", "futures-core", "futures-util", @@ -4691,7 +4746,7 @@ dependencies = [ "http 1.2.0", "http-body 1.0.1", "http-body-util", - "hyper 1.5.1", + "hyper 1.5.2", "hyper-rustls", "hyper-tls 0.6.0", "hyper-util", @@ -4711,6 +4766,7 @@ dependencies = [ "system-configuration 0.6.1", "tokio", "tokio-native-tls", + "tower 0.5.2", "tower-service", "url", "wasm-bindgen", @@ -4875,22 +4931,22 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.41" +version = "0.38.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7f649912bc1495e167a6edee79151c84b1bad49748cb4f1f1167f459f6224f6" +checksum = "f93dc38ecbab2eb790ff964bb77fa94faf256fd3e73285fd7ba0903b76bedb85" dependencies = [ "bitflags 2.6.0", "errno", "libc", "linux-raw-sys 0.4.14", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] name = "rustls" -version = "0.23.19" +version = "0.23.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "934b404430bb06b3fae2cba809eb45a1ab1aecd64491213d7c3301b88393f8d1" +checksum = "5065c3f250cbd332cd894be57c40fa52387247659b14a2d6041d121547903b1b" dependencies = [ "once_cell", "rustls-pki-types", @@ -4919,9 +4975,9 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.10.0" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16f1201b3c9a7ee8039bcadc17b7e605e2945b27eee7631788c1bd2b0643674b" +checksum = "d2bf47e6ff922db3825eb750c4e2ff784c6ff8fb9e13046ef6a1d1c5401b0b37" [[package]] name = "rustls-webpki" @@ -4936,9 +4992,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.18" +version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e819f2bc632f285be6d7cd36e25940d45b2391dd6d9b939e79de557f7014248" +checksum = "f7c45b9784283f1b2e7fb61b42047c2fd678ef0960d4f6f1eba131594cc369d4" [[package]] name = "ryu" @@ -4997,9 +5053,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.12.1" +version = "2.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa39c7303dc58b5543c94d22c1766b0d31f2ee58306363ea622b10bbc075eaa2" +checksum = "1863fd3768cd83c56a7f60faa4dc0d403f1b6df0a38c3c25f44b7894e45370d5" dependencies = [ "core-foundation-sys", "libc", @@ -5027,38 +5083,38 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.23" +version = "1.0.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" +checksum = "3cb6eb87a131f756572d7fb904f6e7b68633f09cca868c5df1c4b8d1a694bbba" dependencies = [ "serde", ] [[package]] name = "serde" -version = "1.0.215" +version = "1.0.217" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6513c1ad0b11a9376da888e3e0baa0077f1aed55c17f50e7b2397136129fb88f" +checksum = "02fc4265df13d6fa1d00ecff087228cc0a2b5f3c0e87e258d8b94a156e984c70" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.215" +version = "1.0.217" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad1e866f866923f252f05c889987993144fb74e722403468a4ebd70c3cd756c0" +checksum = "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.95", ] [[package]] name = "serde_json" -version = "1.0.133" +version = "1.0.134" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7fceb2473b9166b2294ef05efcb65a3db80803f0b03ef86a5fc88a2b85ee377" +checksum = "d00f4175c42ee48b15416f6193a959ba3a0d67fc699a0db9ad12df9f83991c7d" dependencies = [ "indexmap 2.7.0", "itoa 1.0.14", @@ -5075,7 +5131,7 @@ checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.95", ] [[package]] @@ -5101,9 +5157,9 @@ dependencies = [ [[package]] name = "serde_with" -version = "3.11.0" +version = "3.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e28bdad6db2b8340e449f7108f020b3b092e8583a9e3fb82713e1d4e71fe817" +checksum = "d6b6f7f2fcb69f747921f79f3926bd1e203fce4fef62c268dd3abfb6d86029aa" dependencies = [ "base64 0.22.1", "chrono", @@ -5119,14 +5175,14 @@ dependencies = [ [[package]] name = "serde_with_macros" -version = "3.11.0" +version = "3.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d846214a9854ef724f3da161b426242d8de7c1fc7de2f89bb1efcb154dca79d" +checksum = "8d00caa5193a3c8362ac2b73be6b9e768aa5a4b2f721d8f4b339600c3cb51f8e" dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.95", ] [[package]] @@ -5148,7 +5204,7 @@ checksum = "772ee033c0916d670af7860b6e1ef7d658a4629a6d0b4c8c3e67f09b3765b75d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.95", ] [[package]] @@ -5320,21 +5376,11 @@ dependencies = [ "der", ] -[[package]] -name = "sqlformat" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bba3a93db0cc4f7bdece8bb09e77e2e785c20bfebf79eb8340ed80708048790" -dependencies = [ - "nom", - "unicode_categories", -] - [[package]] name = "sqlx" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93334716a037193fac19df402f8571269c84a00852f6a7066b5d2616dcd64d3e" +checksum = "4410e73b3c0d8442c5f99b425d7a435b5ee0ae4167b3196771dd3f7a01be745f" dependencies = [ "sqlx-core", "sqlx-macros", @@ -5345,38 +5391,32 @@ dependencies = [ [[package]] name = "sqlx-core" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4d8060b456358185f7d50c55d9b5066ad956956fddec42ee2e8567134a8936e" +checksum = "6a007b6936676aa9ab40207cde35daab0a04b823be8ae004368c0793b96a61e0" dependencies = [ - "atoi", - "byteorder", "bytes", "chrono", "crc", "crossbeam-queue", "either", "event-listener 5.3.1", - "futures-channel", "futures-core", "futures-intrusive", "futures-io", "futures-util", - "hashbrown 0.14.5", + "hashbrown 0.15.2", "hashlink", - "hex", "indexmap 2.7.0", "log", "memchr", "once_cell", - "paste", "percent-encoding", "serde", "serde_json", "sha2", "smallvec", - "sqlformat", - "thiserror", + "thiserror 2.0.9", "tokio", "tokio-stream", "tracing", @@ -5386,22 +5426,22 @@ dependencies = [ [[package]] name = "sqlx-macros" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cac0692bcc9de3b073e8d747391827297e075c7710ff6276d9f7a1f3d58c6657" +checksum = "3112e2ad78643fef903618d78cf0aec1cb3134b019730edb039b69eaf531f310" dependencies = [ "proc-macro2", "quote", "sqlx-core", "sqlx-macros-core", - "syn 2.0.90", + "syn 2.0.95", ] [[package]] name = "sqlx-macros-core" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1804e8a7c7865599c9c79be146dc8a9fd8cc86935fa641d3ea58e5f0688abaa5" +checksum = "4e9f90acc5ab146a99bf5061a7eb4976b573f560bc898ef3bf8435448dd5e7ad" dependencies = [ "dotenvy", "either", @@ -5417,7 +5457,7 @@ dependencies = [ "sqlx-mysql", "sqlx-postgres", "sqlx-sqlite", - "syn 2.0.90", + "syn 2.0.95", "tempfile", "tokio", "url", @@ -5425,9 +5465,9 @@ dependencies = [ [[package]] name = "sqlx-mysql" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64bb4714269afa44aef2755150a0fc19d756fb580a67db8885608cf02f47d06a" +checksum = "4560278f0e00ce64938540546f59f590d60beee33fffbd3b9cd47851e5fff233" dependencies = [ "atoi", "base64 0.22.1", @@ -5461,7 +5501,7 @@ dependencies = [ "smallvec", "sqlx-core", "stringprep", - "thiserror", + "thiserror 2.0.9", "tracing", "uuid", "whoami", @@ -5469,9 +5509,9 @@ dependencies = [ [[package]] name = "sqlx-postgres" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fa91a732d854c5d7726349bb4bb879bb9478993ceb764247660aee25f67c2f8" +checksum = "c5b98a57f363ed6764d5b3a12bfedf62f07aa16e1856a7ddc2a0bb190a959613" dependencies = [ "atoi", "base64 0.22.1", @@ -5483,7 +5523,6 @@ dependencies = [ "etcetera", "futures-channel", "futures-core", - "futures-io", "futures-util", "hex", "hkdf", @@ -5501,7 +5540,7 @@ dependencies = [ "smallvec", "sqlx-core", "stringprep", - "thiserror", + "thiserror 2.0.9", "tracing", "uuid", "whoami", @@ -5509,9 +5548,9 @@ dependencies = [ [[package]] name = "sqlx-sqlite" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5b2cf34a45953bfd3daaf3db0f7a7878ab9b7a6b91b422d24a7a9e4c857b680" +checksum = "f85ca71d3a5b24e64e1d08dd8fe36c6c95c339a896cc33068148906784620540" dependencies = [ "atoi", "chrono", @@ -5613,7 +5652,7 @@ checksum = "4596646090f0d724e6c7f3b65d694f99a0daa1a5893a78ef83887025e041405c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.95", ] [[package]] @@ -5635,7 +5674,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.90", + "syn 2.0.95", ] [[package]] @@ -5657,9 +5696,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.90" +version = "2.0.95" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "919d3b74a5dd0ccd15aeb8f93e7006bd9e14c295087c9896a110f490752bcf31" +checksum = "46f71c0377baf4ef1cc3e3402ded576dccc315800fbc62dfc7fe04b009773b4a" dependencies = [ "proc-macro2", "quote", @@ -5689,7 +5728,7 @@ checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.95", ] [[package]] @@ -5817,7 +5856,7 @@ checksum = "f4e16beb8b2ac17db28eab8bca40e62dbfbb34c0fcdc6d9826b11b7b5d047dfd" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.95", ] [[package]] @@ -5891,7 +5930,7 @@ dependencies = [ "tauri-runtime-wry", "tauri-utils", "tempfile", - "thiserror", + "thiserror 1.0.69", "tokio", "url", "uuid", @@ -5938,7 +5977,7 @@ dependencies = [ "serde_json", "sha2", "tauri-utils", - "thiserror", + "thiserror 1.0.69", "time", "uuid", "walkdir", @@ -5961,7 +6000,7 @@ dependencies = [ [[package]] name = "tauri-plugin-log" version = "0.0.0" -source = "git+https://github.com/tauri-apps/plugins-workspace?branch=v1#017975ad5243183c13143289410028e07084e9a9" +source = "git+https://github.com/tauri-apps/plugins-workspace?branch=v1#203db03fbd6e5a9cddbc83ce2acd983b88fbd7e3" dependencies = [ "byte-unit", "fern", @@ -5976,13 +6015,13 @@ dependencies = [ [[package]] name = "tauri-plugin-single-instance" version = "0.0.0" -source = "git+https://github.com/tauri-apps/plugins-workspace?branch=v1#017975ad5243183c13143289410028e07084e9a9" +source = "git+https://github.com/tauri-apps/plugins-workspace?branch=v1#203db03fbd6e5a9cddbc83ce2acd983b88fbd7e3" dependencies = [ "log", "serde", "serde_json", "tauri", - "thiserror", + "thiserror 1.0.69", "windows-sys 0.59.0", "zbus 3.15.2", ] @@ -5990,7 +6029,7 @@ dependencies = [ [[package]] name = "tauri-plugin-window-state" version = "0.1.1" -source = "git+https://github.com/tauri-apps/plugins-workspace?branch=v1#017975ad5243183c13143289410028e07084e9a9" +source = "git+https://github.com/tauri-apps/plugins-workspace?branch=v1#203db03fbd6e5a9cddbc83ce2acd983b88fbd7e3" dependencies = [ "bincode", "bitflags 2.6.0", @@ -5998,7 +6037,7 @@ dependencies = [ "serde", "serde_json", "tauri", - "thiserror", + "thiserror 1.0.69", ] [[package]] @@ -6015,7 +6054,7 @@ dependencies = [ "serde", "serde_json", "tauri-utils", - "thiserror", + "thiserror 1.0.69", "url", "uuid", "webview2-com", @@ -6067,7 +6106,7 @@ dependencies = [ "serde", "serde_json", "serde_with", - "thiserror", + "thiserror 1.0.69", "url", "walkdir", "windows-version", @@ -6096,14 +6135,15 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.14.0" +version = "3.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28cce251fcbc87fac86a866eeb0d6c2d536fc16d06f184bb61aeae11aa4cee0c" +checksum = "9a8a559c81686f576e8cd0290cd2a24a2a9ad80c98b3478856500fcbd7acd704" dependencies = [ "cfg-if", - "fastrand 2.2.0", + "fastrand 2.3.0", + "getrandom 0.2.15", "once_cell", - "rustix 0.38.41", + "rustix 0.38.42", "windows-sys 0.59.0", ] @@ -6130,7 +6170,16 @@ version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" dependencies = [ - "thiserror-impl", + "thiserror-impl 1.0.69", +] + +[[package]] +name = "thiserror" +version = "2.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f072643fd0190df67a8bab670c20ef5d8737177d6ac6b2e9a236cb096206b2cc" +dependencies = [ + "thiserror-impl 2.0.9", ] [[package]] @@ -6141,7 +6190,18 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.95", +] + +[[package]] +name = "thiserror-impl" +version = "2.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b50fa271071aae2e6ee85f842e2e28ba8cd2c5fb67f11fcb1fd70b276f9e7d4" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.95", ] [[package]] @@ -6219,9 +6279,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.8.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938" +checksum = "022db8904dfa342efe721985167e9fcd16c29b226db4397ed752a761cfce81e8" dependencies = [ "tinyvec_macros", ] @@ -6258,7 +6318,7 @@ checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.95", ] [[package]] @@ -6273,20 +6333,19 @@ dependencies = [ [[package]] name = "tokio-rustls" -version = "0.26.0" +version = "0.26.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" +checksum = "5f6d0975eaace0cf0fcadee4e4aaa5da15b5c079146f2cffb67c113be122bf37" dependencies = [ "rustls", - "rustls-pki-types", "tokio", ] [[package]] name = "tokio-stream" -version = "0.1.16" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f4e6ce100d0eb49a2734f8c0812bcd324cf357d21810932c5df6b96ef2b86f1" +checksum = "eca58d7bba4a75707817a2c44174253f9236b2d5fbd055602e9d5c07c139a047" dependencies = [ "futures-core", "pin-project-lite", @@ -6295,9 +6354,9 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.12" +version = "0.7.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61e7c3654c13bcd040d4a03abee2c75b1d14a37b423cf5a813ceae1cc903ec6a" +checksum = "d7fcaa8d55a2bdd6b83ace262b016eca0d79ee02818c5c1bcdf0305114081078" dependencies = [ "bytes", "futures-core", @@ -6371,7 +6430,7 @@ dependencies = [ "serde", "serde_spanned", "toml_datetime", - "winnow 0.6.20", + "winnow 0.6.22", ] [[package]] @@ -6389,7 +6448,7 @@ dependencies = [ "http 1.2.0", "http-body 1.0.1", "http-body-util", - "hyper 1.5.1", + "hyper 1.5.2", "hyper-timeout", "hyper-util", "percent-encoding", @@ -6415,7 +6474,7 @@ dependencies = [ "prost-build", "prost-types", "quote", - "syn 2.0.90", + "syn 2.0.95", ] [[package]] @@ -6440,14 +6499,15 @@ dependencies = [ [[package]] name = "tower" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2873938d487c3cfb9aed7546dc9f2711d867c9f90c46b889989a2cb84eba6b4f" +checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" dependencies = [ "futures-core", "futures-util", "pin-project-lite", - "sync_wrapper 0.1.2", + "sync_wrapper 1.0.2", + "tokio", "tower-layer", "tower-service", ] @@ -6483,7 +6543,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3566e8ce28cc0a3fe42519fc80e6b4c943cc4c8cef275620eb8dac2d3d4e06cf" dependencies = [ "crossbeam-channel", - "thiserror", + "thiserror 1.0.69", "time", "tracing-subscriber", ] @@ -6496,7 +6556,7 @@ checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.95", ] [[package]] @@ -6595,9 +6655,9 @@ dependencies = [ [[package]] name = "unicode-bidi" -version = "0.3.17" +version = "0.3.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ab17db44d7388991a428b2ee655ce0c212e862eff1768a455c58f9aad6e7893" +checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5" [[package]] name = "unicode-ident" @@ -6626,12 +6686,6 @@ version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" -[[package]] -name = "unicode_categories" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39ec24b3121d976906ece63c9daad25b85969647682eee313cb5779fdd69e14e" - [[package]] name = "untrusted" version = "0.9.0" @@ -6829,9 +6883,9 @@ checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" [[package]] name = "wasm-bindgen" -version = "0.2.97" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d15e63b4482863c109d70a7b8706c1e364eb6ea449b201a76c5b89cedcec2d5c" +checksum = "a474f6281d1d70c17ae7aa6a613c87fce69a127e2624002df63dcb39d6cf6396" dependencies = [ "cfg-if", "once_cell", @@ -6840,24 +6894,23 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.97" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d36ef12e3aaca16ddd3f67922bc63e48e953f126de60bd33ccc0101ef9998cd" +checksum = "5f89bb38646b4f81674e8f5c3fb81b562be1fd936d84320f3264486418519c79" dependencies = [ "bumpalo", "log", - "once_cell", "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.95", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.47" +version = "0.4.49" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9dfaf8f50e5f293737ee323940c7d8b08a66a95a419223d9f41610ca08b0833d" +checksum = "38176d9b44ea84e9184eff0bc34cc167ed044f816accfe5922e54d84cf48eca2" dependencies = [ "cfg-if", "js-sys", @@ -6868,9 +6921,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.97" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "705440e08b42d3e4b36de7d66c944be628d579796b8090bfa3471478a2260051" +checksum = "2cc6181fd9a7492eef6fef1f33961e3695e4579b9872a6f7c83aee556666d4fe" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -6878,22 +6931,22 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.97" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98c9ae5a76e46f4deecd0f0255cc223cfa18dc9b261213b8aa0c7b36f61b3f1d" +checksum = "30d7a95b763d3c45903ed6c81f156801839e5ee968bb07e534c44df0fcd330c2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.95", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.97" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ee99da9c5ba11bd675621338ef6fa52296b76b83305e9b6e5c77d4c286d6d49" +checksum = "943aab3fdaaa029a6e0271b35ea10b72b943135afe9bffca82384098ad0e06a6" [[package]] name = "wasm-streams" @@ -6916,7 +6969,7 @@ checksum = "056535ced7a150d45159d3a8dc30f91a2e2d588ca0b23f70e56033622b8016f6" dependencies = [ "cc", "downcast-rs", - "rustix 0.38.41", + "rustix 0.38.42", "scoped-tls", "smallvec", "wayland-sys", @@ -6929,7 +6982,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b66249d3fc69f76fd74c82cc319300faa554e9d865dab1f7cd66cc20db10b280" dependencies = [ "bitflags 2.6.0", - "rustix 0.38.41", + "rustix 0.38.42", "wayland-backend", "wayland-scanner", ] @@ -6983,9 +7036,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.74" +version = "0.3.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a98bc3c33f0fe7e59ad7cd041b89034fa82a7c2d4365ca538dda6cdaf513863c" +checksum = "04dd7223427d52553d3702c004d3b2fe07c148165faa56313cb00211e31c12bc" dependencies = [ "js-sys", "wasm-bindgen", @@ -7088,7 +7141,7 @@ dependencies = [ "regex", "serde", "serde_json", - "thiserror", + "thiserror 1.0.69", "windows 0.39.0", "windows-bindgen", "windows-metadata", @@ -7248,7 +7301,7 @@ checksum = "f6fc35f58ecd95a9b71c4f2329b911016e6bec66b3f2e6a4aad86bd2e99e2f9b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.95", ] [[package]] @@ -7259,7 +7312,7 @@ checksum = "08990546bf4edef8f431fa6326e032865f27138718c587dc21bc0265bbcb57cc" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.95", ] [[package]] @@ -7618,9 +7671,9 @@ dependencies = [ [[package]] name = "winnow" -version = "0.6.20" +version = "0.6.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36c1fec1a2bb5866f07c25f68c26e565c4c200aebb96d7e55710c19d3e8ac49b" +checksum = "39281189af81c07ec09db316b302a3e67bf9bd7cbf6c820b50e35fee9c2fa980" dependencies = [ "memchr", ] @@ -7666,7 +7719,7 @@ dependencies = [ "nix 0.28.0", "os_pipe", "tempfile", - "thiserror", + "thiserror 1.0.69", "tree_magic_mini", "wayland-backend", "wayland-client", @@ -7715,7 +7768,7 @@ dependencies = [ "sha2", "soup2", "tao", - "thiserror", + "thiserror 1.0.69", "url", "webkit2gtk", "webkit2gtk-sys", @@ -7761,7 +7814,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5d91ffca73ee7f68ce055750bf9f6eca0780b8c85eff9bc046a3b0da41755e12" dependencies = [ "gethostname", - "rustix 0.38.41", + "rustix 0.38.42", "x11rb-protocol", ] @@ -7785,13 +7838,13 @@ dependencies = [ [[package]] name = "xattr" -version = "1.3.1" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8da84f1a25939b27f6820d92aed108f83ff920fdf11a7b19366c27c4cda81d4f" +checksum = "e105d177a3871454f754b33bb0ee637ecaaac997446375fd3e5d43a2ed00c909" dependencies = [ "libc", "linux-raw-sys 0.4.14", - "rustix 0.38.41", + "rustix 0.38.42", ] [[package]] @@ -7824,7 +7877,7 @@ checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.95", "synstructure", ] @@ -7875,7 +7928,7 @@ version = "4.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bb97012beadd29e654708a0fdb4c84bc046f537aecfde2c3ee0a9e4b4d48c725" dependencies = [ - "async-broadcast 0.7.1", + "async-broadcast 0.7.2", "async-executor", "async-fs 2.1.2", "async-io 2.4.0", @@ -7930,7 +7983,7 @@ dependencies = [ "proc-macro-crate 3.2.0", "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.95", "zvariant_utils 2.1.0", ] @@ -7974,7 +8027,7 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.95", ] [[package]] @@ -7994,7 +8047,7 @@ checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.95", "synstructure", ] @@ -8015,7 +8068,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.95", ] [[package]] @@ -8037,7 +8090,7 @@ checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.95", ] [[package]] @@ -8089,7 +8142,7 @@ dependencies = [ "proc-macro-crate 3.2.0", "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.95", "zvariant_utils 2.1.0", ] @@ -8112,5 +8165,5 @@ checksum = "c51bcff7cc3dbb5055396bcf774748c3dab426b4b8659046963523cee4808340" dependencies = [ "proc-macro2", "quote", - "syn 2.0.90", + "syn 2.0.95", ] diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index 00149736..08cb9d1a 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -1,14 +1,29 @@ +[workspace] +members = ["cli", "common"] +default-members = [".", "cli"] + +[workspace.dependencies] +defguard_wireguard_rs = { git = "https://github.com/DefGuard/wireguard-rs.git", rev = "v0.7.0" } + +[workspace.package] +authors = ["Defguard"] +edition = "2021" +homepage = "https://github.com/DefGuard/client" +license-file = "../LICENSE.md" +rust-version = "1.80" +version = "1.1.1" + [package] name = "defguard-client" -version = "1.1.0" description = "Defguard desktop client" -license-file = "../LICENSE.md" -homepage = "https://github.com/DefGuard/client" repository = "https://github.com/DefGuard/client" default-run = "defguard-client" -edition = "2021" -rust-version = "1.80" -authors = ["Defguard"] +authors.workspace = true +edition.workspace = true +homepage.workspace = true +license-file.workspace = true +rust-version.workspace = true +version.workspace = true [build-dependencies] tauri-build = { version = "1.5", features = [] } @@ -19,21 +34,21 @@ vergen-git2 = { version = "1.0", features = ["build"] } [dependencies] anyhow = "1.0" base64 = "0.22" -clap = { version = "4.5", features = ["derive", "env"] } +clap = { version = "4.5", features = ["cargo", "derive", "env"] } chrono = { version = "0.4", features = ["serde"] } +common = { path = "common" } dark-light = "1.1" -defguard_wireguard_rs = { git = "https://github.com/DefGuard/wireguard-rs.git", rev = "v0.5.5" } -dirs = "5.0" +defguard_wireguard_rs = { workspace = true } +dirs-next = "2.0" lazy_static = "1.5" log = { version = "0.4", features = ["serde"] } prost = "0.13" -rand = "0.8" regex = "1.11" -reqwest = { version = "0.12", features = ["json"] } +reqwest = { version = "0.12", features = ["cookies", "json"] } rust-ini = "0.21" -serde_json = "1.0" serde = { version = "1.0", features = ["derive"] } -serde_with = "3.9" +serde_json = "1.0" +serde_with = "3.11" sqlx = { version = "0.8", features = [ "chrono", "sqlite", @@ -57,7 +72,7 @@ tauri = { version = "1.8", features = [ tauri-plugin-single-instance = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v1" } tauri-plugin-log = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v1" } tauri-plugin-window-state = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v1" } -thiserror = "1.0" +thiserror = "2.0" time = { version = "0.3", features = ["formatting", "macros"] } tokio = { version = "1", features = ["macros", "rt-multi-thread", "signal"] } tokio-util = "0.7" @@ -66,7 +81,11 @@ tracing = "0.1" tracing-appender = "0.2" tracing-subscriber = { version = "0.3", features = ["env-filter", "json"] } webbrowser = "1.0" -x25519-dalek = { version = "2", features = ["getrandom", "static_secrets"] } +x25519-dalek = { version = "2", features = [ + "getrandom", + "serde", + "static_secrets", +] } [target.'cfg(target_os = "windows")'.dependencies] windows-service = "0.7" @@ -84,3 +103,9 @@ custom-protocol = ["tauri/custom-protocol"] [dev-dependencies] tokio = { version = "1", features = ["full"] } + +[profile.release] +codegen-units = 1 +lto = "thin" +panic = "abort" +strip = true diff --git a/src-tauri/cli/Cargo.toml b/src-tauri/cli/Cargo.toml new file mode 100644 index 00000000..7c19bd9f --- /dev/null +++ b/src-tauri/cli/Cargo.toml @@ -0,0 +1,27 @@ +[package] +name = "defguard-dg" +authors.workspace = true +edition.workspace = true +homepage.workspace = true +license-file.workspace = true +rust-version.workspace = true +version.workspace = true + +[build-dependencies] +prost-build = "0.13" + +[dependencies] +clap = { version = "4.5", features = ["cargo", "derive"] } +common = { path = "../common" } +defguard_wireguard_rs = { workspace = true } +dirs-next = "2.0" +prost = "0.13" +reqwest = { version = "0.12", features = ["cookies", "json"] } +serde = { version = "1.0", features = ["derive"] } +serde_json = "1.0" +thiserror = "2.0" +tokio = { version = "1", features = ["macros", "rt-multi-thread", "signal"] } + +# Dummy feature to let tauri build the release. +[features] +custom-protocol = [] diff --git a/src-tauri/cli/Cross.toml b/src-tauri/cli/Cross.toml new file mode 100644 index 00000000..499cd583 --- /dev/null +++ b/src-tauri/cli/Cross.toml @@ -0,0 +1,41 @@ +[build.env] +passthrough = ["SQLX_OFFLINE=true"] + +[target.x86_64-unknown-linux-gnu] +image = "ghcr.io/defguard/cross:x86_64-unknown-linux-gnu" +pre-build = [ + "apt-get update && apt-get install --assume-yes libssl-dev unzip", + "PB_REL='https://github.com/protocolbuffers/protobuf/releases'", + "PB_VERSION='3.20.0' && curl -LO $PB_REL/download/v$PB_VERSION/protoc-$PB_VERSION-linux-x86_64.zip", + "unzip -o protoc-$PB_VERSION-linux-x86_64.zip bin/protoc include/google/* -d /usr", +] + +[target.armv7-unknown-linux-gnueabihf] +image = "ghcr.io/defguard/cross:armv7-unknown-linux-gnueabihf" +pre-build = [ + "dpkg --add-architecture $CROSS_DEB_ARCH", + "apt-get update && apt-get install --assume-yes libssl-dev libssl-dev:$CROSS_DEB_ARCH unzip", + "PB_REL='https://github.com/protocolbuffers/protobuf/releases'", + "PB_VERSION='3.20.0' && curl -LO $PB_REL/download/v$PB_VERSION/protoc-$PB_VERSION-linux-x86_64.zip", + "unzip -o protoc-$PB_VERSION-linux-x86_64.zip bin/protoc include/google/* -d /usr", +] + +[target.aarch64-unknown-linux-gnu] +image = "ghcr.io/defguard/cross:aarch64-unknown-linux-gnu" +pre-build = [ + "dpkg --add-architecture $CROSS_DEB_ARCH", + "apt-get update && apt-get install --assume-yes libssl-dev libssl-dev:$CROSS_DEB_ARCH unzip", + "PB_REL='https://github.com/protocolbuffers/protobuf/releases'", + "PB_VERSION='3.20.0' && curl -LO $PB_REL/download/v$PB_VERSION/protoc-$PB_VERSION-linux-x86_64.zip", + "unzip -o protoc-$PB_VERSION-linux-x86_64.zip bin/protoc include/google/* -d /usr", +] + + +[target.x86_64-unknown-freebsd] +image = "ghcr.io/defguard/cross:x86_64-unknown-freebsd" +pre-build = [ + "apt-get update && apt-get install --assume-yes libssl-dev unzip", + "PB_REL='https://github.com/protocolbuffers/protobuf/releases'", + "PB_VERSION='3.20.0' && curl -LO $PB_REL/download/v$PB_VERSION/protoc-$PB_VERSION-linux-x86_64.zip", + "unzip -o protoc-$PB_VERSION-linux-x86_64.zip bin/protoc include/google/* -d /usr", +] diff --git a/src-tauri/cli/build.rs b/src-tauri/cli/build.rs new file mode 100644 index 00000000..9e330399 --- /dev/null +++ b/src-tauri/cli/build.rs @@ -0,0 +1,16 @@ +fn main() -> Result<(), Box> { + let mut config = prost_build::Config::new(); + // Enable a protoc experimental feature. + config.protoc_arg("--experimental_allow_proto3_optional"); + // Serialize empty DNS as None. + config.type_attribute(".DeviceConfig", "#[serde_as]"); + config.field_attribute( + ".DeviceConfig.dns", + "#[serde_as(deserialize_as = \"NoneAsEmptyString\")]", + ); + // Make all messages serde-serializable. + config.type_attribute(".", "#[derive(serde::Deserialize,serde::Serialize)]"); + config.compile_protos(&["../proto/core/proxy.proto"], &["../proto/core"])?; + + Ok(()) +} diff --git a/src-tauri/cli/src/bin/dg.rs b/src-tauri/cli/src/bin/dg.rs new file mode 100644 index 00000000..1f3957b1 --- /dev/null +++ b/src-tauri/cli/src/bin/dg.rs @@ -0,0 +1,498 @@ +use std::{ + fs::{create_dir, OpenOptions}, + net::IpAddr, + path::{Path, PathBuf}, + str::FromStr, + sync::Arc, + time::Duration, +}; + +use clap::{command, value_parser, Arg, Command}; +use common::{find_free_tcp_port, get_interface_name}; +#[cfg(not(target_os = "macos"))] +use defguard_wireguard_rs::Kernel; +#[cfg(target_os = "macos")] +use defguard_wireguard_rs::Userspace; +use defguard_wireguard_rs::{ + error::WireguardInterfaceError, host::Peer, key::Key, net::IpAddrMask, InterfaceConfiguration, + WGApi, WireguardInterfaceApi, +}; +use reqwest::{Client, StatusCode, Url}; +use serde::{Deserialize, Serialize}; +use thiserror::Error; +#[cfg(unix)] +use tokio::signal::unix::{signal, SignalKind}; +use tokio::{select, signal::ctrl_c, sync::Notify, time::sleep}; + +mod proto { + include!(concat!(env!("OUT_DIR"), "/defguard.proxy.rs")); +} + +#[derive(Clone, Default, Deserialize, Serialize)] +struct CliConfig { + private_key: Key, + device: proto::Device, + device_config: proto::DeviceConfig, + instance_info: proto::InstanceInfo, + // polling token used for further client-core communication + token: Option, +} + +impl CliConfig { + /// Load configuration from a file at `path`. + #[must_use] + fn load(path: &Path) -> Self { + let file = match OpenOptions::new().read(true).open(path) { + Ok(file) => file, + Err(err) => { + eprintln!("Unable to open configuration: {err}; using defaults."); + return Self::default(); + } + }; + match serde_json::from_reader::<_, Self>(file) { + Ok(config) => config, + Err(err) => { + eprintln!("Unable to load configuration: {err}; using defaults."); + Self::default() + } + } + } + + /// Save configuration to a file at `path`. + fn save(&self, path: &Path) { + // TODO: chmod 600 / umask + let file = OpenOptions::new() + .create(true) + .truncate(true) + .write(true) + .open(path) + .unwrap(); + match serde_json::to_writer(file, &self) { + Ok(()) => eprintln!("Configuration has been saved"), + Err(err) => eprintln!("Failed to save configuration: {err}"), + } + } +} + +#[derive(Debug, Error)] +enum CliError { + #[error("Api")] + Api, + #[error("Missing data")] + MissingData, + #[error(transparent)] + Reqwest(#[from] reqwest::Error), + #[error("Too many devices")] + TooManyDevices, + #[error(transparent)] + WireGuard(#[from] WireguardInterfaceError), + #[error("Invalid address")] + InvalidAddress, +} + +async fn connect(config: CliConfig, trigger: Arc) -> Result<(), CliError> { + eprintln!("Connecting to {:?}...", config.device_config); + + let ifname = get_interface_name(&config.device.name); + + // let wgapi = setup_wgapi(&ifname).expect("Failed to setup WireGuard API"); + #[cfg(not(target_os = "macos"))] + let wgapi = WGApi::::new(ifname.to_string())?; + #[cfg(target_os = "macos")] + let wgapi = WGApi::::new(ifname.to_string())?; + + #[cfg(not(windows))] + { + // create new interface + eprintln!("Creating new interface {ifname}"); + wgapi + .create_interface() + .expect("Failed to create WireGuard interface"); + } + + eprintln!("Preparing DNS configuration for interface {ifname}"); + let dns_string = config.device_config.dns.clone().unwrap_or_default(); + let dns_entries = dns_string.split(',').map(str::trim).collect::>(); + // We assume that every entry that can't be parsed as an IP address is a domain name. + let mut dns = Vec::new(); + let mut search_domains = Vec::new(); + for entry in dns_entries { + if let Ok(ip) = entry.parse::() { + dns.push(ip); + } else { + search_domains.push(entry); + } + } + eprintln!("DNS configuration for interface {ifname}: DNS: {dns:?}, Search domains: {search_domains:?}"); + let peer_key = Key::from_str(&config.device_config.pubkey).unwrap(); + + let mut peer = Peer::new(peer_key); + peer.set_endpoint(&config.device_config.endpoint).unwrap(); + peer.persistent_keepalive_interval = Some(25); + // TODO: + // if let Some(psk) = preshared_key { + // debug!("Decoding location {location} preshared key."); + // let peer_psk = Key::from_str(&psk)?; + // info!("Location {location} preshared key decoded."); + // peer.preshared_key = Some(peer_psk); + // } + + let allowed_ips: Vec<&str> = + //if location.route_all_traffic { + // eprintln!("Using all traffic routing for location {location}: {DEFAULT_ROUTE_IPV4} {DEFAULT_ROUTE_IPV6}"); + // vec![DEFAULT_ROUTE_IPV4.into(), DEFAULT_ROUTE_IPV6.into()] + // } else { + config + .device_config + .allowed_ips + .split(',') + .collect(); + for allowed_ip in allowed_ips { + match IpAddrMask::from_str(allowed_ip) { + Ok(addr) => { + peer.allowed_ips.push(addr); + } + Err(err) => { + eprintln!( + "Error parsing IP address `{allowed_ip}` while setting up interface: {err}" + ); + continue; + } + } + } + eprintln!("Parsed allowed IPs: {:?}", peer.allowed_ips); + let Ok(address) = config.device_config.assigned_ip.parse() else { + eprintln!("Invalid assigned IP address in device configuration"); + return Err(CliError::InvalidAddress); + }; + + let config = InterfaceConfiguration { + name: config.instance_info.name.clone(), + prvkey: config.private_key.to_string(), + addresses: vec![address], + port: u32::from(find_free_tcp_port().unwrap()), + peers: vec![peer.clone()], + mtu: None, + }; + #[cfg(not(windows))] + let configure_interface_result = wgapi.configure_interface(&config); + #[cfg(windows)] + let configure_interface_result = wgapi.configure_interface(&config, &dns, &search_domains); + + configure_interface_result.expect("Failed to configure WireGuard interface"); + + #[cfg(not(windows))] + { + eprintln!("Configuring interface {ifname} routing"); + wgapi + .configure_peer_routing(&config.peers) + .expect("Failed to configure routing for WireGuard interface"); + + if dns.is_empty() { + eprintln!( + "No DNS configuration provided for interface {ifname}, skipping DNS configuration" + ); + } else { + eprintln!("The following DNS servers will be set: {dns:?}, search domains: {search_domains:?}"); + wgapi + .configure_dns(&dns, &search_domains) + .expect("Failed to configure DNS for WireGuard interface"); + } + } + + eprintln!("Finished creating a new interface {ifname}"); + + trigger.notified().await; + + eprintln!("Shutting down..."); + wgapi.remove_interface().unwrap(); + + Ok(()) +} + +#[derive(Deserialize)] +struct ApiError { + error: String, +} + +/// Enroll device. +async fn enroll( + config: &mut CliConfig, + base_url: &Url, + token: String, + name: String, +) -> Result<(), CliError> { + let client = Client::builder().cookie_store(true).build()?; + let mut url = base_url.clone(); + url.set_path("/api/v1/enrollment/start"); + let result = client + .post(url) + .json(&proto::EnrollmentStartRequest { token }) + .send() + .await?; + + let response: proto::EnrollmentStartResponse = if result.status() == StatusCode::OK { + result.json().await? + } else { + let error: ApiError = result.json().await?; + eprintln!("Failed to start enrolment: {}", error.error); + return Err(CliError::Api); + }; + println!("{response:?}"); + + if response.instance.is_none() { + eprintln!("Missing InstanceInfo"); + return Err(CliError::MissingData); + } + + // Generate a pair of WireGuard keys. + let prvkey = Key::generate(); + let pubkey = prvkey.public_key(); + + let mut url = base_url.clone(); + url.set_path("/api/v1/enrollment/create_device"); + let result = client + .post(url) + .json(&proto::NewDevice { + name, + pubkey: pubkey.to_string(), + token: None, //Some(config.token.clone()), + }) + .send() + .await?; + + let response: proto::DeviceConfigResponse = if result.status() == StatusCode::OK { + result.json().await? + } else { + let error: ApiError = result.json().await?; + eprintln!("Failed to start enrolment: {}", error.error); + return Err(CliError::Api); + }; + println!("{response:?}"); + + let count = response.configs.len(); + if count != 1 { + eprintln!("Expected one device config, found {count}."); + return Err(CliError::TooManyDevices); + } + let Some(instance_info) = response.instance else { + eprintln!("Missing InstanceInfo"); + return Err(CliError::MissingData); + }; + let Some(device) = response.device else { + eprintln!("Missing Device"); + return Err(CliError::MissingData); + }; + + config.private_key = prvkey; + config.device = device; + config.device_config = response.configs[0].clone(); + config.instance_info = instance_info; + config.token = response.token; + + Ok(()) +} + +const INTERVAL_SECONDS: Duration = Duration::from_secs(30); +const HTTP_REQ_TIMEOUT: Duration = Duration::from_secs(5); + +/// Fetch configuration from Defguard proxy. +async fn fetch_config( + client: &Client, + url: Url, + token: String, +) -> Result { + let result = client + .post(url.clone()) + .json(&proto::InstanceInfoRequest { token }) + .timeout(HTTP_REQ_TIMEOUT) + .send() + .await?; + + let instance_response: proto::InstanceInfoResponse = if result.status() == StatusCode::OK { + result.json().await? + } else { + eprintln!("Failed to poll config"); + return Err(CliError::Api); + }; + + let Some(response) = instance_response.device_config else { + eprintln!("Missing `DeviceConfigResponse`"); + return Err(CliError::Api); + }; + + let count = response.configs.len(); + if count != 1 { + eprintln!("Expected one device config, found {count}."); + return Err(CliError::TooManyDevices); + } + // let Some(instance_info) = response.instance else { + // eprintln!("Missing InstanceInfo"); + // return Err(CliError::MissingData); + // }; + // let Some(device) = response.device else { + // eprintln!("Missing Device"); + // return Err(CliError::MissingData); + // }; + let Some(device_config) = response.configs.into_iter().next() else { + // This should not happen. + return Err(CliError::MissingData); + }; + + Ok(device_config) +} + +/// Poll configuration from Defguard proxy in regular intervals. +/// Exit when `DeviceConfig` differs from the current one. +async fn poll_config(config: &mut CliConfig) { + // sanity check + let Some(token) = config.clone().token else { + return; + }; + + let Ok(client) = Client::builder().cookie_store(true).build() else { + return; + }; + let Ok(mut url) = Url::parse(&config.instance_info.proxy_url) else { + return; + }; + url.set_path("/api/v1/poll"); + + loop { + sleep(INTERVAL_SECONDS).await; + match fetch_config(&client, url.clone(), token.clone()).await { + Ok(device_config) => { + if config.device_config != device_config { + eprintln!("Configuration has changed, re-configuring..."); + break; + } + } + Err(err) => { + eprintln!("Failed to fetch configuration from proxy: {err}"); + } + } + } +} + +/// Wait for hangup (HUP) signal. +#[cfg(unix)] +async fn wait_for_hangup() { + if let Ok(mut hangup) = signal(SignalKind::hangup()) { + hangup.recv().await; + } +} +/// Dummy version of the above function for non-UNIX systems. +#[cfg(not(unix))] +async fn wait_for_hangup() { + sleep(Duration::new(u64::MAX, 0)).await; +} + +#[tokio::main] +async fn main() { + // Define command line arguments. + let config_opt = Arg::new("config") + .help("Configuration file path") + .long("config") + .short('c') + .value_name("CONFIG") + .value_parser(value_parser!(PathBuf)); + let dev_name_opt = Arg::new("devname") + .help("Device name") + .long("devname") + .required(true) + .short('d') + .value_name("NAME"); + let token_opt = Arg::new("token") + .help("Enrollment token") + .long("token") + .required(true) + .short('t') + .value_name("TOKEN"); + let url_opt = Arg::new("url") + .help("Enrollment URL") + .long("url") + .required(true) + .short('u') + .value_name("URL") + .value_parser(value_parser!(Url)); + + let matches = command!() + .arg(config_opt) + .arg_required_else_help(false) + .propagate_version(true) + .subcommand_required(false) + .subcommand( + Command::new("enroll") + .about("Enroll device") + .arg(dev_name_opt) + .arg(token_opt) + .arg(url_opt), + ) + .get_matches(); + + // Obtain configuration file path. + let config_path = match matches.get_one::("config") { + Some(path) => path.clone(), + None => { + if let Some(mut path) = dirs_next::data_dir() { + path.push("net.defguard.cli"); + if !path.exists() { + if let Err(err) = create_dir(&path) { + eprintln!("Failed to create default configuration path: {err}"); + return; + } + } + path.push("config.json"); + path + } else { + eprintln!("Default configuration path is not available on this platform. Please, specify it explicitly."); + return; + } + } + }; + let mut config = CliConfig::load(&config_path); + + if let Some(("enroll", submatches)) = matches.subcommand() { + let name = submatches + .get_one::("devname") + .expect("device name is required") + .to_string(); + let token = submatches + .get_one::("token") + .expect("token is required") + .to_string(); + let url = submatches.get_one::("url").expect("URL is required"); + enroll(&mut config, url, token, name) + .await + .expect("Failed to enroll"); + config.save(&config_path); + } else { + let trigger = Arc::new(Notify::new()); + let mut perpetuum = true; + while perpetuum { + // Must be spawned as a separate task, otherwise trigger won't reach it. + let task = tokio::spawn(connect(config.clone(), trigger.clone())); + select! { + biased; + () = wait_for_hangup() => { + trigger.notify_one(); + eprintln!("Re-configuring..."); + config = CliConfig::load(&config_path); + }, + _ = ctrl_c() => { + trigger.notify_one(); + eprintln!("Quitting..."); + perpetuum = false; + }, + () = poll_config(&mut config), if config.token.is_some() => { + trigger.notify_one(); + eprintln!("Configuration has changed, re-configuring..."); + }, + Err(err) = task => { + eprintln!("Failed to operate: {err}"); + break; + }, + } + } + } +} diff --git a/src-tauri/common/Cargo.toml b/src-tauri/common/Cargo.toml new file mode 100644 index 00000000..ab51bc72 --- /dev/null +++ b/src-tauri/common/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "common" +version = "1.0.0" +edition = "2021" +rust-version = "1.80" + +[dependencies] + +[target.'cfg(target_os = "macos")'.dependencies] +nix = { version = "0.29", features = ["net"] } diff --git a/src-tauri/common/src/lib.rs b/src-tauri/common/src/lib.rs new file mode 100644 index 00000000..58a848bb --- /dev/null +++ b/src-tauri/common/src/lib.rs @@ -0,0 +1,49 @@ +use std::net::{IpAddr, Ipv4Addr, SocketAddr, TcpListener}; + +/// Obtain a free TCP port on localhost. +#[must_use] +pub fn find_free_tcp_port() -> Option { + // Create a TcpListener and bind it to a port assigned by the operating system. + let listener = TcpListener::bind(SocketAddr::new(IpAddr::V4(Ipv4Addr::LOCALHOST), 0)).ok()?; + listener + .local_addr() + .ok() + .map(|local_addr| local_addr.port()) +} + +#[cfg(target_os = "macos")] +/// Find next available `utun` interface. +#[must_use] +pub fn get_interface_name(_name: &str) -> String { + if let Ok(interfaces) = nix::net::if_::if_nameindex() { + for index in 0..=u16::MAX { + let ifname = format!("utun{index}"); + if !interfaces + .iter() + .any(|interface| interface.name().to_string_lossy() == ifname) + { + return ifname; + } + } + } + + "utun0".into() +} + +/// Strips location name of all non-alphanumeric characters returning usable interface name. +#[cfg(not(target_os = "macos"))] +#[must_use] +pub fn get_interface_name(name: &str) -> String { + name.chars().filter(|c| c.is_alphanumeric()).collect() +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn tcp_port() { + let port = find_free_tcp_port().unwrap(); + assert_ne!(port, 0); + } +} diff --git a/src-tauri/proto b/src-tauri/proto index d41f95fd..6197e062 160000 --- a/src-tauri/proto +++ b/src-tauri/proto @@ -1 +1 @@ -Subproject commit d41f95fd442e810cf0db30d3086c38b29c30b399 +Subproject commit 6197e0622fe6118bb680810d5dc75ecb289d2d72 diff --git a/src-tauri/src/app_config.rs b/src-tauri/src/app_config.rs index 9147effc..d4b49d2a 100644 --- a/src-tauri/src/app_config.rs +++ b/src-tauri/src/app_config.rs @@ -6,7 +6,7 @@ use std::{ use log::LevelFilter; use serde::{Deserialize, Serialize}; use struct_patch::Patch; -use strum::{AsRefStr, Display, EnumString}; +use strum::{Display, EnumString}; use tauri::AppHandle; static APP_CONFIG_FILE_NAME: &str = "config.json"; @@ -42,7 +42,7 @@ pub enum AppTheme { Dark, } -#[derive(AsRefStr, Debug, Clone, Deserialize, Display, EnumString, Serialize, PartialEq)] +#[derive(Clone, Debug, Deserialize, Display, EnumString, PartialEq, Serialize)] #[strum(serialize_all = "lowercase")] #[serde(rename_all = "lowercase")] pub enum AppTrayTheme { diff --git a/src-tauri/src/appstate.rs b/src-tauri/src/appstate.rs index d67e840b..90c11ed2 100644 --- a/src-tauri/src/appstate.rs +++ b/src-tauri/src/appstate.rs @@ -36,7 +36,7 @@ impl AppState { #[must_use] pub fn new(app_handle: &AppHandle) -> Self { AppState { - db: init_db(&app_handle.path_resolver()).expect("Failed to initalize database"), + db: init_db().expect("Failed to initalize database"), active_connections: Mutex::new(Vec::new()), client: setup_client().expect("Failed to setup gRPC client"), log_watchers: std::sync::Mutex::new(HashMap::new()), diff --git a/src-tauri/src/bin/defguard-client.rs b/src-tauri/src/bin/defguard-client.rs index b88fecbc..689e1aac 100644 --- a/src-tauri/src/bin/defguard-client.rs +++ b/src-tauri/src/bin/defguard-client.rs @@ -43,7 +43,6 @@ lazy_static! { static ref LOG_INCLUDES: Vec = load_log_targets(); } -#[allow(clippy::single_match)] #[tokio::main] async fn main() { // add bundled `wireguard-go` binary to PATH @@ -91,8 +90,8 @@ async fn main() { command_get_app_config, command_set_app_config ]) - .on_window_event(|event| match event.event() { - WindowEvent::CloseRequested { api, .. } => { + .on_window_event(|event| { + if let WindowEvent::CloseRequested { api, .. } = event.event() { #[cfg(not(target_os = "macos"))] let _ = event.window().hide(); @@ -101,7 +100,6 @@ async fn main() { api.prevent_close(); } - _ => {} }) .plugin(tauri_plugin_single_instance::init(|app, argv, cwd| { let _ = app.emit_all(SINGLE_INSTANCE, Payload { args: argv, cwd }); diff --git a/src-tauri/src/bin/defguard-service.rs b/src-tauri/src/bin/defguard-service.rs index 04e4e3a0..08b4cff5 100644 --- a/src-tauri/src/bin/defguard-service.rs +++ b/src-tauri/src/bin/defguard-service.rs @@ -13,7 +13,7 @@ async fn main() -> anyhow::Result<()> { // parse config let config: Config = Config::parse(); - let _guard = logging_setup(&config); + let _guard = logging_setup(&config.log_dir, &config.log_level); // run gRPC server run_server(config).await?; diff --git a/src-tauri/src/commands.rs b/src-tauri/src/commands.rs index 6d4f4f0c..1bdca788 100644 --- a/src-tauri/src/commands.rs +++ b/src-tauri/src/commands.rs @@ -32,7 +32,7 @@ use crate::{ global_log_watcher::{spawn_global_log_watcher_task, stop_global_log_watcher_task}, service_log_watcher::stop_log_watcher_task, }, - proto::{DeviceConfig, DeviceConfigResponse}, + proto::DeviceConfigResponse, service::proto::RemoveInterfaceRequest, tray::{configure_tray_icon, reload_tray_menu}, utils::{ @@ -185,24 +185,6 @@ pub struct Device { pub created_at: i64, } -#[must_use] -pub fn device_config_to_location(device_config: DeviceConfig, instance_id: Id) -> Location { - Location { - id: NoId, - instance_id, - network_id: device_config.network_id, - name: device_config.network_name, - address: device_config.assigned_ip, // Transforming assigned_ip to address - pubkey: device_config.pubkey, - endpoint: device_config.endpoint, - allowed_ips: device_config.allowed_ips, - dns: device_config.dns, - route_all_traffic: false, - mfa_enabled: device_config.mfa_enabled, - keepalive_interval: device_config.keepalive_interval.into(), - } -} - #[derive(Serialize, Deserialize, Debug)] pub struct InstanceResponse { // uuid @@ -258,8 +240,8 @@ pub async fn save_device_config( "Saved wireguard key {} for instance {}({})", keys.pubkey, instance.name, instance.id ); - for location in response.configs { - let new_location = device_config_to_location(location, instance.id); + for dev_config in response.configs { + let new_location = dev_config.into_location(instance.id); debug!( "Saving location {} for instance {}({})", new_location.name, instance.name, instance.id @@ -455,30 +437,22 @@ pub async fn locations_changed( instance: &Instance, device_config: &DeviceConfigResponse, ) -> Result { - let db_locations: Vec> = + let db_locations: HashSet> = Location::find_by_instance_id(transaction.as_mut(), instance.id) .await? .into_iter() - .map(Location::::from) - // ignore route_all_traffic flag as core does not have it - .map(|mut location| { - location.route_all_traffic = false; - location + .map(|location| { + let mut new_location = Location::::from(location); + // Ignore `route_all_traffic` flag as Defguard core does not have it. + new_location.route_all_traffic = false; + new_location }) .collect(); - let db_locations: HashSet> = HashSet::from_iter(db_locations); - let core_locations: Vec> = device_config + let core_locations: HashSet = device_config .configs .iter() - .map(|config| device_config_to_location(config.clone(), instance.id)) - .map(Location::::from) - // just to make sure we are really on the same page - .map(|mut location| { - location.route_all_traffic = false; - location - }) + .map(|config| config.clone().into_location(instance.id)) .collect(); - let core_locations: HashSet> = HashSet::from_iter(core_locations); Ok(db_locations != core_locations) } @@ -534,9 +508,9 @@ pub async fn do_update_instance( // fetch existing locations for given instance let mut current_locations = Location::find_by_instance_id(transaction.as_mut(), instance.id).await?; - for location in response.configs { + for dev_config in response.configs { // parse device config - let new_location = device_config_to_location(location, instance.id); + let new_location = dev_config.into_location(instance.id); // check if location is already present in current locations if let Some(position) = current_locations diff --git a/src-tauri/src/database/mod.rs b/src-tauri/src/database/mod.rs index df324e21..d2f2fdc4 100644 --- a/src-tauri/src/database/mod.rs +++ b/src-tauri/src/database/mod.rs @@ -5,17 +5,15 @@ use std::{ fs::{create_dir_all, File}, }; -use tauri::PathResolver; - -use crate::error::Error; +use crate::{app_data_dir, error::Error}; const DB_NAME: &str = "defguard.db"; pub(crate) type DbPool = sqlx::SqlitePool; /// Initializes the database -pub fn init_db(path_resolver: &PathResolver) -> Result { - let db_url = prepare_db_url(path_resolver)?; +pub fn init_db() -> Result { + let db_url = prepare_db_url()?; debug!("Connecting to database: {db_url}"); let pool = DbPool::connect_lazy(&db_url)?; @@ -24,15 +22,14 @@ pub fn init_db(path_resolver: &PathResolver) -> Result { /// Returns database url. Checks for custom url in `DATABASE_URL` env variable. /// Handles creating appropriate directories if they don't exist. -fn prepare_db_url(path_resolver: &PathResolver) -> Result { +fn prepare_db_url() -> Result { if let Ok(url) = env::var("DATABASE_URL") { info!("The default database location has been just overridden by the DATABASE_URL environment variable. The application will use the database located at: {url}"); Ok(url) } else { debug!("A production database will be used as no custom DATABASE_URL was provided."); // Check if database directory and file exists, create if they don't. - let app_dir = path_resolver - .app_data_dir() + let app_dir = app_data_dir() .ok_or(Error::Config( "Application data directory is not defined. Cannot proceed. Is the application running on a supported platform?".to_string() ))?; diff --git a/src-tauri/src/database/models/instance.rs b/src-tauri/src/database/models/instance.rs index c5c8afe0..6dcdfbe8 100644 --- a/src-tauri/src/database/models/instance.rs +++ b/src-tauri/src/database/models/instance.rs @@ -4,7 +4,7 @@ use serde::{Deserialize, Serialize}; use sqlx::{query, query_as, SqliteExecutor}; use super::{Id, NoId}; -use crate::{error::Error, proto}; +use crate::proto; #[derive(Serialize, Deserialize, Debug)] pub struct Instance { @@ -42,19 +42,16 @@ impl From for Instance { } impl Instance { - pub async fn save<'e, E>(&mut self, executor: E) -> Result<(), Error> + pub(crate) async fn save<'e, E>(&mut self, executor: E) -> Result<(), sqlx::Error> where E: SqliteExecutor<'e>, { - let url = self.url.to_string(); - let proxy_url = self.proxy_url.to_string(); - // Update the existing record when there is an ID query!( "UPDATE instance SET name = $1, uuid = $2, url = $3, proxy_url = $4, username = $5, disable_all_traffic = $6, enterprise_enabled = $7, token = $8 WHERE id = $9;", self.name, self.uuid, - url, - proxy_url, + self.url, + self.proxy_url, self.username, self.disable_all_traffic, self.enterprise_enabled, @@ -66,7 +63,7 @@ impl Instance { Ok(()) } - pub async fn all<'e, E>(executor: E) -> Result, Error> + pub(crate) async fn all<'e, E>(executor: E) -> Result, sqlx::Error> where E: SqliteExecutor<'e>, { @@ -79,7 +76,7 @@ impl Instance { Ok(instances) } - pub async fn find_by_id<'e, E>(executor: E, id: Id) -> Result, Error> + pub(crate) async fn find_by_id<'e, E>(executor: E, id: Id) -> Result, sqlx::Error> where E: SqliteExecutor<'e>, { @@ -93,21 +90,7 @@ impl Instance { Ok(instance) } - pub async fn find_by_uuid<'e, E>(executor: E, uuid: &str) -> Result, Error> - where - E: SqliteExecutor<'e>, - { - let instance = query_as!( - Self, - "SELECT id \"id: _\", name, uuid, url, proxy_url, username, token \"token?\", disable_all_traffic, enterprise_enabled FROM instance WHERE uuid = $1;", - uuid - ) - .fetch_optional(executor) - .await?; - Ok(instance) - } - - pub async fn delete_by_id<'e, E>(executor: E, id: Id) -> Result<(), Error> + pub(crate) async fn delete_by_id<'e, E>(executor: E, id: Id) -> Result<(), sqlx::Error> where E: SqliteExecutor<'e>, { @@ -118,7 +101,7 @@ impl Instance { Ok(()) } - pub async fn delete<'e, E>(&self, executor: E) -> Result<(), Error> + pub(crate) async fn delete<'e, E>(&self, executor: E) -> Result<(), sqlx::Error> where E: SqliteExecutor<'e>, { @@ -126,7 +109,7 @@ impl Instance { Ok(()) } - pub async fn all_with_token<'e, E>(executor: E) -> Result, Error> + pub(crate) async fn all_with_token<'e, E>(executor: E) -> Result, sqlx::Error> where E: SqliteExecutor<'e>, { @@ -154,28 +137,7 @@ impl PartialEq for Instance { } impl Instance { - #[must_use] - pub fn new( - name: String, - uuid: String, - url: String, - proxy_url: String, - username: String, - ) -> Instance { - Instance { - id: NoId, - name, - uuid, - url, - proxy_url, - username, - token: None, - disable_all_traffic: false, - enterprise_enabled: false, - } - } - - pub async fn save<'e, E>(self, executor: E) -> Result, Error> + pub async fn save<'e, E>(self, executor: E) -> Result, sqlx::Error> where E: SqliteExecutor<'e>, { diff --git a/src-tauri/src/database/models/location.rs b/src-tauri/src/database/models/location.rs index 572fd522..c06f3891 100644 --- a/src-tauri/src/database/models/location.rs +++ b/src-tauri/src/database/models/location.rs @@ -108,6 +108,20 @@ impl Location { .await } + pub async fn find_by_name<'e, E>(executor: E, name: &str) -> Result + where + E: SqliteExecutor<'e>, + { + query_as!( + Self, + "SELECT id \"id: _\", instance_id, name, address, pubkey, endpoint, allowed_ips, dns, network_id, \ + route_all_traffic, mfa_enabled, keepalive_interval FROM location WHERE name = $1", + name + ) + .fetch_one(executor) + .await + } + pub async fn find_by_public_key<'e, E>(executor: E, pubkey: &str) -> Result where E: SqliteExecutor<'e>, @@ -193,7 +207,7 @@ impl Location { } } -impl From> for Location { +impl From> for Location { fn from(location: Location) -> Self { Self { id: NoId, diff --git a/src-tauri/src/database/models/tunnel.rs b/src-tauri/src/database/models/tunnel.rs index cdfd74db..9401bf84 100644 --- a/src-tauri/src/database/models/tunnel.rs +++ b/src-tauri/src/database/models/tunnel.rs @@ -52,7 +52,7 @@ impl fmt::Display for Tunnel { } impl Tunnel { - pub async fn save<'e, E>(&mut self, executor: E) -> Result<(), SqlxError> + pub(crate) async fn save<'e, E>(&mut self, executor: E) -> Result<(), SqlxError> where E: SqliteExecutor<'e>, { @@ -84,7 +84,7 @@ impl Tunnel { Ok(()) } - pub async fn delete<'e, E>(&self, executor: E) -> Result<(), Error> + pub(crate) async fn delete<'e, E>(&self, executor: E) -> Result<(), Error> where E: SqliteExecutor<'e>, { @@ -92,7 +92,10 @@ impl Tunnel { Ok(()) } - pub async fn find_by_id<'e, E>(executor: E, tunnel_id: Id) -> Result, SqlxError> + pub(crate) async fn find_by_id<'e, E>( + executor: E, + tunnel_id: Id, + ) -> Result, SqlxError> where E: SqliteExecutor<'e>, { @@ -106,7 +109,7 @@ impl Tunnel { .await } - pub async fn all<'e, E>(executor: E) -> Result, SqlxError> + pub(crate) async fn all<'e, E>(executor: E) -> Result, SqlxError> where E: SqliteExecutor<'e>, { @@ -120,7 +123,7 @@ impl Tunnel { Ok(tunnels) } - pub async fn find_by_server_public_key<'e, E>( + pub(crate) async fn find_by_server_public_key<'e, E>( executor: E, pubkey: &str, ) -> Result @@ -138,7 +141,7 @@ impl Tunnel { .await } - pub async fn delete_by_id<'e, E>(executor: E, id: Id) -> Result<(), Error> + pub(crate) async fn delete_by_id<'e, E>(executor: E, id: Id) -> Result<(), Error> where E: SqliteExecutor<'e>, { @@ -153,7 +156,7 @@ impl Tunnel { impl Tunnel { #[allow(clippy::too_many_arguments)] #[must_use] - pub fn new( + pub(crate) fn new( name: String, pubkey: String, prvkey: String, @@ -190,7 +193,7 @@ impl Tunnel { } } - pub async fn save<'e, E>(self, executor: E) -> Result, SqlxError> + pub(crate) async fn save<'e, E>(self, executor: E) -> Result, SqlxError> where E: SqliteExecutor<'e>, { diff --git a/src-tauri/src/database/models/wireguard_keys.rs b/src-tauri/src/database/models/wireguard_keys.rs index 4cb7ad09..38a27273 100644 --- a/src-tauri/src/database/models/wireguard_keys.rs +++ b/src-tauri/src/database/models/wireguard_keys.rs @@ -1,7 +1,8 @@ -use sqlx::{query_as, query_scalar, Error as SqlxError, SqliteExecutor}; +use base64::{prelude::BASE64_STANDARD, Engine}; +use sqlx::{query_as, query_scalar, SqliteExecutor}; +use x25519_dalek::{PublicKey, StaticSecret}; use super::{Id, NoId}; -use crate::error::Error; // User key pair #[derive(Debug)] @@ -16,7 +17,7 @@ impl WireguardKeys { pub async fn find_by_instance_id<'e, E>( executor: E, instance_id: Id, - ) -> Result, SqlxError> + ) -> Result, sqlx::Error> where E: SqliteExecutor<'e>, { @@ -34,7 +35,7 @@ impl WireguardKeys { impl WireguardKeys { #[must_use] pub fn new(instance_id: Id, pubkey: String, prvkey: String) -> Self { - WireguardKeys { + Self { id: NoId, instance_id, pubkey, @@ -42,7 +43,20 @@ impl WireguardKeys { } } - pub async fn save<'e, E>(self, executor: E) -> Result, Error> + #[must_use] + pub fn generate(instance_id: Id) -> Self { + let secret = StaticSecret::random(); + let public_key = PublicKey::from(&secret); + + Self { + id: NoId, + instance_id, + pubkey: BASE64_STANDARD.encode(public_key), + prvkey: BASE64_STANDARD.encode(secret.as_bytes()), + } + } + + pub async fn save<'e, E>(self, executor: E) -> Result, sqlx::Error> where E: SqliteExecutor<'e>, { diff --git a/src-tauri/src/enterprise/periodic/config.rs b/src-tauri/src/enterprise/periodic/config.rs index d1d10b5d..046fecc5 100644 --- a/src-tauri/src/enterprise/periodic/config.rs +++ b/src-tauri/src/enterprise/periodic/config.rs @@ -1,6 +1,6 @@ use std::{str::FromStr, time::Duration}; -use reqwest::StatusCode; +use reqwest::{Client, StatusCode}; use sqlx::{Sqlite, Transaction}; use tauri::{AppHandle, Manager, State, Url}; use tokio::time::sleep; @@ -15,6 +15,7 @@ use crate::{ }; const INTERVAL_SECONDS: Duration = Duration::from_secs(30); +const HTTP_REQ_TIMEOUT: Duration = Duration::from_secs(5); static POLLING_ENDPOINT: &str = "/api/v1/poll"; /// Periodically retrieves and updates configuration for all [`Instance`]s. @@ -116,10 +117,10 @@ pub async fn poll_instance( instance.proxy_url )) })?; - let response = reqwest::Client::new() + let response = Client::new() .post(url) .json(&request) - .timeout(Duration::from_secs(5)) + .timeout(HTTP_REQ_TIMEOUT) .send() .await; let response = response.map_err(|err| { @@ -237,9 +238,9 @@ async fn config_changed( Ok(locations_changed || info_changed) } -/// Retrieves pubkey & token to build InstanceInfoRequest +/// Retrieves token to build InstanceInfoRequest fn build_request(instance: &Instance) -> Result { - let token = &instance.token.as_ref().ok_or_else(|| Error::NoToken)?; + let token = instance.token.as_ref().ok_or_else(|| Error::NoToken)?; Ok(InstanceInfoRequest { token: (*token).to_string(), diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs index d3a7ba54..c583b65f 100644 --- a/src-tauri/src/lib.rs +++ b/src-tauri/src/lib.rs @@ -1,6 +1,9 @@ +use std::{fmt, path::PathBuf}; + use chrono::NaiveDateTime; use database::models::NoId; use serde::{Deserialize, Serialize}; + pub mod app_config; pub mod appstate; pub mod commands; @@ -14,13 +17,41 @@ pub mod service; pub mod tray; pub mod utils; pub mod wg_config; -use std::fmt; -mod proto { +pub mod proto { + use crate::database::models::{location::Location, Id, NoId}; + tonic::include_proto!("defguard.proxy"); + + impl DeviceConfig { + #[must_use] + pub(crate) fn into_location(self, instance_id: Id) -> Location { + Location { + id: NoId, + instance_id, + network_id: self.network_id, + name: self.network_name, + address: self.assigned_ip, // Transforming assigned_ip to address + pubkey: self.pubkey, + endpoint: self.endpoint, + allowed_ips: self.allowed_ips, + dns: self.dns, + route_all_traffic: false, + mfa_enabled: self.mfa_enabled, + keepalive_interval: self.keepalive_interval.into(), + } + } + } } pub const VERSION: &str = concat!(env!("CARGO_PKG_VERSION"), "-", env!("VERGEN_GIT_SHA")); +// This must match tauri.bundle.identifier from tauri.conf.json. +static BUNDLE_IDENTIFIER: &str = "net.defguard"; +// Returns the path to the user’s data directory. +#[must_use] +pub fn app_data_dir() -> Option { + dirs_next::data_dir().map(|dir| dir.join(BUNDLE_IDENTIFIER)) +} /// Location type used in commands to check if we using tunnel or location #[derive(Clone, Copy, Debug, Deserialize, PartialEq, Serialize)] diff --git a/src-tauri/src/service/mod.rs b/src-tauri/src/service/mod.rs index 4cc2ec84..e3ccbf1d 100644 --- a/src-tauri/src/service/mod.rs +++ b/src-tauri/src/service/mod.rs @@ -69,7 +69,7 @@ impl DaemonService { type InterfaceDataStream = Pin> + Send>>; #[cfg(not(target_os = "macos"))] -fn setup_wgapi(ifname: &str) -> Result, Status> { +pub fn setup_wgapi(ifname: &str) -> Result, Status> { let wgapi = WGApi::::new(ifname.to_string()).map_err(|err| { let msg = format!("Failed to setup kernel WireGuard API for interface {ifname}: {err}"); error!("{msg}"); @@ -80,7 +80,7 @@ fn setup_wgapi(ifname: &str) -> Result, Status> { } #[cfg(target_os = "macos")] -fn setup_wgapi(ifname: &str) -> Result, Status> { +pub fn setup_wgapi(ifname: &str) -> Result, Status> { let wgapi = WGApi::::new(ifname.to_string()).map_err(|err| { let msg = format!("Failed to setup userspace WireGuard API for interface {ifname}: {err}"); error!("{msg}"); @@ -319,7 +319,11 @@ impl From for proto::InterfaceConfig { Self { name: config.name, prvkey: config.prvkey, - address: config.address, + address: config + .addresses + .first() + .map(|addr| addr.to_string()) + .unwrap_or_default(), port: config.port, peers: config.peers.into_iter().map(Into::into).collect(), } @@ -328,10 +332,14 @@ impl From for proto::InterfaceConfig { impl From for InterfaceConfiguration { fn from(config: proto::InterfaceConfig) -> Self { + let mut addresses = Vec::new(); + if let Ok(address) = config.address.parse() { + addresses.push(address); + } Self { name: config.name, prvkey: config.prvkey, - address: config.address, + addresses, port: config.port, peers: config.peers.into_iter().map(Into::into).collect(), mtu: None, diff --git a/src-tauri/src/service/utils.rs b/src-tauri/src/service/utils.rs index f934fe59..ed3d6034 100644 --- a/src-tauri/src/service/utils.rs +++ b/src-tauri/src/service/utils.rs @@ -8,7 +8,6 @@ use tracing_subscriber::{ Layer, }; -use super::config::Config; use crate::service::{ proto::desktop_daemon_service_client::DesktopDaemonServiceClient, DaemonError, DAEMON_BASE_URL, }; @@ -21,17 +20,17 @@ pub fn setup_client() -> Result, DaemonError Ok(client) } -pub fn logging_setup(config: &Config) -> WorkerGuard { +pub fn logging_setup(log_dir: &str, log_level: &str) -> WorkerGuard { // prepare log file appender - let file_appender = tracing_appender::rolling::daily(&config.log_dir, "defguard-service.log"); + let file_appender = tracing_appender::rolling::daily(log_dir, "defguard-service.log"); let (non_blocking, guard) = tracing_appender::non_blocking(file_appender); // prepare log level filter for stdout let stdout_filter = EnvFilter::try_from_default_env() - .unwrap_or_else(|_| format!("{},hyper=info,h2=info", config.log_level).into()); + .unwrap_or_else(|_| format!("{log_level},hyper=info,h2=info").into()); - // prepare log level filter for json file - let json_filter = EnvFilter::new(format!("{},hyper=info,h2=info", Level::DEBUG)); + // prepare log level filter for JSON file + let json_filter = EnvFilter::new("DEBUG,hyper=info,h2=info"); // prepare tracing layers let stdout_layer = fmt::layer() diff --git a/src-tauri/src/service/windows.rs b/src-tauri/src/service/windows.rs index bff4f759..aa79ab5a 100644 --- a/src-tauri/src/service/windows.rs +++ b/src-tauri/src/service/windows.rs @@ -73,7 +73,7 @@ fn run_service() -> Result<()> { })?; let config: Config = Config::parse(); - let _guard = logging_setup(&config); + let _guard = logging_setup(&config.log_dir, &config.log_level); let default_panic = std::panic::take_hook(); std::panic::set_hook(Box::new(move |info| { diff --git a/src-tauri/src/tray.rs b/src-tauri/src/tray.rs index a5c3975c..e0ecb81b 100644 --- a/src-tauri/src/tray.rs +++ b/src-tauri/src/tray.rs @@ -140,10 +140,7 @@ pub fn handle_tray_event(app: &AppHandle, event: SystemTrayEvent) { } pub fn configure_tray_icon(app: &AppHandle, theme: &AppTrayTheme) -> Result<(), Error> { - let resource_str = format!( - "resources/icons/tray-32x32-{}.png", - theme.as_ref().to_lowercase().trim() - ); + let resource_str = format!("resources/icons/tray-32x32-{theme}.png"); debug!("Trying to load the tray icon from {resource_str}"); if let Some(icon_path) = app.path_resolver().resolve_resource(&resource_str) { let icon = Icon::File(icon_path); diff --git a/src-tauri/src/utils.rs b/src-tauri/src/utils.rs index ceec6fcb..020687ba 100644 --- a/src-tauri/src/utils.rs +++ b/src-tauri/src/utils.rs @@ -1,10 +1,6 @@ -use std::{ - net::{IpAddr, Ipv4Addr, SocketAddr, TcpListener}, - path::Path, - process::Command, - str::FromStr, -}; +use std::{env, path::Path, process::Command, str::FromStr}; +use common::{find_free_tcp_port, get_interface_name}; use defguard_wireguard_rs::{host::Peer, key::Key, net::IpAddrMask, InterfaceConfiguration}; use sqlx::query; use tauri::{AppHandle, Manager}; @@ -51,8 +47,8 @@ use winapi::{ }; pub const IS_MACOS: bool = cfg!(target_os = "macos"); -static DEFAULT_ROUTE_IPV4: &str = "0.0.0.0/0"; -static DEFAULT_ROUTE_IPV6: &str = "::/0"; +pub static DEFAULT_ROUTE_IPV4: &str = "0.0.0.0/0"; +pub static DEFAULT_ROUTE_IPV6: &str = "::/0"; /// Setup client interface pub async fn setup_interface( @@ -134,101 +130,49 @@ pub async fn setup_interface( // request interface configuration debug!("Looking for a free port for interface {interface_name}..."); - if let Some(port) = find_random_free_port() { - debug!("Found free port: {port} for interface {interface_name}."); - let interface_config = InterfaceConfiguration { - name: interface_name, - prvkey: keys.prvkey, - address: location.address.clone(), - port: port.into(), - peers: vec![peer.clone()], - mtu: None, - }; - debug!( - "Creating interface for location {location} with configuration {interface_config:?}" - ); - let request = CreateInterfaceRequest { - config: Some(interface_config.clone().into()), - allowed_ips, - dns: location.dns.clone(), - }; - if let Err(error) = client.create_interface(request).await { - if error.code() == Code::Unavailable { - error!("Failed to set up connection for location {location}; background service is unavailable. Make sure the service is running. Error: {error}, Interface configuration: {interface_config:?}"); - Err(Error::InternalError( - "Background service is unavailable. Make sure the service is running.".into(), - )) - } else { - error!("Failed to send a request to the background service to create an interface for location {location} with the following configuration: {interface_config:?}. Error: {error}"); - Err(Error::InternalError( - format!("Failed to send a request to the background service to create an interface for location {location}. Error: {error}. Check logs for details.") - )) - } - } else { - info!("The interface for location {location} has been created successfully, interface name: {}.", interface_config.name); - Ok(()) - } - } else { + let Some(port) = find_free_tcp_port() else { let msg = format!( "Couldn't find free port during interface {interface_name} setup for location {location}" ); error!("{msg}"); - Err(Error::InternalError(msg)) - } -} - -fn find_random_free_port() -> Option { - const MAX_PORT: u16 = 65535; - const MIN_PORT: u16 = 6000; - - // Create a TcpListener to check for port availability - for _ in 0..=(MAX_PORT - MIN_PORT) { - let port = rand::random::() % (MAX_PORT - MIN_PORT) + MIN_PORT; - if is_port_free(port) { - return Some(port); - } - } - - None // No free port found in the specified range -} + return Err(Error::InternalError(msg)); + }; + debug!("Found free port: {port} for interface {interface_name}."); -#[cfg(target_os = "macos")] -/// Find next available `utun` interface. -#[must_use] -pub fn get_interface_name() -> String { - let mut index = 0; - if let Ok(interfaces) = nix::net::if_::if_nameindex() { - while index < u32::MAX { - let ifname = format!("utun{index}"); - if interfaces - .iter() - .any(|interface| interface.name().to_string_lossy() == ifname) - { - index += 1; - } else { - return ifname; - } + let Ok(address) = location.address.parse() else { + let msg = format!("Failed to parse IP address '{}'", location.address); + error!("{msg}"); + return Err(Error::InternalError(msg)); + }; + let interface_config = InterfaceConfiguration { + name: interface_name, + prvkey: keys.prvkey, + addresses: vec![address], + port: port.into(), + peers: vec![peer.clone()], + mtu: None, + }; + debug!("Creating interface for location {location} with configuration {interface_config:?}"); + let request = CreateInterfaceRequest { + config: Some(interface_config.clone().into()), + allowed_ips, + dns: location.dns.clone(), + }; + if let Err(error) = client.create_interface(request).await { + if error.code() == Code::Unavailable { + error!("Failed to set up connection for location {location}; background service is unavailable. Make sure the service is running. Error: {error}, Interface configuration: {interface_config:?}"); + Err(Error::InternalError( + "Background service is unavailable. Make sure the service is running.".into(), + )) + } else { + error!("Failed to send a request to the background service to create an interface for location {location} with the following configuration: {interface_config:?}. Error: {error}"); + Err(Error::InternalError( + format!("Failed to send a request to the background service to create an interface for location {location}. Error: {error}. Check logs for details.") + )) } - } - - "utun0".into() -} - -/// Strips location name of all non-alphanumeric characters returning usable interface name. -#[cfg(not(target_os = "macos"))] -#[must_use] -pub fn get_interface_name(name: &str) -> String { - name.chars().filter(|c| c.is_alphanumeric()).collect() -} - -fn is_port_free(port: u16) -> bool { - if let Ok(listener) = TcpListener::bind(SocketAddr::new(IpAddr::V4(Ipv4Addr::LOCALHOST), port)) - { - // Port is available; close the listener - drop(listener); - true } else { - false + info!("The interface for location {location} has been created successfully, interface name: {}.", interface_config.name); + Ok(()) } } @@ -313,19 +257,16 @@ pub(crate) async fn stats_handler( // gets targets that will be allowed by logger, this will be empty if not provided #[must_use] pub fn load_log_targets() -> Vec { - match std::env::var("DEFGUARD_CLIENT_LOG_INCLUDE") { - Ok(targets) => { - if !targets.is_empty() { - return targets - .split(',') - .filter(|t| !t.is_empty()) - .map(ToString::to_string) - .collect(); - } - Vec::new() + if let Ok(targets) = env::var("DEFGUARD_CLIENT_LOG_INCLUDE") { + if !targets.is_empty() { + return targets + .split(',') + .filter(|t| !t.is_empty()) + .map(ToString::to_string) + .collect(); } - Err(_) => Vec::new(), } + Vec::new() } // helper function to get log file directory for the defguard-service daemon @@ -409,60 +350,65 @@ pub async fn setup_interface_tunnel( // request interface configuration debug!("Looking for a free port for interface {interface_name}..."); - if let Some(port) = find_random_free_port() { - debug!("Found free port: {port} for interface {interface_name}."); - let interface_config = InterfaceConfiguration { - name: interface_name, - prvkey: tunnel.prvkey.clone(), - address: tunnel.address.clone(), - port: port.into(), - peers: vec![peer.clone()], - mtu: None, - }; - debug!("Creating interface {interface_config:?}"); - let request = CreateInterfaceRequest { - config: Some(interface_config.clone().into()), - allowed_ips, - dns: tunnel.dns.clone(), - }; - if let Some(pre_up) = &tunnel.pre_up { - debug!("Executing defined PreUp command before setting up the interface {} for the tunnel {tunnel}: {pre_up}", interface_config.name); - let _ = execute_command(pre_up); - info!( + let Some(port) = find_free_tcp_port() else { + let msg = format!( + "Couldn't find free port for interface {interface_name} while setting up tunnel {tunnel}" + ); + error!("{msg}"); + return Err(Error::InternalError(msg)); + }; + debug!("Found free port: {port} for interface {interface_name}."); + + let Ok(address) = tunnel.address.parse() else { + let msg = format!("Failed to parse IP address '{}'", tunnel.address); + error!("{msg}"); + return Err(Error::InternalError(msg)); + }; + let interface_config = InterfaceConfiguration { + name: interface_name, + prvkey: tunnel.prvkey.clone(), + addresses: vec![address], + port: port.into(), + peers: vec![peer.clone()], + mtu: None, + }; + debug!("Creating interface {interface_config:?}"); + let request = CreateInterfaceRequest { + config: Some(interface_config.clone().into()), + allowed_ips, + dns: tunnel.dns.clone(), + }; + if let Some(pre_up) = &tunnel.pre_up { + debug!("Executing defined PreUp command before setting up the interface {} for the tunnel {tunnel}: {pre_up}", interface_config.name); + let _ = execute_command(pre_up); + info!( "Executed defined PreUp command before setting up the interface {} for the tunnel {tunnel}: {pre_up}", interface_config.name ); - } - if let Err(error) = client.create_interface(request).await { - error!( - "Failed to create a network interface ({}) for tunnel {tunnel}: {error}", - interface_config.name - ); - Err(Error::InternalError(format!( + } + if let Err(error) = client.create_interface(request).await { + error!( + "Failed to create a network interface ({}) for tunnel {tunnel}: {error}", + interface_config.name + ); + Err(Error::InternalError(format!( "Failed to create a network interface ({}) for tunnel {tunnel}, error message: {}. Check logs for more details.", interface_config.name, error.message() ))) - } else { - info!( - "Network interface {} for tunnel {tunnel} created successfully.", - interface_config.name - ); - if let Some(post_up) = &tunnel.post_up { - debug!("Executing defined PostUp command after setting up the interface {} for the tunnel {tunnel}: {post_up}", interface_config.name); - let _ = execute_command(post_up); - info!("Executed defined PostUp command after setting up the interface {} for the tunnel {tunnel}: {post_up}", interface_config.name); - } - debug!( - "Created interface {} with config: {interface_config:?}", - interface_config.name - ); - Ok(()) - } } else { - let msg = format!( - "Couldn't find free port for interface {interface_name} while setting up tunnel {tunnel}" + info!( + "Network interface {} for tunnel {tunnel} created successfully.", + interface_config.name ); - error!("{msg}"); - Err(Error::InternalError(msg)) + if let Some(post_up) = &tunnel.post_up { + debug!("Executing defined PostUp command after setting up the interface {} for the tunnel {tunnel}: {post_up}", interface_config.name); + let _ = execute_command(post_up); + info!("Executed defined PostUp command after setting up the interface {} for the tunnel {tunnel}: {post_up}", interface_config.name); + } + debug!( + "Created interface {} with config: {interface_config:?}", + interface_config.name + ); + Ok(()) } } @@ -476,9 +422,6 @@ pub async fn get_tunnel_interface_details( let peer_pubkey = &tunnel.pubkey; // generate interface name - #[cfg(target_os = "macos")] - let interface_name = get_interface_name(); - #[cfg(not(target_os = "macos"))] let interface_name = get_interface_name(&tunnel.name); debug!("Fetching tunnel stats for tunnel ID {tunnel_id}"); @@ -539,9 +482,6 @@ pub async fn get_location_interface_details( let peer_pubkey = keys.pubkey; // generate interface name - #[cfg(target_os = "macos")] - let interface_name = get_interface_name(); - #[cfg(not(target_os = "macos"))] let interface_name = get_interface_name(&location.name); debug!("Fetching location stats for location ID {location_id}"); @@ -594,9 +534,6 @@ pub(crate) async fn handle_connection_for_location( ) -> Result<(), Error> { debug!("Setting up the connection for location {}", location.name); let state = handle.state::(); - #[cfg(target_os = "macos")] - let interface_name = get_interface_name(); - #[cfg(not(target_os = "macos"))] let interface_name = get_interface_name(&location.name); setup_interface( location, @@ -641,9 +578,6 @@ pub(crate) async fn handle_connection_for_tunnel( ) -> Result<(), Error> { debug!("Setting up the connection for tunnel: {}", tunnel.name); let state = handle.state::(); - #[cfg(target_os = "macos")] - let interface_name = get_interface_name(); - #[cfg(not(target_os = "macos"))] let interface_name = get_interface_name(&tunnel.name); setup_interface_tunnel(tunnel, interface_name.clone(), state.client.clone()).await?; state diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index ad78fa1f..e5222da5 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -8,7 +8,7 @@ }, "package": { "productName": "defguard-client", - "version": "1.1.0" + "version": "1.1.1" }, "tauri": { "systemTray": { diff --git a/src/pages/client/pages/ClientInstancePage/components/StatsLayoutSelect/StatsLayoutSelect.tsx b/src/pages/client/pages/ClientInstancePage/components/StatsLayoutSelect/StatsLayoutSelect.tsx index e113ff7c..f3e333ba 100644 --- a/src/pages/client/pages/ClientInstancePage/components/StatsLayoutSelect/StatsLayoutSelect.tsx +++ b/src/pages/client/pages/ClientInstancePage/components/StatsLayoutSelect/StatsLayoutSelect.tsx @@ -35,7 +35,7 @@ export const StatsLayoutSelect = ({ locations }: StatsLayoutSelect) => { ); const renderSelected: SelectProps['renderSelected'] = useCallback( - (value): SelectSelectedValue => { + (value: ClientView): SelectSelectedValue => { const selected = options.find((o) => o.value === value); if (selected) { return { diff --git a/src/shared/defguard-ui b/src/shared/defguard-ui index f31fdfc0..d5216800 160000 --- a/src/shared/defguard-ui +++ b/src/shared/defguard-ui @@ -1 +1 @@ -Subproject commit f31fdfc0286a336e289cf2d76d0796f709b89a9f +Subproject commit d52168005b2ad6e3616e60c6a78df9c01746e702 diff --git a/tsconfig.json b/tsconfig.json index 30dde982..71027951 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,14 +1,19 @@ { "compilerOptions": { "baseUrl": "./", - "target": "ESNext", - "types": ["vite/client"], + "target": "ES2022", + "types": [ + "vite/client" + ], "useDefineForClassFields": true, - "lib": ["ES2020", "DOM", "DOM.Iterable"], + "lib": [ + "EsNext", + "DOM", + "DOM.Iterable" + ], "module": "ESNext", "skipLibCheck": true, "allowSyntheticDefaultImports": true, - /* Bundler mode */ "moduleResolution": "bundler", "allowImportingTsExtensions": true, @@ -16,7 +21,6 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - /* Linting */ "strict": true, "noUnusedLocals": true, @@ -28,7 +32,17 @@ } ] }, - "include": ["src"], - "exclude": ["node_modules", "dist", "build"], - "references": [{ "path": "./tsconfig.node.json" }] -} + "include": [ + "src" + ], + "exclude": [ + "node_modules", + "dist", + "build" + ], + "references": [ + { + "path": "./tsconfig.node.json" + } + ] +} \ No newline at end of file